DCPU-16用のRC4を作成していますが、始める前にいくつか質問があります。16ビットシステム用のRC4の作成
RC4アルゴリズム:
//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
S[]
の各要素が代わりに期待0-255の、0から65535の範囲から行くことができますので、私は16ビット・ワードで働いていたよう。そしてKは0-65535である必要がありますが、この問題に対処するにはどうすればよいでしょうか?
私が見るオプション(およびその問題は)次のとおりです。
- はまだ実行に時間がかかります(どこでも
Mod 255
を使用し、連結2ラウンドで出力を移入し、私は可能な限り低く、私のCPBを維持したいです) - 微調整RC4まだ
S[]
のために長さ255の配列を使用して(私はRC4いじり間違いを犯す心配ですので、暗号権利をしたいながらそうK
は、16ビットの数になります。)
私の最善の選択肢は何ですか?私は#1をやらなければならないかもしれないと感じていますが、ここの人々が私に#3を行うという自信を与えてくれることを願っています。
なぜ「AND 255」を使用しないのですか?これはほとんどのためのものです。 – harold
*「私は暗号を正しいものにしたいので、RC4で間違いを覚えるのが心配です。」* - 心配しないで、あなたは間違いをするでしょう。たとえば、あなたの最善の努力にもかかわらず、私はあなたの最初のリリースが[timing side-channel attack](http://ja.wikipedia.org/wiki/Timing_attack)に苦しむことを保証します。あなたが何か重要なことにこれを実際に使用しているわけではないので、それはいいです - これは良い学習体験になります:) –