Como describe Maxwell aquí en carteras HD, suponiendo que tenemos un par de claves con una clave privada SK.a
y una clave pública PK.a
y una semilla s
y un punto generador G
, podemos generar un nuevo par de claves de (SK.b, PK.b)
la siguiente manera:
PK.b = PK.a + sG
SK.b = SK.a + s
La ventaja de este método es que un proveedor de servicios puede generar nuevas claves públicas sin conocer la clave privada del cliente. Mi pregunta es, ¿por qué no multiplicamos la semilla y la clave privada en lugar de agregarlas?
PK.b = PK.a * s
SK.b = SK.a * s
¿Hay algún problema con el último método que sugerí?
Un borrador anterior de BIP0032 hizo esto, en realidad. (Perdón por vincular a la wiki de bitcoin; ese cambio se realizó antes de cambiar a git para el seguimiento de BIP).
Según el registro de cambios, se hizo por razones de velocidad.
- [30 de abril de 2013] Se cambió de la multiplicación por I L a la suma de I L (implementación más rápida y sencilla)
Es mucho más rápido derivar una clave privada secundaria de una clave privada principal. El nuevo método requiere solo una suma normal (mod n) en lugar de una multiplicación de puntos ECDSA.
No es más rápido cuando se deriva una clave pública secundaria de una clave pública principal. Eso todavía requiere una multiplicación de ECDSA seguida de una suma de ECDSA. (De hecho, es aproximadamente un 2% más lento ) .
El uso de la adición no agrega ningún problema de seguridad. Es posible obtener una clave privada principal de una clave privada secundaria y una clave pública extendida, pero eso también sería cierto si se usara la multiplicación.
abeikverdi
pieter wuille
abeikverdi
Nick ODell