SHA-2

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

擬似コード[編集]

SHA-256アルゴリズムのPseudocodeが続きます。 < code>< code>< / code>< / code>単語はSHA-1と比較して。

                   h0:= 0x6a09e667  h1:= 0xbb67ae85  h2:= 0x3c6ef372  h3:= 0xa54ff53a  h4:= 0x510e527f  h5:= 0x9b05688c  h6:= 0x1f83d9ab  h7:= 0x5be0cd19        k[ 0..63] :=  0x428a2f98、0x71374491、0xb5c0fbcf、0xe9b5dba5、0x3956c25b、0x59f111f1、0x923f82a4、0xab1c5ed5、  0xd807aa98,0x12835b01,0x243185be、0x550c7dc3,0x72be5d74,0x80deb1fe、0x9bdc06a7,0xc19bf174、  0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc、0x2de92c6f、0x4a7484aa、0x5cb0a9dc、0x76f988da、  0x983e5152、0xa831c66d、0xb00327c8、0xbf597fc7、0xc6e00bf3、0xd5a79147、0x06ca6351、0x14292967、  0x27b70a85、0x2e1b2138、0x4d2c6dfc、0x53380d13、0x650a7354、0x766a0abb、0x81c2c92e、0x92722c85、  0xa2bfe8a1、0xa81a664b、0xc24b8b70、0xc76c51a3、0xd192e819、0xd6990624、0xf40e3585、0x106aa070、  0x19a4c116,0x1e376c08,0x2748774c、0x34b0bcb5,0x391c0cb3,0x4ed8aa4a、0x5b9cca4f、0x682e6ff3、  0x748f82ee、0x78a5636f、0x84c87814、0x8cc70208、0x90befffa、0xa4506ceb、0xbef9a3f7、0xc67178f2


長さLビットの元のメッセージで始まる  単一の「1」ビットを付加する  L + 1 + K + 64が512の倍数となるように、K '0'ビットを付加する。ここで、Kは最小数> = 0である。  Lを64ビットのビッグエンディアン整数として追加して、後処理された合計の長さを512ビットの倍数にする      メッセージを512ビットのチャンクに分割する   各チャンク  64エントリのメッセージスケジュール配列を作成します(0..63] 32ビットワードの    チャンクをメッセージスケジュール配列の最初の16ワードw [0..15]にコピーする       〜16まで  s0:=(右回転 xor '(右回転' '18' 'i-15]' ' 'xor' (w i-15] 'rightshift' 3)  s1:=(右回転 '17)' xor '(右回転' '19) 'xor' (w[ i-2] 'rightshift' 10)  w[ i] := w-i-16] ' - 7' - ] s1      a:= h0  b:= h1  c:= h2  d:= h3  e:= h4  f:= h5  g:= h6  h:= h7

