CubeHash

提供: tezos-wiki
移動先: 案内検索

'CubeHash' 'は、Daniel J. BernsteinによってNIST hash function competitionに提出された暗号化ハッシュ関数です。 CubeHashは128バイトの状態を持ち、ワイドパイプ構築を使用し、[ブロック暗号#ARX add-rotate-xor | ARXベース]です。 メッセージブロックは、128バイトの状態の最初のビットにXORされ、ブロック間のr-round bijective変換を行います。 最初のNIST提案( "Cubehash8 / 1")は約200 [1サイクルあたりのサイクル数]を必要としました。 著者は、NISTからの説明の後、提案をCubehash16 / 32に変更しました.CubeHash8 / 1より約16倍速く、参照プラットフォームでSHA-256とSHA-512の両方に容易に追いつくことができます。 セキュリティマージン "と呼ばれる。

コンテストの第2ラウンドに進んだCubeHashは5人のファイナリストの1人に選ばれませんでした。 Bernsteinは以来、パラメータをさらに調整してきました。

どのように動作するか[編集]

この説明はNISTの提出ではなく、最新の仕様を参照しています。< ref name = "cubedef" />

CubeHashには5つのパラメータがあり、特定のインスタンスはCubeHash 'i' 'r' / 'b' + 'f' h '

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

オリジナルのNIST提出では、 は10 'r' に固定されていました。時代遅れの表記CubeHash 'f' は暗黙のうちに10 ' '。

内部状態は、単語の5次元配列(4バイトの整数)、つまり両方の次元で0-1と定義されます。単語は座標[00000]〜[11111]で参照されます。単語はリトルエンディアンとして扱われます。

内部状態は、最初の3つの単語([00000]、[00001]、[00010])を 'h' / 8、 'b' 、および 'r' 'に設定することによって初期化されます'、他のすべての単語は0になります。状態は ラウンドを経て実行され、初期化ステージが完了します。状態は、初期化ベクトル(IV)になりました。 IVは、 'h' '、' b '、' r 'の特定の組み合わせに対して保存して再利用することができます。

メッセージは埋められ、 'b' - バイトブロックに分割されます。パッディングは、完全なブロックを作るのに必要なだけ1ビット、続いて多くの0ビットを付加する。

各ブロックは、状態の最初の 'b' 'バイトに XORを入力し、次に' r '変換のラウンドを実行します。

最後に、1が状態語[11111]にXORされ、変換のラウンドが実行されます。

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

ラウンド関数[編集]

ファイル:CubeHash Mixing Function.svg
ミキシング機能の10段階。 5つの次元のうちの2つが展開されています。

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

#x [ '1' jklm] modulo 2を各(j、k、l、m)に対してx [ '0' jklm]を加える。
#x( '0' jklm)をそれぞれ(j、k、l、m)に対して7ビットだけ上に回します。
#x( '"' 01 'klm)をx(' 00 'klm)と入れ替えます。
#x( '0' 'jklm)に、各(j、k、l、m)に対して、Xor x [' 1 'jklm]
#x( '1' ]を使ってx [ '1' 'j' )
#x [ '1' jklm] modulo 2を各(j、k、l、m)に対してx [ '0' jklm]を加える。
#x( '0' jklm)をそれぞれ(j、k、l、m)に対して11ビットだけ上に回転させる。
#x( '0' j '1' lm]をそれぞれx( '、' 0 '、' )
#x( '0' 'jklm)に、各(j、k、l、m)に対して、Xor x [' 1 'jklm]
#x( '1' 'jkl' '1' ]をそれぞれ(j、k、l)に対してx [ '1' jkl '0' ]を入れ替えます。

ハッシュ例[編集]

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

5df39869c73009fb108994600f1626e6f37c07360c0d8bb53d19cf57b8e74133 \ 5b8034a3eff9892014c4ff315038ef2a391812fe52a440e9a293527d12ca4570 \ 6e0958933470bf814aa4909adb3ec39384e9c314d0db874af21d45bcacb31252 \ 1ce5ab6a3bf6f05de88abbdd0fcfd3fafb8225d546242eada52540095c3da221

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

7ce309a25e2e1603ca0fc369267b4d43f0b1b744ac45d6213ca08e7567566444 \ 8e2f62fdbf7bbd637ce40fc293286d75b9d09e8dda31bd029113e02ecccfd39b

単一のビットを反転するなど、メッセージの小さな変化は、アバランシェ効果のためにハッシュ出力を大きく変えます。メッセージ「ハロー」(1ビットの位置で "Hello"としか異なる)をハッシュすると、次のハッシュ値が得られます。

