RC4 viene applicato a byte, indipendentemente da quanto tempo è un semplice carattere. C'erano volte in cui un personaggio era un byte, ma oggi quei (vecchi) caratteri significano byte. Per essere coerenti con le implementazioni correnti e in caso di caratteri ASCII (quelli il cui numero ordinale è inferiore a 128) si dovrebbe tritare il byte (superiore) contenente lo zero. "password" ha una lunghezza di 8 e sarà applicata 32 volte nella fase di permutazione iniziale. Altrimenti l'array di permutazione conterrà degli artefatti, se solo un byte "secondo" viene effettivamente utilizzato per la permutazione.
il KSA di RC4
for i from 0 to 255
j := (j + S[i] + key[i mod keylength]) mod 256
swap values of S[i] and S[j]
endfor
Se si utilizzano 2 byte per carattere ascii, uno dei byte conterrà uno "0" per ogni secondo byte. Per ogni secondo byte di password, l'algoritmo della pianificazione delle chiavi si ridurrà a:
for i from 0 to 255
j := (j + S[i] + 0) mod 256
swap values of S[i] and S[j]
endfor
Che rende permutabile la S e lo sfruttamento dello stato interiore. Se il primo byte della password è nullo, allora S [0] viene scambiato con S [0], che non è affatto uno swap. Ti suggerisco di fare qualche esperimento su questo - potrebbe essere interessante per te - S [0] può essere più tardi scambiato ma forse no. E può anche essere scambiato con uno di quegli altri sfortunati byte. Il che può portare a valori di permutazione più o meno costanti su determinati valori di S [i].
La sicurezza di questo algoritmo dipende dalla segretezza della permutazione di S. Ma se riesci a indovinare alcuni dei byte di S conoscendo alcune delle proprietà della password, puoi effettivamente ridurre l'incertezza come un aggressore.
Lo streamcipher stesso è applicato in byte. Il flusso pseudocasuale RC4 è un flusso di byte e i dati da crittografare sono un flusso di byte.
- "In ogni momento l'array S contiene una permutazione di tutti i numeri a 8 bit da 0 a 255"
L'array S ha una lunghezza di 256 byte, contiene ogni possibile byte (8 bit = > 2 ^ 8) esattamente una volta. All'inizio S è ordinato in quel modo, che S [0] = 0 .. e S [255] = 255. Ogni byte della Password si scambierà due elementi l'uno con l'altro. Tutti gli elementi da 0 a 255 sono ancora lì, ma non nella posizione come prima. S è lo stato interno dopo l'applicazione della password (questo stato è nascosto / segreto e non è noto a nessuno tranne te). La tua password è la chiave, come creare questa permutazione speciale e, si spera, unica.
hth. per favore chiedi se mi sono perso per spiegare qualcosa.