から0まで63  S1:=(e 'rightrotate' '6' xor '(e' rightrotate xor '(e' rightrotate '25)  ch:=(e 'と' f 'xor' (( e 'と' g)  temp1:= h '+' S1 '+' "ch" + 'k[ i] '私は]  S0:=(a 'rightrotate' '2' xor rightrotate 'xor' (a rightrotate '22)  maj:=(a 'b' xor 'と' c 'xor' (b 'と' c)  temp2:= S0 '+' maj    h:= g  g:= f  f:= e  e:= d + 'temp1  d:= c  c:= b  b:= a  := temp1 '+' temp2      h0:= h0 + 'a  h1:= h1 '+' 'b  h2:= h2 '+' c  h3:= h3 '+' d  h4:= h4 '+' e  h5:= h5 '+' f  h6:= h6 '+' 'g  h7:= h7 '+' h


     'append' 'h3' append 'h4' append 'h5' append ' 'h6' append 'h7を追加する

< code> ch< / code> < code> maj< / code>値は SHA-1について説明したと同様に最適化できます。

SHA-224はSHA-256と同じですが、次の点が異なります。

  • 初期ハッシュ値< code> h0< / code> < code> h7< / code>異なる
  • 出力は、< code> h7< / code>を省略して構成されています。

h[ 0..7] :=  0xc1059ed8、0x367cd507、0x3070dd17、0xf70e5939、0xffc00b31、0x68581511、0x64f98fa7、0xbefa4fa4

SHA-512の構造はSHA-256と同じですが、

  • メッセージは1024ビットのチャンクに分割され、
  • 初期ハッシュ値とラウンド定数は64ビットに拡張され、
  • 64の代わりに80回のラウンドがあり、
  • メッセージスケジュール配列wは64個の32ビットワードの代わりに80個の64ビットワードを有し、
  • メッセージスケジュール配列wを拡張するために、ループは16から63ではなく16から79になり、
  • 定数は最初の80個の素数に基づいています2.409、
  • 計算に使用されるワードサイズは64ビットですが、
  • (前処理の前に)メッセージの付加された長さは、 'bits'で128ビットのビッグエンディアン整数であり、
  • 使用されるシフト量と回転量は異なります。

h[ 0..7] := 0x6a09e667f3bcc908,0xbb67ae8584caa73b、0x3c6ef372fe94f82b、0xa54ff53a5f1d36f1、  0x510e527fade682d1,0x9b05688c2b3e6c1f、0x1f83d9abfb41bd6b、0x5be0cd19137e2179        k[ 0..79] := [0x428a2f98d728ae22、0x7137449123ef65cd、0xb5c0fbcfec4d3b2f、0xe9b5dba58189dbbc、0x3956c25bf348b538、  0x59f111f1b605d019,0x923f82a4af194f9b、0xab1c5ed5da6d8118,0xd807aa98a3030242,0x12835b0145706fbe、  0x243185be4ee4b28c、0x550c7dc3d5ffb4e2,0x72be5d74f27b896f、0x80deb1fe3b1696b1,0x9bdc06a725c71235、  0xc19bf174cf692694、0xe49b69c19ef14ad2、0xefbe4786384f25e3,0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65、  0x2de92c6f592b0275,0x4a7484aa6ea6e483,0x5cb0a9dcbd41fbd4,0x76f988da831153b5,0x983e5152ee66dfab、  0xa831c66d2db43210,0xb00327c898fb213f、0xbf597fc7beef0ee4、0xc6e00bf33da88fc2,0xd5a79147930aa725、  0x06ca6351e003826f、0x142929670a0e6e70,0x27b70a8546d22ffc、0x2e1b21385c26c926,0x4d2c6dfc5ac42aed、  0x53380d139d95b3df、0x650a73548baf63de、0x766a0abb3c77b2a8、0x81c2c92e47edaee6、0x92722c851482353b、  0xa2bfe8a14cf10364,0xa81a664bbc423001,0xc24b8b70d0f89791,0xc76c51a30654be30,0xd192e819d6ef5218、  0xd69906245565a910,0xf40e35855771202a、0x106aa07032bbd1b8,0x19a4c116b8d2d0c8,0x1e376c085141ab53、  0x2748774cdf8eeb99,0x34b0bcb5e19b48a8,0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb、0x5b9cca4f7763e373、  0x682e6ff3d6b2b8a3,0x748f82ee5defb2fc、0x78a5636f43172f60,0x84c87814a1f0ab72,0x8cc702081a6439ec、  0x90befffa23631e28,0xa4506cebde82bde9,0xbef9a3f7b2c67915,0xc67178f2e372532b、0xca273eceea26619c、  0xd186b8c721c0c207,0xeada7dd6cde0eb1e、0xf57d4f7fee6ed178,0x06f067aa72176fba、0x0a637dc5a2c898a6、  0x113f9804bef90dae、0x1b710b35131c471b、0x28db77f523047d84、0x32caab7b40c72493、0x3c9ebe0a15c9bebc、  0x431d67c49c100d4c、0x4cc5d4becb3e42b6,0x597f299cfc657e2a、0x5fcb6fab3ad6faec、0x6c44198c4a475817]

S0:=(a 'rightrotate' 28) xor '(a' rightrotate 34 'xor' (a 'rightrotate' 39)  S1:=(e 'rightrotate' '14' xor e 'rightrotate' xor '(e' rightrotate '41)    s0:=(右回転 'xor' (右回転 8 i-15] 'xor' (w i-15] 'rightshift' 7)  s1:=(右回転 19) 'xor' (右回転 61) 'xor' (w[ i-2] 'rightshift' 6)

SHA-384はSHA-512と同じですが、

  • 初期ハッシュ値< code> h0< / code> < code> h7< / code> (9番目から16番目の素数をとって)、
  • 出力は、< code> h6< / code> < code> h7< / code>

     h[ 0..7] := 0xcbbb9d5dc1059ed8,0x629a292a367cd507,0x9159015a3070dd17,0x152fecd8f70e5939、  0x67332667ffc00b31,0x8eb44a8768581511,0xdb0c2e0d64f98fa7,0x47b5481dbefa4fa4

SHA-512 / tは、次の点を除いてSHA-512と同じです。

  • 初期ハッシュ値< code> h0< / code> < code> h7< / code> SHA-512 / t IV生成関数 によって与えられ、
  • 出力は、< code> h0< / code>の連結を切り捨てて構成されます。 < code> h7< / code> t ビットで、
  • t は384と同じではなく、SHA-384を指定どおりに使用する必要があります。
  • t 値224と256は特に承認されたものとして言及されています。

SHA-512 / t IV生成関数は、ASCII文字列 "SHA-512 / t" '上の "' SHA-512 を10進表現 t で置き換えて評価します。 。 SHA-512は初期値 h0 </ code>を除いてSHA-512と同じです。 &lt; code&gt; h7&lt; / code&gt;それぞれが16進定数<code> 0xa5a5a5a5a5a5a5a5 </ code>でXORされされています。

SHA-2ファミリのハッシュ関数のサンプルC実装は、RFC 6234にあります。

SHA関数の比較[編集]

以下の表で、「内部状態」は、データブロックの各圧縮後の「内部ハッシュサム」を意味します。

bitwise operation欄には、[Bitwise operation#Rotate no carry | rotate no carry]を表し、Shrは右論理シフトを表します。これらのアルゴリズムはすべて、SHA-3を除いて modular additionを採用しています。

現代のプロセッサー・アーキテクチャーに関するより詳細なパフォーマンス測定値は、以下の表に示されています。

CPUアーキテクチャ 周波数 アルゴリズム ワードサイズ(ビット) サイクル数/バイトx86 MiB / s x86 サイクル数/バイトx86-64 MiB / s x86-64
Intel Ivy Bridge 3.5&nbsp; GHz SHA-256 32ビット 16.80 199 13.05 256
SHA-512 64ビット 43.66 76 8.48 394
AMD Piledriver APU 3.8&nbsp; GHz SHA-256 32ビット 22.87 158 18.47 196
SHA-512 64ビット 88.36 41 12.43 292

「x86」というラベルのパフォーマンス番号は、64ビットプロセッサで32ビットコードを使用して実行されていましたが、「x86-64」はネイティブの64ビットコードです。 SHA-256は32ビット計算用に設計されていますが、x86アーキテクチャ上の64ビットプロセッサ向けに最適化されたコードの利点があります。 SHA-512の32ビットの実装は、64ビットの実装よりも大幅に遅いです。異なる出力サイズを持つ両方のアルゴリズムのバリアントは、メッセージの展開と圧縮の機能が同じで、最初のハッシュ値と出力サイズだけが異なるため、同様に機能します。最新のプロセッサでは、MD5とSHA-1の最善の実装では、バイトあたり4.5〜6サイクルが実行されます。

テストは、Intel社のXeon E3-1275 V2を搭載したhydra8システムで3.5 [GHz]のクロック速度で、[AE]システムでAMD A10-5800K APUを実行している[イリノイ大学シカゴで]クロック速度は3.8GHzです。上記の1バイトあたりの速度で参照されるサイクルは、SUPERCOP暗号ベンチマーキングソフトウェアを使用して4,096バイトのメッセージを消化するアルゴリズムの中央性能です。 MiB / sの性能は、単一コアのCPUクロック速度から外挿されます。実際のパフォーマンスは、さまざまな要因によって変化します。

関連項目[編集]

ソース[編集]

http://wikipedia.org/