キューブハッシュ

暗号ハッシュ関数

CubeHash [1]は、 Daniel J. BernsteinNISTハッシュ関数コンペティションに提出した暗号ハッシュ関数です 。CubeHash は128バイトの状態を持ち、ワイドパイプ構造を採用し、ARXベースです。メッセージブロックは128バイト状態の最初のビットにXOR演算され、その後、ブロック間でrラウンドの全単射変換が行われます。NISTの最初の提案(「Cubehash8/1」)では、1バイトあたり約200サイクルが必要でした。[2] NISTからの説明の後、著者は提案をCubehash16/32に変更しました。これは「CubeHash8/1の約16倍高速で、リファレンスプラットフォーム上のSHA-256とSHA-512の両方に容易に追いつく」と同時に、「十分なセキュリティマージン」を維持しています。[3]

CubeHashはコンペティションの第2ラウンドに進出しましたが、最終候補5社には選ばれませんでした。NISTによると、CubeHashは「シンプルでよく理解されている設計」であり、制約のある環境に適しています。しかし、プロセッサにベクトルユニットがない場合、短いメッセージではパフォーマンスが低下します。[4]

バーンスタインはその後パラメータをさらに調整し、CubeHash16+16/32+32–512と定義されたCubeHash512を主に推奨しています。[5]

手術

この説明は最新の仕様を参照しており、NISTの提出物ではありません。[5]

CubeHash には 5 つのパラメータがあり、特定のインスタンスは CubeHash i + r / b + f - hで表されます。

  • iは初期ラウンドの数である
  • rはブロックあたりのラウンド数です
  • bはバイト単位のブロックサイズで、{1, 2, 3, ... 128}で定義されます。
  • fは決勝ラウンドの数である
  • hはハッシュ出力のサイズ(ビット単位)で、{8、16、24、32、... 512}で定義されます。

NISTへの最初の提出では、if は10 rに固定されていました。廃止された表記法であるCubeHash r / b - hは、 ifが暗黙的に 10 rであることを示します

内部状態は、ワード(4バイト整数)の5次元配列として定義され、両次元とも0から1までの値を持ちます。ワードは[00000]から[11111]までの座標で参照されます。ワードはリトルエンディアンとして扱われます。

内部状態は、最初の3ワード([00000]、[00001]、[00010])をそれぞれh /8、brに設定し、その他のワードをゼロに設定することで初期化されます。その後、状態はiラウンド実行され、初期化段階が完了します。この状態は初期化ベクトル(IV)となります。IVは保存され、 hbriの任意の組み合わせで再利用できます

メッセージはパディングされ、bバイトのブロックに分割されます。パディングでは 1 ビットが追加され、その後に必要な数の 0 ビットがブロック全体を構成するのに続きます。

各ブロックは、状態の最初のbバイトにXOR 演算されて入力され、その後rラウンドの変換が実行されます。

最後に、1と状態ワード[11111]をXOR演算し、f回の変換を実行します。

出力ハッシュは、この最終状態の最初のh /8 バイトに含まれるようになりました。

ラウンド関数

混合機能の図解
混合関数の10段階。5次元のうち2次元が展開されています。

CubeHash ラウンド関数は次の 10 ステップで構成されます。

  1. 各(j,k,l,m)について、232を法としてx[ 0jklm ]をx[1jklm]に加えます。
  2. 各(j,k,l,m)について、x[0jklm]を7ビット上方に回転します
  3. 各(k,l,m)について、x[ 00 klm]とx[ 01 klm]を交換します。
  4. 各(j,k,l,m)について、x[1jklm]をx[0jklm]に排他的論理和ます
  5. 各(j,k,m)について、x [ 1jk0m ]とx[ 1jk1m ]交換します
  6. 各(j,k,l,m)について、232を法としてx[ 0jklm ]をx[1jklm]に加えます。
  7. (j,k,l,m)ごとにx[0jklm]を11ビット上方に回転します
  8. 各(j,l,m)について、x[ 0 j 0 lm]とx[ 0 j 1 lm]を交換します。
  9. 各(j,k,l,m)について、x[1jklm]をx[0jklm]に排他的論理和ます
  10. 各(j,k,l)について、x [ 1jkl0 ]とx[ 1jkl1 ]交換します。

