È sicuro creare un indirizzo Bitcoin da una chiave privata generata da Rand () invece di una curva ellittica crittografica

3

Sto scrivendo un'applicazione C ++ che crea un indirizzo Bitcoin. Ho difficoltà a installare openssl per Windows e farlo funzionare per Visual Studio.

Quindi, mi sto chiedendo, se creo una chiave privata, diciamo una stringa esadecimale di 64 caratteri, semplicemente eseguendo rand () più volte, e poi creo un indirizzo pubblico Bitcoin da quello, sarebbe sicuro?

E se aggiungo più casualità richiedendo all'utente di muovere il mouse in modo casuale e raccogliere dati come semi casuali?

    
posta WereAskingIt 22.08.2015 - 04:12
fonte

2 risposte

3

Utilizzare il mouse è una buona scelta per generare entropia, ma ci sono metodi migliori per generare buoni numeri casuali.

Per generare un singolo indirizzo bitcoin per uso personale, il generatore casuale è probabilmente abbastanza buono, ma è molto molto più debole di una chiave casuale appropriata.

Se questo è per qualsiasi tipo di sistema che genererà molti indirizzi (e quindi sarà un obiettivo ragionevolmente attraente per i cattivi) non è abbastanza sicuro.

Per ogni combinazione di OS / hardware / linguaggio di programmazione, si può dedurre un bel po 'sullo stato del generatore casuale, specialmente se le persone possono creare più indirizzi, in modo che possano raccogliere dati. Da lì è un salto a salti e un salto per prevedere gli indirizzi / le chiavi degli altri popoli. Questo diventa un problema ancora peggiore se viene distribuito come qualsiasi tipo di servizio condiviso nel cloud in cui la stessa istanza di un generatore potrebbe rendere le chiavi per molti utenti

L'uso di un generatore psudorandom reale crittografico equivale a 2-3 linee aggiuntive di codice, e ne vale davvero la pena.

    
risposta data 22.08.2015 - 04:36
fonte
1

No - l'utilizzo di rand () per questo scopo non è sicuro.

Il problema con rand () è che ha solo una piccola quantità di stato interno, penso a 32-bit. Quando lo chiami più volte, ottieni più di 32 bit di dati, ma ci sono solo 2 ^ 32 possibili stati. Quindi se si usano 2048-bit per generare una chiave, ci sono solo 2 ^ 32 chiavi diverse che l'installazione potrebbe eventualmente generare. Se un utente malintenzionato sa di aver usato rand (), può impostare una forza bruta di quelle 2 ^ 32 chiavi possibili, e questo dovrebbe essere completato in un tempo ragionevole. Saprebbero quindi la chiave privata che corrisponde alla tua chiave pubblica, e sarebbero in grado di spendere i tuoi Bitcoin.

C'era una vulnerabilità in Debian OpenSSL relativa alla casualità debole.

L'uso del movimento del mouse è accettabile per generare casualità aggiuntiva. Tuttavia, ti consiglio di utilizzare invece CryptGenRandom la funzione.

    
risposta data 23.08.2015 - 10:21
fonte

Leggi altre domande sui tag