¿Cómo puede saber una semilla de 24 palabras cuándo agregué o eliminé billeteras en un momento posterior?

¡Como no tengo 50 puntos de reputación, tuve que publicar mi pregunta de esta manera!

Esta es una respuesta de " https://bitcoin.stackexchange.com/users/56917/rstack " a la pregunta " ¿Cómo se almacenan las copias de seguridad del libro mayor? "

"Usar palabras para respaldar billeteras es un proceso descrito en BIP 39.

Básicamente, el mnemotécnico se convierte en una semilla. Esta semilla luego se usa como semilla para una billetera determinista jerárquica (HD), como se establece en BIP 32. La semilla se usa para generar una clave privada extendida maestra, a partir de la cual se pueden generar todas las demás claves privadas. La generación de claves para niños sigue el estándar de BIP 44, por lo que también es compatible con otras carteras.

Por lo tanto, al hacer una copia de seguridad de sus palabras mnemotécnicas, cada vez que las ingresa en una billetera, puede volver a crear la semilla, luego la clave privada maestra, luego todas sus otras claves, por lo que su billetera está de regreso".


Cuando inicio mi Ledger por primera vez, obtengo una semilla de 24 palabras generada. En este punto, mi Ledger tiene las billeteras predeterminadas (BTC, ETH, LTC), si las hay. De la respuesta de Rstack, entiendo cómo funciona esto o podría funcionar hasta ahora, PERO, ¿cómo sabe mi semilla de 24 palabras el futuro cuando agrego o elimino billeteras? La semilla de 24 palabras no cambia después de que agrego o elimino billeteras. Las claves públicas y privadas generadas aleatoriamente que se crean en el futuro no pueden tener vínculos con una semilla de 24 palabras generada previamente. ¡No tiene sentido!

A menos que esto pueda explicarse, tendré que asumir que mis claves públicas y privadas están almacenadas en algún lugar y recuperadas por la semilla de 24 palabras.

¿Alguien puede arrojar luz sobre esto? Gracias de antemano y ánimo a todos.

Respuestas (3)

No sé específicamente sobre Ledger, pero para las billeteras HD en general, las claves públicas y privadas no se generan aleatoriamente. Más bien, son generados por un algoritmo determinista a partir de la semilla (en este caso, las 24 palabras). Así que están absolutamente "atados" a la semilla.

Cuando agrega una billetera para otra moneda, las claves para esa billetera presumiblemente se generarán a partir de la misma semilla (usando diferentes parámetros para que no termine con las mismas claves en todas sus billeteras). La semilla en sí permanece igual y no tiene que cambiar para reflejar la creación de la nueva billetera.

Si alguna vez necesita restaurar, supongo que necesitará decirle al dispositivo para qué monedas tenía billeteras. Luego regenerará todas las claves para esas billeteras desde la semilla maestra, usando el mismo algoritmo que usó originalmente, y tendrá todas las mismas claves que tenía antes. (Si intenta restaurar algunas billeteras que no estaba usando o que había eliminado, todo lo que sucederá es que no encontrará monedas en esa billetera).

Sus claves públicas y privadas no se almacenan en ningún lugar excepto dentro del propio dispositivo.

¡Sí, esto tiene mucho sentido ahora! Siempre pensé que la semilla se genera para el libro mayor y no para crear claves. Genial, gracias Nate.

La respuesta corta es que todo el proceso, desde las palabras hasta las claves privadas derivadas y las direcciones, es completamente determinista. Consulte los pasos a continuación para obtener más detalles.

Entropía a mnemotécnica

El proceso para un mnemotécnico de 12 palabras compatible con BIP39, por ejemplo, es que primero se genera (idealmente) un número binario aleatorio de 128 bits de largo con un proceso criptográficamente seguro, luego se calcula una suma de verificación determinista tomando los primeros 4 bits de un resumen de hash SHA256 de los 128 bits formateados como una matriz de bytes.

