Domanda sull'algoritmo RC4

0

Ho iniziato a leggere RC4 da un libro e non sono riuscito a capire correttamente alcune frasi.

The RC4 algorithm is remarkably simple and easy to understand. A variable length key of from 1 to 256 bytes is used to initialize a 256-byte state vector S. At all times S contains a permutation of all 8-bit numbers from 0 to 255.

Da quanto sopra, la mia interpretazione è che supponiamo di usare Java come linguaggio di programmazione

  1. Ogni carattere è di 2 byte e la lunghezza della chiave può essere compresa tra 1 e 128 (256/2) di lunghezza.
  2. Viene creato un vettore / array espandibile. Ma qual è la lunghezza della matrice? La dimensione dell'array è 256?
  3. In ogni momento l'array S contiene una permutazione di tutti i numeri a 8 bit da 0 a 255? Qualcuno potrebbe spiegarmelo.

Gentilmente aiutami perché mi sento perso nel mio primo capitolo per studiare la crittografia.

    
posta zilcuanu 23.02.2015 - 13:51
fonte

1 risposta

0

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.

    
risposta data 23.02.2015 - 14:17
fonte

Leggi altre domande sui tag