M8(暗号)

M8
一般的な
デザイナー日立
初版1999
由来M6
暗号の詳細
ブロックサイズ64ビット
構造フェイステルネットワーク
ラウンド変数

暗号技術においてM8は1999年に日立が設計したブロック暗号です。これは日立が以前に開発したM6アルゴリズムを改良したもので、ハードウェアと32ビットソフトウェアの両方の実装において、より高いセキュリティと高性能を実現するように設計されています。M8は、1999年3月に日立によってISO/IEC 9979-0020として登録されました。[1]

M6と同様に、M8は64ビットのブロックサイズを持つFeistel暗号です。ラウンド関数には32ビットの回転XORモジュラー加算が含まれるため、 ARX暗号の初期の例となっています

この暗号は、可変数のラウンド(任意の正の整数N)を備えており、各ラウンドはラウンド固有の「アルゴリズム決定」によって構造が決定されます。ラウンドを鍵依存にすることで、暗号解読をより困難にすることが意図されています(同様の設計思想についてはFROGを参照)。

暗号の説明

ラウンド数は任意の正の整数Nに設定できますが、少なくとも10ラウンド数を設定することをお勧めします。キーは、64ビットのデータキー、256ビットのキー拡張キー、N個の24ビットアルゴリズム決定キーのセット、およびN個の96ビットアルゴリズム拡張キーのセットという4つのコンポーネントで構成されます。

ラウンド関数は、鍵拡張と暗号化/復号化の両方に使用されます。鍵拡張プロセスでは、64ビットのデータ鍵と256ビットの鍵拡張鍵が、4組の32ビット数値で構成される256ビットの実行鍵に変換されます

この暗号は典型的なフェイステル暗号の設計を採用しています。まず、64ビットの入力ブロックが32ビットずつ2つの半分に分割されます。各ラウンドでは、左半分は鍵依存の変換を受け、右半分と結合されます。最後に、2つの半分が入れ替えられます。ラウンド関数は、合計9つのカスタマイズ可能な演算と3つのビットローテーションのシーケンスで構成されます。

はラウンド番号を表し、入力とを受け取りますラウンドのアルゴリズム拡張キーの 3 つの 32 ビット ワードです。実行キーからのワードです。左のビット単位の回転を表します。および は、24 ビットのアルゴリズム決定キーによって次のように定義されます。

MSB LSBop1 op2 op3 op4 op5 op6 op7 op8 op9 S1 S2 S3

ここで、op1 から op9 はそれぞれ 1 ビット (0 = 加算 mod 2 32、1 = XOR)、S1 から S3 はそれぞれ 5 ビットです。

鍵拡張は8つの暗号ラウンドで構成され、最初の8つのアルゴリズム決定鍵と拡張鍵、鍵拡張鍵を実行鍵として、そしてデータ鍵を入力ブロックとして用いる。8つの中間出力は、実行鍵の8つの構成要素として用いられる

暗号実装

以下はPythonでの暗号の実装です