ハッシュの例

この例ではCubeHash80+8/1+80-512を使用します。初期化ベクトルはすべての80+8/1+ f -512ハッシュで同じであり、以下のようになります。

6998f35dfb0930c760948910e626160f36077cf3b58b0d0c57cf193d3341e7b8\
a334805b2089f9ef31ffc4142aef3850fe121839e940a4527d5293a27045ca12\
9358096e81bf70349a90a44a93c33edb14c3e9844a87dbd0bc451df25212b3ac\
6aabe51c5df0f63bddbb8ae8fad3cf0fd52582fbad2e2446094025a521a23d5c

ASCIIメッセージ「Hello」(16進数:0x48、0x65、0x6c、0x6c、0x6f)の ハッシュ化には、6つのメッセージブロックを使用します。メッセージからは5つのブロックが抽出され、バイトアラインメントされた入力であるため、パディング用のブロックが1つあります。512ビットのハッシュ値は次のとおりです。

7ce309a25e2e1603ca0fc369267b4d43f0b1b744ac45d6213ca08e7567566444\
8e2f62fdbf7bbd637ce40fc293286d75b9d09e8dda31bd029113e02ecccfd39b

メッセージの1ビット反転といった小さな変更は、雪崩効果によりハッシュ出力を大きく変化させます。「hello」(「Hello」と1ビット位置のみ異なる)というメッセージをハッシュすると、次のハッシュ値が得られます。

01ee7f4eb0e0ebfdb8bf77460f64993faf13afce01b55b0d3d2a63690d25010f\
7127109455a7c143ef12254183e762b15575e0fcc49c79a0471a970ba8a66638

パラメータの変更

CubeHashでは、ハッシュ出力を決定するために様々なパラメータを使用できます。どのパラメータを使用するかはユーザー次第です。以下に、様々なパラメータを使用した様々なメッセージのハッシュ例をいくつか示します。メッセージはすべてASCII形式です。

メッセージ: "" (長さゼロの文字列)
キューブハッシュ 160+16/32+160-512: 4a1d00bbcfcb5a9562fb981e7f7db3350fe2658639d948b9d57452c22328bb32\
                           f468b072208450bad5ee178271408be0b16e5633ac8a1e3cf9864cffbc8e043a

キューブハッシュ 80+8/1+80-512: 90bc3f2948f7374065a811f1e47a208a53b1a2f3be1c0072759ed49c9c6c7f28\
                       f26eb30d5b0658c563077d599da23f97df0c2c0ac6cce734ffe87b2e76ff7294

キューブハッシュ 10+1/1+10-512: 3f917707df9acd9b94244681b3812880e267d204f1fdf795d398799b584fa8f1\
                       f4a0b2dbd52fd1c4b6c5e020dc7a96192397dd1bce9b6d16484049f85bb71f2f

キューブハッシュ160+16/32+160-256: 44c6de3ac6c73c391bf0906cb7482600ec06b216c7c54a2a8688a6a42676577d

キューブハッシュ 80+8/1+80-256: 38d1e8a22d7baac6fd5262d83de89cacf784a02caa866335299987722aeabc59

キューブハッシュ 10+1/1+10-256: 80f72e07d04ddadb44a78823e0af2ea9f72ef3bf366fd773aa1fa33fc030e5cb
メッセージ:「こんにちは」
CubeHash160+16/32+160-512: dcc0503aae279a3c8c95fa1181d37c418783204e2e3048a081392fd61bace883\
                           a1f7c4c96b16b4060c42104f1ce45a622f1a9abaeb994beb107fed53a78f588c

キューブハッシュ 80+8/1+80-512: 7ce309a25e2e1603ca0fc369267b4d43f0b1b744ac45d6213ca08e7567566444\
                       8e2f62fdbf7bbd637ce40fc293286d75b9d09e8dda31bd029113e02ecccfd39b

