Domanda

Ho bisogno di creare un one-time pad per crittografare alcuni dati (pochi KB di dimensione). Come devo fare per generare questo one-time pad per evitare tutti i problemi pseudo-casuali associati con la generazione di numeri casuali di base come rand()?

C'è un esistente, strumento di fiducia o una libreria che posso usare per questo?

È stato utile?

Soluzione

Random.ORG . Hanno vari servizi gratuiti (e pagati) che generano numeri veramente casuali sulla base di rumore atmosferico (o almeno questo è ciò che pretendono di fare).

Altri suggerimenti

La maggior parte dei moderni sistemi operativi hanno un crittograficamente sicuro pseudo-generatore di numeri casuali .

Ad esempio, Windows ha CryptGenRandom . È possibile accedere allo stesso flusso da .NET utilizzando il RNGCryptoServiceProvider classe . Da C ++, è possibile accedere lo stesso flusso utilizzando il Microsoft C ++ funzione di libreria rand_s . Da Python, è raggiungibile utilizzando la funzione di urandom (vedi fondo pagina collegata) nel sistema operativo modulo.

PRNGs normali differenza, CSPRNGs sono progettati per superare rigorosi test statistici casualità. Sono inoltre progettati per tenere bene sotto attacco serio, anche quando il loro stato iniziale o in esecuzione diventa disponibile per un attaccante.

Il termine "pseudo-casuale", come utilizzato da crittografi, può essere fuorviante a un lettore non tecnico. Un CSPRNG espande un insieme di valori casuali, noto come un seme, in una sequenza più lunga di numeri. Tale sequenza è riproducibile dato il seme, ma per ogni buon CSPRNG, una piccola modifica nel seme produce una sequenza molto diverso. Pertanto, finché almeno una parte del seme viene selezionata attraverso un processo adeguatamente casuale, un aggressore è in grado di prevedere la sequenza risultante - anche se l'attaccante può influenzare il resto del seme.

Numerosi sistemi importanti, che vanno dalle comunicazioni militari per la crittografia che protegge praticamente tutte le transazioni on-line, si basano sulla sicurezza funzionalmente equivalente tra "crittograficamente sicuro pseudo-casuale" e "random".

Modifica : Se si ha la fortuna di poter lavorare con la gamma di processori Ivy Bridge di Intel, ora avete un altro molto interessante alternativa .

Non è possibile generare numeri casuali veramente algoritmicamente - avete bisogno di assistenza hardware. Se si utilizza un algoritmo, tuttavia fissare (come ad esempio un PRNG crittograficamente sicuro), si sta semplicemente creando un cifrario a flusso basato su quello PRNG; non è più un One Time Pad.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top