¿Qué es una billetera determinista?

Suena como si fuera un proceso que permite reconstruir una billetera a partir de una frase de contraseña o de varios fragmentos dispersos. ¿Alguien podría dar una explicación técnica detallada?

Respuestas (5)

Has dado en el clavo. Una billetera determinista es cualquier sistema que utiliza una frase de contraseña u otro fragmento de datos para crear un par de claves de manera repetible. Siempre que recuerde la frase de contraseña, el par de claves se puede volver a generar a partir de ella, por lo que el almacenamiento ya no es un problema de seguridad. Hay varios métodos para generar billeteras deterministas, pero mi favorito es el generador de direcciones de Bitcoin de Casascius (C#, Windows, binarios aquí )

Normalmente, cuando envías dinero también generas una nueva clave privada/pública para que el "cambio" regrese. por lo tanto, cada vez que envía dinero, su wallet.dat crece un poco.

La idea básica de la billetera determinista: en lugar de una base de datos con muchas claves privadas/públicas, comienza con una sola clave privada, a partir de la cual se pueden calcular todas las claves futuras.

Esto tiene muchas ventajas. Es trivial respaldar y transferible. podría ser utilizado desde múltiples computadoras.

afaik, webcoin.ch utiliza este concepto. El actual cliente "oficial" no.

Advertencia: la billetera no genera una dirección cada vez, las genera en partes de 100 y las reutiliza. Por lo tanto, hacer una copia de seguridad de una billetera una vez cada ~ 50 transacciones debería ser seguro.
exactamente, pero la generación previa de claves no es exactamente el alcance de esta pregunta, por lo tanto, la explicación "trivial para respaldar" debería ser suficiente.
No las genera en fragmentos de 100. Mantiene un grupo de 100 claves, y cada vez que se usa una, se agrega una nueva. Sin embargo, esto cambiará con las billeteras encriptadas en 0.4.0, ya que las claves no se pueden generar de manera segura cuando la billetera está bloqueada.

Una billetera determinista es cualquier billetera para la cual una clave privada determinada se puede recuperar de manera predecible con solo:

  • la semilla secreta original
  • el identificador/número de secuencia del par de llaves deseado

Hay dos tipos de monederos deterministas:

  • monederos secuenciales deterministas
  • billeteras deterministas jerárquicas

Con una billetera determinista secuencial, la semilla es una frase de contraseña o una secuencia de caracteres que se puede incrementar y codificar repetidamente para generar nuevas claves privadas.

Por ejemplo, si uso la frase de contraseña:

'shepherd mais pack rate enamel horace diva filesize maximum really roar mall'

...entonces puedo crear las primeras 100 claves privadas haciendo lo siguiente:

hex(sha256('shepherd mais pack rate enamel horace diva filesize maximum really roar mall 0'))
hex(sha256('shepherd mais pack rate enamel horace diva filesize maximum really roar mall 1'))
...

Y siempre que sea coherente con la forma en que modifico la frase de contraseña original, puedo recuperar fácilmente cualquier frase de contraseña que desee.

Una billetera determinista jerárquica, por otro lado, comienza con un solo par de llaves como el par de llaves maestras. La clave privada de este par de claves es la semilla secreta.

Cada par de llaves tiene hijos. Y la clave pública de un hijo dado de un nodo padre dado en el árbol se genera realizando una multiplicación de curva elíptica en la clave pública del padre.

El propietario puede recuperar la clave privada del niño realizando la misma operación multiplicativa en la clave privada del padre. Esto se debe a que m Clave pública/Clave pública = m Clave privada/Clave privada.

Lo bueno de esto es que puede darle a un servidor una clave pública y ese servidor puede generar nuevas direcciones para usted sin tener que conocer su clave privada.

...

Si está buscando una implementación de python de billeteras deterministas secuenciales, armé una aquí: https://github.com/blockstack/pybitcoin (o simplemente haga "pip install pybitcoin").

Todavía no tengo una implementación funcional de carteras deterministas jerárquicas, pero para eso vería esta implementación de python o esta implementación de ruby .

Muy agradable. Un poco por encima de mi cabeza, pero útil para mí en este momento. ¿Podría considerar responder esta pregunta: ¿Qué es la "semilla de palabra" de la billetera que se usa comúnmente en los clientes de billeteras populares y qué hace?
@Ryan, entonces esto significa que el padre siempre conoce la clave pública y privada del niño, pero al revés no es cierto.
¿Es esta función (derivar una clave privada secundaria de la clave privada maestra) una función unidireccional?

Otro ejemplo que utiliza monederos deterministas es BCCAPI, que es una biblioteca para crear clientes de Bitcoin ligeros y seguros. http://code.google.com/p/bccapi/

Las principales propuestas de mejora de Bitcoin (BIP) asociadas con carteras deterministas, específicamente deterministas jerárquicas (HD) para facilitar la portabilidad entre implementaciones para evitar el bloqueo del proveedor son BIP 32, 39, 44. Los BIP entran en los detalles técnicos. Es posible que desee examinar libbitcoin para ver ejemplos de interfaz de línea de comandos para aplicar los BIP 32, 39 y 44.