# https://en.wikipedia.org/wiki/M8_(暗号)M  =  0xffffffffdef add ( x , y ): return ( x + y ) & M        def xor ( x , y ): x ^ yを返す      デフロール( x , s ):リターン(( x << s ) | ( x >> ( 32 - s ) )) & M              def m8_round ( L , R , ri , k , adk , aek ): """ アルゴリズムの1ラウンド。        L, R: 入力 ri: ラウンドインデックス k: 256ビット実行キー adk: 24ビットアルゴリズム決定キー aek: 96ビットアルゴリズム拡張キー """ op  =  [[ add ,  xor ][( adk  >>  ( 23  -  i ))  &  1 ]  for  i  in  range ( 9 )]  S1  =  ( adk  >>  10 )  &  0x1f  S2  =  ( adk  >>  5 )  &  0x1f  S3  =  ( adk  >>  0 )  &  0x1f  A  =  ( aek  >>  64 )  &  M  B  =  ( aek  >>  32 )  &  M  C  =  ( aek  >>  0 )  &  M  KR  =  ( k  >>  ( 32  +  64  *  ( 3  -  ri  %  4 )))  &  M  KL  =  ( k  >>  ( 0  +  64  *  ( 3  -  ri  %  4 )))  &  M x  =  op [ 0 ]( L ,  KL )  y  =  op [ 2 ]( op [ 1 ]( rol ( x ,  S1 ),  x ),  A )  z  =  op [ 5 ]( op [ 4 ]( op [ 3 ]( rol ( y ,  S2 ),  y ),  B ),  KR )  return  op [ 8 ]( op [ 7 ]( op [ 6 ](ロール( z ,  S3 ),  z ),  C ),  R ),  Ldef m8_keyexpand ( dk , kek , adks , aeks ): """ キー拡張。      dk: 64ビットデータキー kek: 256ビットキー拡張キー adks: アルゴリズム決定キー aeks: アルゴリズム拡張キー """ L  =  ( dk  >>  32 )  &  M  R  =  ( dk  >>  0 )  &  M  k  =  0で i が範囲( 8 )場合 : L , R = m8_round ( L , R , i , kek , adks [ i ], aeks [ i ]) k |= ( L << ( 32 * ( 7 - i ))) kを返す                      def m8_encrypt ( data , N , dk , kek , adks , aeks ): """  1 つのブロックを M8 で暗号化します。        data: 64ビットの入力ブロック N: ラウンド数(8以上である必要があります) dk: 64ビットのデータキー kek: 256ビットのキー拡張キー adks: N個の24ビットアルゴリズム決定キーのリスト aeks: N個の96ビットアルゴリズム拡張キーのリスト """ ek  =  m8_keyexpand ( dk ,  kek ,  adks ,  aeks )  L  =  ( data  >>  32 )  &  M  R  =  ( data  >>  0 )  &  M  i 範囲( N )内にある場合: L , R = m8_round ( L , R , i , ek , adks [ i ], aeks [ i ] )戻り値( L << 32 ) | R                 # ISO/IEC 9979/0020 から公開されたテストベクトルresult  =  m8_encrypt (  0x0000_0000_0000_0001 ,  126 ,  0x0123_4567_89AB_CDEF ,  0 ,  [ 0x848B6D ,  0x8489BB ,  0x84B762 ,  0x84EDA2 ]  *  32 ,  [ 0x0000_0001_0000_0000_0000_0000 ]  *  126 , ) assert  result  ==  0xFE4B_1622_E446_36C0

テストベクトル

ISO/IEC 9979-0020 の公開バージョンには、次のテスト データが含まれています。

  • ラウンド番号: 126
  • キー拡張キー: 0 256 (すべてゼロのベクトル)
  • データキー: 0123 4567 89AB CDEF(16進数)
  • アルゴリズム決定キー:
    • ラウンド1、5、9、...:848B6D hex
    • ラウンド2、6、10、...:8489BB hex
    • ラウンド3、7、11、...:84B762 hex
    • ラウンド4、8、12、...:84EDA2 hex
  • アルゴリズム拡張キー: 全ラウンドの 0000 0001 0000 0000 0000 0000 16 進数
  • 平文: 0000 0000 0000 0001 16進数
  • 7ラウンド後の暗号文: C5D6 FBAD 76AB A53B hex
  • 14ラウンド後の暗号文: 6380 4805 68DB 1895 hex
  • 21ラウンド後の暗号文: 2BFB 806E 1292 5B18 hex
  • 28ラウンド後の暗号文: F610 6A41 88C5 8747 hex
  • 56ラウンド後の暗号文: D3E1 66E9 C50A 10A2 hex
  • 126ラウンド後の最終暗号文: FE4B 1622 E446 36C0 hex

暗号解読

暗号の鍵依存的な動作により、弱い鍵のクラスが多数発生し、差分解読線形解読mod n解読を含むさまざまな攻撃に対して暗号が脆弱になります[2]

参考文献

  1. ^ 「ISO/IEC9979-0020 レジスタエントリ」(PDF)クリス・ミッチェル教授、ロンドン大学ロイヤル・ホロウェイ校情報セキュリティグループ。ISO/IEC 9979 暗号化アルゴリズムレジスタ。
  2. ^ 時田敏夫; 松本 勉. "差分暗号解析法、線形暗号解析法およびMod n暗号解析法の暗号アルゴリズムM8 (ISO9979-20)への適用性について".情報処理学会誌. 42 (8).
Retrieved from "https://en.wikipedia.org/w/index.php?title=M8_(cipher)&oldid=1243184462"