Usando i generatori di numeri casuali del computer per produrre le chiavi, è sicuro?

11

La generazione di una chiave di crittografia utilizzando il generatore di numeri casuali sul proprio computer presenta un rischio per la sicurezza? In tal caso, in che modo tale rischio potrebbe essere mitigato, in particolare quando si generano coppie di chiavi RSA in .Net?

    
posta broccoli_soup 28.06.2011 - 23:30
fonte

4 risposte

16

Using computer random number generators to produce keys, it is secure?

Dipende dall'ambiente, dall'esposizione e dalla sicurezza generale del sistema. Data la difficoltà nell'implementazione di robusti sistemi sicuri, e supponendo che la cosa che stai proteggendo non sia di alto valore (per gli altri), usare il tuo computer per generare numeri casuali è probabilmente ok. Tuttavia, se la minaccia al tuo sistema è elevata, la tua esposizione è ottima e la cosa che stai proteggendo è di alto valore, allora no, l'uso di numeri casuali generati dal computer non è sicuro.

Does generating an encryption key using the random number generator on one's computer present a security risk?

Sì, ma potrebbe non essere un rischio abbastanza significativo per fare qualcosa al riguardo. Vedi la parte successiva della risposta.

If so how might that risk be mitigated, specifically when generating RSA key pairs in .Net?

Nella crittografia RSA la chiave privata e la chiave pubblica sono collegate matematicamente. Sono necessari numeri casuali per generare la coppia di chiavi privata-pubblica. Se un utente malintenzionato aveva i numeri casuali usati per generare la coppia di chiavi e la chiave pubblica, potevano facilmente trovare la chiave privata.

Il framework .Net di Microsoft fornisce RNGCryptoServiceProvide per la generazione casuale di numeri. Tutti i generatori di numeri casuali basati su software sono in realtà generatori di numeri pseudo-casuali. Significa che non sono veramente casuali, ma producono output in un modo che rende l'output casuale.

Tutto il software è deterministico. Significa che per un determinato set di input l'output può essere determinato esattamente. Ciò è male per prng (generatori di numeri pseudo-casuali), perché produrrebbero un output prevedibile. cioè l'output non sarebbe nemmeno pseudo-casuale. Per superare questa limitazione, è necessario disporre di dati casuali per iniziarli.

Dando alla funzione prng un po 'di dati casuali per iniziare può generare molti numeri pseudo-casuali. Esistono molti metodi per generare dati seme casuali: utilizzando il tempo in cui la funzione è stata chiamata, leggendo un blocco di memoria non inizializzata, utilizzando il tempo medio di tempo tra le pressioni della tastiera, la posizione del mouse, ecc. Generalmente i dati utilizzati per generare il casuale non è neanche perfettamente casuale.

Se un utente malintenzionato conosceva l'algoritmo utilizzato per produrre i numeri casuali e i dati seme, potrebbe essere in grado di ridurre i possibili output del prng e utilizzare l'output impostato ridotto per trovare facilmente la chiave privata.

Non so quale algoritmo rpng sia usato da RNGCryptoServiceProvide, quindi non posso parlarne con l'efficacia.

Per mitigare il rischio dovuto alla generazione di numeri casuali, è possibile utilizzare generatori di numeri casuali basati su hardware reali. I generatori di numeri casuali basati su hardware non richiedono un seed, perché invece di un algoritmo usano un processo fisico per generare i loro dati. Alcuni processi fisici hanno caratteristiche casuali o quasi casuali: decadimento di una particella radioattiva, rumore termico, condizioni di competizione nei transistor, ecc. L'output dei generatori di numeri casuali basati su hardware sarà statisticamente più casuale dei numeri generati dal computer. Inoltre, nessun valore disponibile sul tuo computer viene utilizzato per generare l'output. Tuttavia, molti generatori di numeri casuali hardware sono costosi e lenti.

Quindi, il costo in denaro e la velocità valerebbero l'investimento?

Dipende da cosa stai proteggendo e da quanto sofisticati e determinati possono essere i tuoi aggressori.

Nota: alcuni chipset per computer ora includono generatori di numeri casuali hardware.

    
risposta data 29.06.2011 - 02:18
fonte
6

