Se invii un messaggio a blocco singolo con crittografia singola, esiste una possibilità diversa da zero che più chiavi distinte mappino uno specifico testo in chiaro a uno specifico testo cifrato o che non ci siano chiavi che funzioneranno.
Un codice a blocchi è semplicemente una permutazione pseudo-casuale. Idealmente, il tasto seleziona semplicemente una permutazione casuale dello spazio di input in uno spazio di output - ed è necessariamente una permutazione, quindi la funzione di decrittografia può invertirla.
Come esempio di giocattolo di una permutazione pseudo-casuale con uno spazio tasti molto piccolo e uno spazio input / output molto piccolo, immagina la seguente funzione di crittografia che ha una chiave a 2 bit (0,1,2 o 3) che consente di inserire un messaggio di input a 2 bit in un messaggio di output a 2 bit. In particolare:
- con la chiave 0: gli input {0,1,2,3} criptano rispettivamente ai testi cifrati {2,0,3,1}
- con la chiave 1: {0,1,2,3} criptano rispettivamente a {1,0,3,2}
- con la chiave 2: {0,1,2,3} criptano rispettivamente a {3,1,2,0}
- con la chiave 3: {0,1,2,3} criptano rispettivamente a {3,1,0,2}
(Queste permutazioni sono state generate casualmente in python con scipy.random.permutation(range(4))
).
Nota in questo esempio di giocattolo, che per alcune coppie come (m = 1, c = 2) e (m = 0, c = 0) dove non ci sono chiavi che funzionerebbero. Nel frattempo per altre coppie come (m = 0, c = 3) e (m = 1, c = 1) ci sono più chiavi (in entrambi i casi k = 2 o k = 3) che funzionerebbero.
Quindi, nel peggiore dei casi per questa funzione di crittografia dei giocattoli, sono necessari 3 blocchi per identificarli in modo univoco. (Ad esempio, se i tuoi primi due messaggi erano 0 e 1 non saresti in grado di distinguere tra i tasti 2 e 3 finché non avrai ottenuto un terzo input).
Tuttavia, con blocchi di grandi dimensioni aventi più collisioni tra le stesse due chiavi sarà molto improbabile. Quindi in pratica se si forza bruta due coppie di messaggi cifrati a blocco singolo / testo cifrato con probabilità schiacciante ci sarebbe solo una chiave che funzioni per entrambi.
Nota, fare una doppia crittografia (con due chiavi indipendenti K1, K2) funziona esattamente come l'analisi della singola crittografia di una chiave che è la concatenazione di K1 e K2.