ELI5: ¿Cuál es la diferencia entre una clave secundaria y una clave secundaria reforzada en BIP32?

He leído BIP32 y lo entiendo más o menos.

¿Podría alguien explicarme como si tuviera 5 años cuál es la diferencia entre una llave para niños y una llave para niños endurecida?

Estoy tratando de agregar la generación de billetera HD a un servicio que estoy construyendo. Necesito estar completamente informado sobre esto antes de incursionar en él. No se preocupe, usaré Bitcore , por lo que no estaré incursionando con la criptografía directamente.

Respuestas (1)

Básicamente, una clave secundaria protegida se calcula con hash(parent private key + index), mientras que una clave secundaria no protegida se calcula con hash(parent public key + index).

Entonces, ¿qué consecuencias prácticas tiene esto?

Con una clave pública extendida, puede derivar claves públicas secundarias no protegidas. Esto es útil en situaciones en las que desea aceptar pagos sin poder gastarlos inmediatamente. Por ejemplo, si tuviera un sitio web que vendiera calcetines de alpaca, su servidor podría usar una clave pública extendida para aceptar pagos sin perder todo su dinero si fuera pirateado. Esa es una razón por la que podría usar una derivación no reforzada.

Con una clave privada extendida, también puede derivar claves protegidas.

Sin embargo, las claves públicas no protegidas son más débiles cuando un atacante tiene 1) la clave pública extendida y 2) una de las claves privadas no protegidas derivadas de ella. En esa circunstancia, el atacante puede averiguar la clave privada de la clave pública extendida y, por lo tanto, obtener todas las claves que se pueden derivar de eso, protegidas y no protegidas.

Entonces, ¿qué debe usar su aplicación de forma predeterminada?

Debe usar claves no protegidas y deshabilitar la capacidad de exportar claves privadas cuando eso le permitiría a un atacante comprometer otras claves en la billetera. Incluso si un atacante obtiene una de las claves privadas, en situaciones en las que el atacante no tiene acceso a la clave pública extendida, no reforzada es equivalente a seguridad reforzada. En mi opinión, las características de las claves no reforzadas superan la seguridad adicional de las claves reforzadas.

Sin embargo, si no necesita las características de las claves no protegidas, debe usar claves protegidas, porque son más seguras.

¿Para qué se pueden utilizar las llaves endurecidas? Cuáles son sus limitaciones.
Las claves reforzadas son útiles cuando no necesita la capacidad de darle a alguien una clave pública maestra y hacer que conozcan todas las direcciones. Para esos casos, tienen propiedades de seguridad mucho mejores que los no endurecidos.
@PieterWuille, ¿cómo es eso? No creo que lo entiendo. Quiero hacer un servicio que genere direcciones de bitcoin que la gente pueda pagar y que sepa que puedo gastar. Con direcciones protegidas, necesito una clave privada en este servicio, por lo que si me piratean, pierdo todo el dinero. Con direcciones no protegidas, no hay información confidencial en mi servicio, por lo que puede piratearse sin dañarlo. Solo necesito almacenar la clave privada de forma segura en cualquier lugar.
Sí, eso es algo que solo puede hacer con llaves no protegidas.
¿Cómo cambiar la clave privada a pública en la función hash hace que la derivación no se endurezca? ¿O es solo una convención? ¿Hay 0x00 antepuesto probablemente para que parezca una clave pública?