完全な RC4 暗号プログラム
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/03/10 20:29 UTC 版)
「Forth」の記事における「完全な RC4 暗号プログラム」の解説
1987年、Ron Rivest は RC4 暗号システムを RSA Data Security, Inc. のために開発した。このコードは非常に単純で、説明を読めば大抵のプログラマは書くことができる。 それぞれすべて値の異なった 256 バイトの配列がある(訳注:これが暗号ストリームの状態であり、鍵で適当に初期化する)。 この配列が使われるときはいつも、2つのバイトが交換されることによって変更される。 この交換はカウンタ i および j によって制御され、どちらも最初は 0 である。 新しい i を取得するには 1 を加算する。 新しい j を取得するには、新しい i の位置にある配列のバイトを加算する。 i と j の位置にある配列の値を交換する。 このコード(訳注:後のXORに使う値)は i と j の位置にある配列のバイトの和の位置にある配列のバイトである。 平文を暗号化したり暗号文を復号するためには、このバイトを XOR される。 配列は最初の設定によって 0 から 255 にかけて初期化される(訳注:手順の途中に書いてあるが、これは最初に行う)。 それから i と j を使う、i の位置にある配列のバイトを j に加算による新しい j とキーのバイトの取得、i と j のバイトの交換と手順は進んでいく。 最後に、i と j は 0 にセットされる。 すべての加算は 256 を法とするモジュラ演算である。 さらなる情報は、http://ciphersaber.gurus.com を参照すること。 以下の標準の Forth バージョンはコアのワードのみを使っている。 0 VALUE ii0 VALUE jjCREATE S[] 256 CHARS ALLOT : ARCFOUR (c -- x)ii 1+ DUP TO ii 255 AND( -- i)S[] + DUP C@( -- 'S[i] S[i]) DUP jj + 255 AND DUP TO jj( -- 'S[i] S[i] j)S[] + DUP C@ >R( -- 'S[i] S[i] 'S[j])OVER SWAP C! ( -- 'S[i] S[i])R@ ROT C!( -- S[i])R> +( -- S[i]+S[j])255 AND S[] + C@( -- c x)XOR ; : ARCFOUR-INIT(key len -- )256 MIN LOCALS| len key |256 0 DO I S[] I + C! LOOP0 TO jj 256 0 DO(key len -- ) key I len MOD + C@ S[] I + C@ + jj + 255 AND TO jj S[] I + DUP C@ SWAP (c1 addr1) S[] jj + DUP C@ (c1 addr1 addr2 c2) ROT C! C! LOOP0 TO ii 0 TO jj ; これはこのコードを検証する多くのテストのひとつである。 CREATE KEY: 64 CHARS ALLOT : !KEY (c1 c2 ... cn n—store the specified key of length n)DUP 63 U> ABORT" key too long (<64)"DUP KEY: C! KEY: + KEY: 1+ SWAP ?DO I C! -1 +LOOP ; HEX 61 8A 63 D2 FB 5 !KEY KEY: COUNT ARCFOUR-INIT CR DC ARCFOUR 2 .R SPACE EE ARCFOUR 2 .R SPACE 4C ARCFOUR 2 .R SPACE F9 ARCFOUR 2 .R SPACE 2C ARCFOUR 2 .R CR .(Should be: F1 38 29 C9 DE)
※この「完全な RC4 暗号プログラム」の解説は、「Forth」の解説の一部です。
「完全な RC4 暗号プログラム」を含む「Forth」の記事については、「Forth」の概要を参照ください。
- 完全な RC4 暗号プログラムのページへのリンク