Tengo una billetera ledger nano hd y utilicé activamente el complemento de Google Chrome para recibir algunas transacciones. Después de eso, vinculé la billetera HD a mi aplicación de tableta mycelium.
Si recibo más transacciones usando la aplicación para tableta, ¿cómo puede el complemento de Chrome permanecer sincronizado y crear una nueva dirección pública desde el punto de inicio correcto?
¿Cómo pueden varias instancias de carteras deterministas que se refieren a la misma cartera saber por dónde empezar a crear nuevas direcciones?
Supongo que no se sincronizan y la reutilización de direcciones parece inevitable.
Supongo que HD ledger nano usa una billetera determinista
Aquí hay una respuesta de KISS.
The Ledger utiliza la tecnología BIP 32, 39, 44 al igual que muchos otros dispositivos de cartera de hardware similares, por ejemplo, Trezor, Keepkey. Debería tener la libertad de usar su billetera de hardware en múltiples implementaciones de software genéticamente independientes en la misma computadora o en varias computadoras con interfaces USB.
Funciona simplemente porque cada aplicación de billetera puede reconstruirse cada vez que se instancia como proceso o subproceso. Usando una semilla de billetera HD (típicamente 12, 15 o 24 BIP 39 palabras), una aplicación de billetera HD consulta efectivamente con un nodo completo (existe localmente o remotamente cuando se usa la tecnología SPV) y alterna secuencialmente a través de un conjunto de índices BIP 44 enteros hasta que no vea más publicaciones de transacciones relacionadas algorítmicamente en una cadena de bloques o se puedan detectar transacciones pendientes relacionadas en el grupo de transacciones de la cadena de bloques. Algunas billeteras web HD sin estado (p. ej., mytrezor.com puede lograrlas) tenderán a hacer esto y se iniciarán más lentamente, mientras que otras aplicaciones de billetera HD con estado (p. ej., Electrum) guardarán el estado localmente y se iniciarán más rápido.
Bueno, es una billetera determinista. Existe una función f que por cada n∈ℕ devuelve la n-ésima dirección que se producirá.
Una dirección es básicamente un hash de una clave pública (podemos ignorar el resto que la compone, pero también es determinista).
Puede obtener una clave pública de una clave privada de forma determinista.
Cada número de 256 bits es una clave privada.
Entonces, su billetera solo necesita hacer números de 256 bits de manera determinista y hacer cálculos para llegar a las direcciones de manera determinista.
Esto se puede hacer fácilmente eligiendo una función hash que genere 256 bits (elijamos sha256) y una sal λ. Una sal es solo algo que se agrega a la entrada de una función hash.
Si su billetera conoce λ, puede generar una cantidad prácticamente arbitraria de direcciones de bitcoin.
g(n) para cada n∈ℕ se puede definir como g(n) := sha256sum(λ.n) donde .
es el operador de concatenación. g(n) es la enésima clave privada.
Si usa una computadora con Linux, simplemente abra la terminal y escriba:
echo "aR3Ba9raAi1" | sha256sum
echo "aR3Ba9raAi2" | sha256sum
echo "aR3Ba9raAi3" | sha256sum
echo "aR3Ba9raAi4" | sha256sum
echo "aR3Ba9raAi5" | sha256sum
echo "aR3Ba9raAi6" | sha256sum
.
.
.
aR3Ba9raAi
es λ. El último dígito del parámetro echo
obtenido es n pero, por supuesto, puede tener más de 1 dígito.
A través de la salida obtienes:
g(1) = 49fc13b53bf8cbc8607c121066a974f5c803aee04629e11696946f93b16825a6
g(2) = 9462e18f435684eb8bf5008f8e7c717729fbfa505554ef4b3325a3eccc807519
g(3) = d7bde9e8c19959b0abaa5c476a3fc7a4eacf713fe78c9e2a66ac202419ddbf6f
g(4) = d08ddf753bb37b853407f1451334bb042d93ee2179c01244a019229a32fe9c03
g(5) = 4291513728b1a0d96b72df35bafa1f78db1ceaf135d874a3d8e5353aa9408893
g(6) = e04aba61558daaa532d252397e5d5467c8dd64552f987e54245ab759dd0517cb
.
.
.
Esas serían las claves privadas. Son los mismos en todas las máquinas siempre que λ permanezca igual. No es necesario entre sus máquinas después de que todas sepan λ. g(n) es determinista y también lo es todo lo demás en la forma de generar una dirección. Entonces f(n) se puede calcular a partir de g(n).
Por supuesto, ese es solo un ejemplo para mostrarle el principio básico detrás de la generación de direcciones deterministas. Está muy simplificado y se omiten los pasos principales para generar direcciones. Esta respuesta solo debería mostrarle que algo se puede calcular de la misma manera en diferentes máquinas sin necesidad de que puedan comunicarse entre sí.
Esto también es genial porque todo lo que necesitas para recuperar una billetera HD es una semilla. No necesita el historial completo de lo que se generó a partir de la semilla porque se puede generar exactamente de la misma manera nuevamente.
Dylan James McGannon
UTF-8
UTF-8
Gianluca Guettini
UTF-8
Dylan James McGannon