SHACAL-2暗号はどのように計算されますか?

Jan 12 2021

さまざまなハッシュ関数(現在はSHA)の基本的な機能について学習しようとしていますが、スタンフォード大学のビデオを見た後でもかなり行き詰まっています。

ハッシュの1つの方法は、DavidMeyers関数とSHACAL-2ブロック暗号を使用したMerkel-Damgård構造を使用することです。

私が理解している限り、MDは、前のブロック値またはIV(ハッシュ関数またはカスタムソルトキーによって定義された初期ベクトル)を含む64ビットブロックのチェーンに分割されたメッセージです。ブロック値またはIVと、現在のブロック値およびいくつかのxビットキーは、SHACAL-2関数を通過した後、新しい暗号になります。

これは正しく理解されていますか?その場合:SHACAL関数内で何が起こりますか?数学とは何ですか?

私はこれを見つけましたが、それは私の質問に本当に答えません:SHA-256のSHACAL

回答

2 kelalaka Jan 12 2021 at 18:13

MD構造は圧縮機能を使用します $C$ (($F$ 図では)2つの入力があるように。

$$h_i = C(h_{i-1},m_i)$$

そして最初の $h_{-1} = IV$ そして最後 $H = h_{2^k-1}$ はハッシュ値です。

圧縮関数はブロック暗号を使用できます。ブロック暗号へのメッセージは前のハッシュ値であり、キーはメッセージです。 $h_i = E_{m}(h_{i-1})$

圧縮関数にブロック暗号を使用する最初の説明は、11ページのMerkleの論文にあります。この構造は、既存のブロック暗号が直接連鎖しているため、完全に安全ではなく、$\mathcal{O}(2^{n/2})$ 代わりに2番目の原像耐性 $\mathcal{O}(2^{n})$

AESやDESなどの一部のブロック暗号に存在するような関連するキー攻撃は必要ありません。キーはランダムに均一に選択されるため、暗号化の問題は発生しませんが、関連するキーを使用してハッシュ関数を攻撃することができます。これはMannikとPreenelによって広く議論されています

圧縮関数[1]に対する衝突攻撃のために大きな入力が必要であるため、処理するラウンドが多くなります。そのため、設計者は、既存のブロック暗号を使用する代わりに、MD構造用の新しいブロック暗号を作成します。SHA-1の場合はSHACALと呼ばれ、SHA-2の場合はSHACAL-2と呼ばれます。

分割値は圧縮機能によって異なります。MD5、SHA-1、SHA256は512ビットのメッセージブロックを使用し、SHA512は1024ビットのメッセージブロックを使用します。メッセージはブロックサイズの倍数になるようにパディングされ、メッセージサイズは最後にエンコードされます。

たとえば、NIST FIPS180-4のSHA-512パディング

メッセージの長さが、 $M$、です $\ell$ビット。1メッセージの最後にビットを追加し、その後に$k$ ゼロビット、ここで $k$ 方程式の最小の非負の解です $$\ell + 1 + k \equiv 896 \bmod 1024$$ 次に、その数に等しい128ビットブロックを追加します $\ell$ バイナリ表現を使用して表現

任意のブロックサイズに形式化する $b$ そして $d$-ビットエンコードされたメッセージサイズ(SHA-1およびSHA256の場合は64、SHA512の場合は128。

$$\ell + 1 + k \equiv b-d \bmod b$$

したがって、設計基準は、ラウンド関数を単純に保ちながら、多くのラウンドを含むブロック暗号、SHACALは80、SHA-256は64、SHA512は80ラウンドです。

また、ブロック暗号は、一方向の圧縮関数を作成するためのDavies–Meyerとして使用されます。

たとえば、SHA256の計算は次のようになります。

  • $\operatorname{Ch}(E,F,G) = (E \land F) \oplus (\neg E \land G)$
  • $\operatorname{Ma}(A,B,C) = (A \land B) \oplus (A \land C) \oplus (B \land C)$
  • $\Sigma_0(A) = (A\!\ggg\!2) \oplus (A\!\ggg\!13) \oplus (A\!\ggg\!22)$
  • $\Sigma_1(E) = (E\!\ggg\!6) \oplus (E\!\ggg\!11) \oplus (E\!\ggg\!25)$

ビット単位の回転は、SHA-512に異なる定数を使用します。記載されている番号はSHA-256用です。
赤い$\boxplus$ 平均 $ c = a + b \mod 2^{32}$、つまりモジュロ加算。

ご覧のとおり、CPUが処理できる単純な操作、軽いラウンド関数、少し劣化した不平衡Feistel構造。

また、Tiny Encryptionアルゴリズムから、単純なラウンドでも32ラウンド後に安全であることがわかりました。