Posso usare crypto.getRandomValues per creare una chiave privata?

1

Nella specifica window.crypto:

link

Dice esplicitamente:

"Non generare chiavi utilizzando il metodo getRandomValues . Utilizza invece il metodo generateKey ."

ma generateKey non supporta secp256k1 / ECDSA (correlato a bitcoin).

Perché lo dice? Perché i numeri casuali non sono criptati sicuri? o perché la chiave deve essere verificata in seguito? (se è il caso successivo, possiamo verificarlo).

    
posta ematiu 28.04.2014 - 21:22
fonte

1 risposta

1

Bene, per uno, ECDSA non è uno schema di crittografia , ma un algoritmo di firma digitale.

Lo scopo generico di un'API crittografica come window.crypto è di fornire accesso a implementazioni di alcuni algoritmi crittografici. Queste implementazioni possono essere basate su software o hardware. In particolare, un'implementazione può essere un hardware a prova di manomissione (un HSM o una smart card) in grado di generare chiavi per alcuni algoritmi e memorizzarli, senza mai lasciare che la chiave esista al di fuori dell'hardware. generateKey() gestisce tali casi. Con getRandomValues() , puoi generare solo un mucchio di byte nella RAM del computer.

Inoltre, le chiavi private hanno spesso bisogno di una struttura matematica. Nel caso di un ECDSA, una chiave privata è un numero intero grande in un intervallo definito ( 1 a n-1 , dove n è il ordine del generatore di sottogruppi di curve); se vuoi produrre una chiave del genere da te, con getRandomValues() , allora devi utilizzare alcuni aritmetici di interi interi per assicurarti che il tuo valore si adatti all'intervallo corretto. Anche in questo caso, generateKey() produrrà una chiave con la struttura giusta per l'algoritmo in mano.

    
risposta data 28.04.2014 - 22:13
fonte

Leggi altre domande sui tag