標準のGOST 28147-89をよりよく理解するために、5つのパートに分かれた
アルゴリズムの説明
GOST 28147-89は国内のブロック暗号です。 つまり、プレーンテキストはブロック(この場合は64ビット)に分割され、各ブロックは個別に変換されます。
このアルゴリズムは、下図に示すFeistelネットワークに基づいています。
このスキームの動作を説明します。
- 各ブロックは2つの「サブブロック」(それぞれ左と右)に分割されます。
- 右ブロックの初期充填は、出力の左ブロックに記録されます。
- 鍵データを使用した暗号変換は、適切なブロックの上で実行されます。
- 左(ソース)および右(変換された)ブロックは、モジュラー2の加算器でモジュロ2で加算されます。
- これを数回繰り返します。
アルゴリズムのブロック図
このスキームには以下が含まれます。
- 32ビットの4つのドライブ: N 1 、N 2 、N 3 、N 4 。
- 2つの32ビットドライブ: N 5およびN 6-一定の充填C 2およびC 1がそれぞれ記録されています。
- 256ビットのキーストレージデバイス(RAM)。 RAMは、それぞれ32ビットの8つのドライブで構成されています: X 0 、X 1 、X 2 、X 3 、X 4 、X 5 、X 6 、X 7 。
- モジュロ2の32ビット加算器: CM 2 。
- ビット制限のない別のモジュロ2加算器(64ビットを使用): CM 5
- 32ビットの32ビットを法とする2つの加算器: CM 1 、SM 3 。
- モジュラー加算器(2 32 -1): CM 4 。
- 置換ブロックK :8つの置換ノードK 1 、K 2 、K 3 、K 4 、K 5 、K 6 、K 7 、K 8 、それぞれ64ビットメモリ
- 11ビットRだけ左への循環シフトのレジスタ
キー
KZUで
256ビットのRAMが割り当てられ、GOST 28147-89は256ビットのキーを使用します。 キーは32ビットの8つのブロックに分割され、各ブロックの各ビットは対応する順序のドライブXに順次挿入されます。
つまり、キーの1ビット目はドライブX 0の 1回目の放電、2回目はドライブX 0の 2回目の放電、33回目はドライブX 1の1回目の放電、65回目は1に挿入されます。ドライブX 2の2番目のビットなど、キーの224番目のビットはドライブX 7の 1番目のビットに挿入され、キーの256番目のビットはドライブX 7の 32番目のビットに挿入されます。
キーは、選択されたアルゴリズムの動作モードに従って読み取られますが、記事の以下の部分で読み取られます。
置換ブロックK
置換ブロックには、長期キーである16x8の置換テーブルが含まれています。
大まかに言えば、テーブルの行によって、 何を置き換える必要があるかが決まります(16進法では0から15までの数字)。 列は、置き換えるものを示します。 同時に、ブロックに入力される32ビットのベクトルは8つの4ビットのベクトルに分割され、それぞれが置換テーブルに従って変換されます。
KZUとブロックKの両方のキーは秘密であり、それらの侵害を防ぐための対策が必要です。
動作モード
最後に、GOST 28147-89は4つのモードで動作します。各モードについては、次の4つの記事(C ++コード)で説明します。
- 簡単な交換モード。
- ガンマモード。
- フィードバックガンマモード。
- イミテーションインサートの開発モード。
はい、現時点では、紳士、すべてが、他のすべてのモードの基本である単純な交換モードを次に検討します。
UPD:記事「Easy Replacement Mode」の次の部分はこちらから入手できます 。