キューブハッシュ 10+1/1+10-512: 13cf99c1a71e40b135f5535bee02e151eb4897e4de410b9cb6d7179c677074eb\
                       6ef1ae9a9e685ef2d2807509541f484d39559525179d53838eda95eb3f6a401d

キューブハッシュ160+16/32+160-256: e712139e3b892f2f5fe52d0f30d78a0cb16b51b217da0e4acb103dd0856f2db0

キューブハッシュ80+8/1+80-256: 692638db57760867326f851bd2376533f37b640bd47a0ddc607a9456b692f70f

キューブハッシュ 10+1/1+10-256: f63041a946aa98bd47f3175e6009dcb2ccf597b2718617ba46d56f27ffe35d49
メッセージ: 「素早い茶色のキツネが怠け者の犬を飛び越える」
キューブハッシュ160+16/32+160-512: bdba44a28cd16b774bdf3c9511def1a2baf39d4ef98b92c27cf5e37beb8990b7\
                           cdb6575dae1a548330780810618b8a5c351c1368904db7ebdf8857d596083a86

キューブハッシュ80+8/1+80-512: ca942b088ed9103726af1fa87b4deb59e50cf3b5c6dcfbcebf5bba22fb39a6be\
                       9936c87bfdd7c52fc5e71700993958fa4e7b5e6e2a3672122475c40f9ec816ba

キューブハッシュ10+1/1+10-512: eb7f5f80706e8668c61186c3c710ce57f9094fbfa1dbdc7554842cdbb4d10ce4\
                       2fce72736d10b152f6216f23fc648bce810a7af4d58e571ec1b852fa514a0a8e

キューブハッシュ160+16/32+160-256: 5151e251e348cbbfee46538651c06b138b10eeb71cf6ea6054d7ca5fec82eb79

キューブハッシュ80+8/1+80-256: 94e0c958d85cdfaf554919980f0f50b945b88ad08413e0762d6ff0219aff3e55

キューブハッシュ 10+1/1+10-256: 217a4876f2b24cec489c9171f85d53395cc979156ea0254938c4c2c59dfdf8a4

示されている4つのバリアントの初期化ベクトルもすべて異なります。例えば、CubeHash80+8/1+80-512の初期化ベクトルは上記に示されていますが、CubeHash80+8/1+80-256の初期化ベクトルは次のとおりです。

830b2bd5273d616fd785876a4a500218a5388963eeb702fb47547842459f8d89\
8727a1c8ba40bd48cef47fe82543c2735c033052ae9fcd632d4541bde6b6cb0d\
cb8a9cdf579f5b67b​​2ae00968180af6e51ebdf0ca597cd2bf91f981f7ab29a62\
01ad72d946e6c075c6d1337e0a293d6f90c438ac38be153f32aa288ffc5eca8a

安全

この関数の強度は、bが1に近づくにつれて、またrが増加するにつれて増加します。したがって、CubeHash 8/1-512はCubeHash 1/1-512よりも強力(より安全)であり、CubeHash 1/1-512はCubeHash 1/2-512よりも強力です。このアルゴリズムの最も弱いバージョンはCubeHash 1/128- hです。ただし、セキュリティと計算時間の間にはトレードオフがあります。より安全なバージョンでは、弱められたバージョンよりもハッシュ値の計算に時間がかかります。

参考文献

  1. ^ Daniel J. Bernstein (2009-09-14). 「CubeHash仕様 (2.B.1)」(PDF) .
  2. ^ Daniel J. Bernstein (2008-10-28). 「CubeHashの効率推定(2.B.2)」(PDF) .
  3. ^ Daniel J. Bernstein (2009-07-15). 「CubeHashパラメータの調整:16倍高速化」(PDF) .
  4. ^ 米国国立標準技術研究所 (2011年2月23日). SHA-3暗号ハッシュアルゴリズムコンペティション第2ラウンドの現状報告 (報告書).
  5. ^ ab Daniel J. Bernstein. 「CubeHash入門」
  • CubeHashのウェブサイト
「https://en.wikipedia.org/w/index.php?title=CubeHash&oldid=1312133677」から取得