01ee7f4eb0e0ebfdb8bf77460f64993faf13afce01b55b0d3d2a63690d25010f \ 7127109455a7c143ef12254183e762b15575e0fcc49c79a0471a970ba8a66638

パラメータの変更[編集]

CubeHashでは、さまざまなパラメータを使用してハッシュ出力を判断できます。 ユーザーが使用するパラメーターを決定するのはユーザーの責任です。 さまざまなパラメータを使用して、さまざまなメッセージのハッシュの例をいくつか示します。 メッセージはすべてASCII形式です。

メッセージ: ""(長さゼロの文字列) CubeHash160+16/32+160-512: 4a1d00bbcfcb5a9562fb981e7f7db3350fe2658639d948b9d57452c22328bb32\

CubeHash80+8/1+80-512: 90bc3f2948f7374065a811f1e47a208a53b1a2f3be1c0072759ed49c9c6c7f28\

f26eb30d5b0658c563077d599da23f97df0c2c0ac6cce734ffe87b2e76ff7294

CubeHash10+1/1+10-512: 3f917707df9acd9b94244681b3812880e267d204f1fdf795d398799b584fa8f1\

f4a0b2dbd52fd1c4b6c5e020dc7a96192397dd1bce9b6d16484049f85bb71f2f

CubeHash160+16/32+160-256: 44c6de3ac6c73c391bf0906cb7482600ec06b216c7c54a2a8688a6a42676577d

CubeHash80+8/1+80-256: 38d1e8a22d7baac6fd5262d83de89cacf784a02caa866335299987722aeabc59

CubeHash10+1/1+10-256: 80f72e07d04ddadb44a78823e0af2ea9f72ef3bf366fd773aa1fa33fc030e5cb


メッセージ: "Hello"

CubeHash160+16/32+160-512: dcc0503aae279a3c8c95fa1181d37c418783204e2e3048a081392fd61bace883\

a1f7c4c96b16b4060c42104f1ce45a622f1a9abaeb994beb107fed53a78f588c

CubeHash80+8/1+80-512: 7ce309a25e2e1603ca0fc369267b4d43f0b1b744ac45d6213ca08e7567566444\

8e2f62fdbf7bbd637ce40fc293286d75b9d09e8dda31bd029113e02ecccfd39b

CubeHash10+1/1+10-512: 13cf99c1a71e40b135f5535bee02e151eb4897e4de410b9cb6d7179c677074eb\

6ef1ae9a9e685ef2d2807509541f484d39559525179d53838eda95eb3f6a401d

CubeHash160+16/32+160-256: e712139e3b892f2f5fe52d0f30d78a0cb16b51b217da0e4acb103dd0856f2db0

CubeHash80+8/1+80-256: 692638db57760867326f851bd2376533f37b640bd47a0ddc607a9456b692f70f

CubeHash10+1/1+10-256: f63041a946aa98bd47f3175e6009dcb2ccf597b2718617ba46d56f27ffe35d49


メッセージ: "The quick brown fox jumps over the lazy dog"

CubeHash160+16/32+160-512: bdba44a28cd16b774bdf3c9511def1a2baf39d4ef98b92c27cf5e37beb8990b7\

cdb6575dae1a548330780810618b8a5c351c1368904db7ebdf8857d596083a86

CubeHash80+8/1+80-512: ca942b088ed9103726af1fa87b4deb59e50cf3b5c6dcfbcebf5bba22fb39a6be\

9936c87bfdd7c52fc5e71700993958fa4e7b5e6e2a3672122475c40f9ec816ba

CubeHash10+1/1+10-512: eb7f5f80706e8668c61186c3c710ce57f9094fbfa1dbdc7554842cdbb4d10ce4\

2fce72736d10b152f6216f23fc648bce810a7af4d58e571ec1b852fa514a0a8e

CubeHash160+16/32+160-256: 5151e251e348cbbfee46538651c06b138b10eeb71cf6ea6054d7ca5fec82eb79

CubeHash80+8/1+80-256: 94e0c958d85cdfaf554919980f0f50b945b88ad08413e0762d6ff0219aff3e55

CubeHash10+1/1+10-256: 217a4876f2b24cec489c9171f85d53395cc979156ea0254938c4c2c59dfdf8a4


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

830b2bd5273d616fd785876a4a500218a5388963eeb702fb47547842459f8d89\ 8727a1c8ba40bd48cef47fe82543c2735c033052ae9fcd632d4541bde6b6cb0d\ cb8a9cdf579f5b67b2ae00968180af6e51ebdf0ca597cd2bf91f981f7ab29a62\ 01ad72d946e6c075c6d1337e0a293d6f90c438ac38be153f32aa288ffc5eca8a となります。

セキュリティ[編集]

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

ソース[編集]

http://wikipedia.org/