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.