Luego tenemos 132 bits que se dividen en 12 grupos, y cada grupo apunta a una palabra en un índice de 2^11 palabras (2048 en total).

Mnemónico a semilla:

Esas 12 palabras representan la semilla raíz, que luego se introduce en una función hash HMAC-SHA512 (con 2048 rondas) y los 256 bits más a la izquierda del resumen hash de 512 bits son la clave privada maestra, mientras que los 256 bits más a la derecha del resumen de hash de 512 bits es el código de cadena maestra, según BIP32 para billeteras deterministas jerárquicas (HD) .

Teclas extendidas (xPub/xPrv):

La clave privada maestra se utiliza como una clave privada de curva elíptica para calcular la clave pública maestra, que es de 264 bits.

El código de cadena, junto con un valor de índice que comienza en 0, es lo que le permite iterar en el proceso de derivación para producir (y, por lo tanto, ampliar) un par de claves privadas-públicas secundarias diferentes cada vez, a medida que cambia el valor del índice, mientras que el código de cadena es constante (como entropía).

Claves privadas-públicas secundarias derivadas:

La forma en que funciona este proceso es que la clave pública principal se concatena con el código de cadena principal junto con el valor del índice y se alimenta nuevamente a la función HMAC-SHA512, donde la salida de 512 bits representa la concatenación de la clave privada secundaria y la cadena secundaria. código (donde la clave privada se usa para calcular la clave pública secundaria).

HMAC-SHA512(xPub+Chaincode+index0) = (512bits= child_privatekey_0 || childchaincode0)

childprivatekey_0 * Secp256k1 Generator point = childpublickey_0

HMAC-SHA512(xPub+Chaincode+index2) = (512bits= child_privatekey_1 || childchaincode1)

childprivatekey_1 * Secp256k1 Generator point = childpublickey_1

Este proceso se puede repetir para derivar casi 2 mil millones de claves secundarias de la clave privada extendida (en términos del valor de índice máximo posible).

Por lo tanto, los mnemotécnicos son increíblemente convenientes, en comparación con tener que almacenar tantas claves privadas diferentes, ya que el mnemotécnico le permite recrear todas las claves derivadas e incluso puede admitir múltiples criptomonedas con el uso de BIP44 . Me gusta referirme a los mnemotécnicos como Cryptovaults, y no como billeteras, ya que albergan múltiples billeteras y potencialmente para múltiples cuentas (criptomonedas). Sin embargo, la compensación de seguridad es que todos sus activos pueden vincularse a un punto potencial de falla si el mnemotécnico no está asegurado/derivado correctamente. Por lo tanto, es común que los usuarios tengan varios mnemotécnicos, como hot wallets y otros para almacenamiento en frío.

Por lo tanto, inicialmente no tiene una forma de saber si creó una billetera LTC, por ejemplo, o no. Pero usa el seed, el derivation pathy el gap limitpara ver si hay alguna dirección en la curva de clave pública que se haya usado. Si los hay, marcará la billetera como activa.

Cada criptomoneda tiene su ruta de derivación. Puedes jugar con esta herramienta para ver algunos de ellos.

Una vez que restaure la semilla, el software de la billetera comenzará a iterar sobre la clave pública + la ruta de derivación para encontrar todas las transacciones en la billetera de esa criptomoneda. Esto probablemente filtrará algunos de los datos de su dirección al explorador/nodo completo que están usando porque simplemente va dirección por dirección y solicita el resto. PERO NO COMPARTE SU CLAVE PRIVADA y le da la impresión de que la billetera supo todo el tiempo qué criptos tenía allí.

Pero tenga en cuenta que la limitación de este método es que las direcciones en cada moneda deben haber sido utilizadas para que la billetera las detecte. De lo contrario, no podrá distinguir si activó una moneda o no.

No gap limitestá exactamente relacionado con su pregunta en particular, pero es cuántas iteraciones hará el software antes de la última dirección utilizada conocida. De lo contrario, podría permanecer en un ciclo infinito tratando de generar todas las direcciones que pertenecen a su clave.