GOST 28147-89(パート1.導入と一般原則)

Habréには、エッセンス、ソフトウェアの実装、暗号の公開に関する記事が非常に頻繁にあります。 しかし、1つ明らかなことはありません。それらの中に、私たちの国内暗号化アルゴリズムがないのはなぜですか?



標準のGOST 28147-89をよりよく理解するために、5つのパートに分かれたストーリー記事を作成して、これを修正することにしました。 最初の部分(アルゴリズムスキームと一般原則を説明)を除く各部分は、C ++コードを適用した標準の4つの可能な動作モードのそれぞれについて説明します。



アルゴリズムの説明





GOST 28147-89は国内のブロック暗号です。 つまり、プレーンテキストはブロック(この場合は64ビット)に分割され、各ブロックは個別に変換されます。



このアルゴリズムは、下図に示すFeistelネットワークに基づいています。







このスキームの動作を説明します。



  1. 各ブロックは2つの「サブブロック」(それぞれ左と右)に分割されます。
  2. 右ブロックの初期充填は、出力の左ブロックに記録されます。
  3. 鍵データを使用した暗号変換は、適切なブロックの上で実行されます。
  4. 左(ソース)および右(変換された)ブロックは、モジュラー2の加算器でモジュロ2で加算されます。
  5. これを数回繰り返します。


アルゴリズムのブロック図









このスキームには以下が含まれます。





キー



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」の次の部分はこちらから入手できます




All Articles