¿Puedo usar crypto.getRandomValues para crear una clave privada?

1

En la especificación de window.crypto:

enlace

Dice explícitamente:

"No genere claves usando el método getRandomValues . Use el método generateKey en su lugar".

pero generateKey no admite secp256k1 / ECDSA (relacionado con bitcoin).

¿Por qué dice eso? ¿Porque los números aleatorios no son criptográficos seguros? ¿O porque la clave necesita ser verificada después? (Si es el caso posterior, podemos verificarlo).

    
pregunta ematiu 28.04.2014 - 21:22
fuente

1 respuesta

1

Bueno, para empezar, ECDSA no es un esquema de cifrado , sino un algoritmo de firma digital.

El propósito genérico de una API criptográfica como window.crypto es darle acceso a implementaciones de algunos algoritmos criptográficos. Estas implementaciones pueden estar basadas en software o hardware. En particular, una implementación puede ser una pieza de hardware resistente a la manipulación indebida (un HSM o una tarjeta inteligente) que puede generar claves para algunos algoritmos y almacenarlas, sin dejar que la clave exista fuera del hardware. generateKey() maneja estos casos. Con getRandomValues() , solo puede generar un grupo de bytes en la RAM de la computadora.

Además, las claves privadas a menudo necesitan alguna estructura matemática. En el caso de una ECDSA, una clave privada es un entero grande en un rango definido ( 1 a n-1 , donde n es el orden del generador del subgrupo de la curva); Si desea crear una clave de este tipo, con getRandomValues() , entonces debe usar un poco de aritmética de enteros grandes para asegurarse de que su valor se ajuste al rango adecuado. Una vez más, generateKey() producirá una clave con la estructura correcta para el algoritmo disponible.

    
respondido por el Thomas Pornin 28.04.2014 - 22:13
fuente

Lea otras preguntas en las etiquetas