Se ti trovi a Londra dovresti davvero venire ai dc4420.org meetup mensili di quest'anno! Tre discorsi su generatori di numeri casuali e siamo solo a giugno!

Uno dei discorsi è stato di IDQ e di un altro consulente che esamina generatori di numeri casuali per siti di casinò e poker online (ragazzi che si preoccupano davvero della casualità). Questo è quello che ho imparato:

  • Una volta che hai una buona fonte di casualità, lascia i dati da soli "i flussi di dati che abbiamo manomesso di meno avevano le migliori prestazioni di casualità
  • "Non hash entropia". Se rendesse la tua entropia più lunga, la chiameremmo Viagra, non una funzione hash

Quando si tratta di generatori di numeri casuali non c'è bisogno di guardare oltre il Quantis . È relativamente economico ed è veloce e affidabile. È di IDQ, che dice che è utilizzato dal governo di Ginevra.

Il secondo migliore è un meccanismo basato sull'hardware. Per un po 'di divertimento con una fonte radioattiva da un rilevatore di fumo, una web-cam e qualche pitone (per meno di £ 20) verificarlo: link

Nota: questo è un modo divertente per non usare la provata fonte di casualità come il tempo tra le particelle di radiazione, quindi potrebbe non essere veramente casuale (anche se probabilmente più del software). Dovrebbe essere preso come un divertente esperimento piuttosto che come uso di produzione.

Valutazione della qualità dei generatori di numeri casuali:

Il peggio sono i generatori di numeri pseudo casuali basati su software che usano quasi fonti di "casualità" come la corrente della CPU e il tempo peggiore. Usali solo se la risorsa che stai proteggendo e le minacce che stai affrontando vanno bene ad es. Java Dev random.

    
risposta data 29.06.2011 - 10:28
fonte
4

Suppongo tu intenda i PRNG HW disponibili in alcuni chipset.

In generale, è necessario utilizzare la funzione PRNG del sistema operativo. Cercano di produrre una buona casualità. Una volta ho visto un discorso sul progetto PRNG di FreeBSD e hanno integrato il PRNG hardware del chipset in modo tale che, nel peggiore dei casi, non aggiunga casualità ma non indebolisca il PRNG del sistema. Tuttavia, apprezzerei anche altre risorse / conferma / generalizzazione su questo problema.

Si noti che il TPM fornisce anche un PRNG HW. Google può dirti come usarlo. "L'analisi del generatore di numeri casuali di Linux" potrebbe avere anche alcuni indicatori interessanti.

Se non ti fidi del tuo PRNG, puoi provare a eseguire alcune suite di test PRNG. Tuttavia, nessuno di questi può dirti se il tuo PRNG è, in effetti, casuale o solo pseudo-casuale.

    
risposta data 29.06.2011 - 00:12
fonte
3

Per questo tipo di applicazione (generando chiavi abbastanza piccole), la preoccupazione maggiore è che il PRNG non venga seminato con sufficiente entropia - se l'input (i) per il PRNG è prevedibile, così come gli output. Probabilmente il più famoso esempio recente è stato nella versione Debian di OpenSSL (tra settembre 2006 e 13 maggio 2008): l'unica fonte di entropia utilizzata era l'ID di processo del programma di generazione, quindi c'erano solo 32.768 possibili chiavi (e alcuni erano più probabili di altri). (Rif .: Debian Security Advisory DSA-1571-1 e discussione digitaloffense.net/tools/debian-openssl/">here.)

Questo non è stato un incidente isolato. Questa bibliografia elenca 4 esempi nei suoi "Gravi difetti nei PRNG usati nella sezione" applicazioni del mondo reale " (e non sembra essere stato aggiornato in un decennio). Un altro esempio: Samy Kamkar ha mostrato come scoprire abbastanza fonti di entropia per una chiave di sessione di PHP (prima della versione 5.3.2) per rendilo brute-forzato .

Nel complesso, ritengo che l'approccio migliore sia utilizzare un generatore di numeri casuali destinato alla generazione di chiavi (specialmente uno che si occupa della raccolta di entropia per te), da uno sviluppatore di cui ti fidi a prestare attenzione.

    
risposta data 29.06.2011 - 07:13
fonte

Leggi altre domande sui tag