Leggevo PGP doc e mi sono imbattuto in una parte scritta da Phil Zimmermann (creatore di PGP) che ha suscitato la mia curiosità:
When I was in college in the early 70s, I devised what I believed was a brilliant encryption scheme. A simple pseudorandom number stream was added to the plaintext stream to create ciphertext. This would seemingly thwart any frequency analysis of the ciphertext, and would be uncrackable even to the most resourceful government intelligence agencies. I felt so smug about my achievement.
Years later, I discovered this same scheme in several introductory cryptography texts and tutorial papers. How nice. Other cryptographers had thought of the same scheme. Unfortunately, the scheme was presented as a simple homework assignment on how to use elementary cryptanalytic techniques to trivially crack it. So much for my brilliant scheme. From this humbling experience I learned how easy it is to fall into a false sense of security when devising an encryption algorithm.
Quali tecniche sarebbero in grado di decriptare banalmente il testo codificato in questo modo? Sembra quasi equivalente a un pad singolo (che è infrangibile senza il pad), a patto che lo pseudo-RNG sia abbastanza complicato (periodo molto più lungo del testo crittografato, dimensione media aggiunta a ciascun carattere significativamente più grande della dimensione dei caratteri) e un seme opportunamente complicato (quindi non si può forzare ogni seme).
Ad esempio, utilizzando un Mersenne-Twister (con un periodo di 2 ^ 19937 -1 ~ 4.3x10 ^ 6001) e una passphrase che genera un seme casuale a 256 bit; sembra irremovibile senza ricevere il seme.
Oppure hanno generato un semplice generatore di numeri casuali con un periodo di 2 ^ 32 - 1 ~ 4,3 miliardi (erano gli anni '70, il Mersenne Twister non fu nemmeno inventato fino alla metà degli anni '90); dove potresti forza bruta provare ciascuno dei 4,3 miliardi di semi casuali con una rapida verifica del testo cifrato per vedere se appaiono le parole del dizionario o semplici analisi di frequenza (molti spazi ed e)?