Ich schreibe RC4 für die DCPU-16, aber ich habe einige Fragen, bevor ich beginne.Schreiben RC4 für ein 16-Bit-System
RC4-Algorithmus:
//KSA
for i from 0 to 255
S[i] := i
endfor
j := 0
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
//PRGA
i := 0
j := 0
while GeneratingOutput:
i := (i + 1) mod 256
j := (j + S[i]) mod 256
swap values of S[i] and S[j]
K := S[(S[i] + S[j]) mod 256]
output K
endwhile
Als ich mit 16-Bit-Worten arbeite, so dass jedes Element von S[]
aus einem Bereich von 0 bis 65.535 geht, statt dem erwarteten 0-255. Und K muss 0-65535 sein, was wäre der beste Ansatz, um mit diesem Problem umzugehen?
Die Optionen I (und ihre Probleme) zu sehen sind:
- Noch
Mod 255
überall verwenden und die Ausgabe mit zwei Runden verkettet (wird länger dauern, bevölkern zu laufen und ich möchte, dass meine CPB so gering wie möglich halten) - Tweak RC4 so wird
K
eine 16-Bit-Zahl sein, während immer noch eine Reihe von Länge 255 fürS[]
(ich tun möchte, das Krypto-Recht so bin ich besorgt über Fehler zu machen bastelt mit RC4 verwenden.)
Was ist meine beste Option? Ich habe das Gefühl, dass ich das erste Mal tun muss, aber ich hoffe, dass die Leute hier Vertrauen schaffen können, um # 3 zu machen.
Warum nicht 'AND 255' verwenden? Das ist ziemlich genau das, wofür es ist. – harold
* "(Ich möchte das Crypto richtig machen, also mache ich mir Sorgen um Fehler, die an RC4 herumgebastelt werden)" * - Mach dir keine Sorgen, du * wirst * Fehler machen. Zum Beispiel, trotz deiner besten Bemühungen, garantiere ich, dass deine erste Veröffentlichung unter einem [Timing side-channel attack] leidet (http://en.wikipedia.org/wiki/Timing_attack). Da Sie dies eigentlich nicht für etwas Wichtiges verwenden, ist das in Ordnung - das wird eine gute Lernerfahrung sein. –