コンテンツにスキップ

Secure Hash Algorithm

出典: フリー百科事典『ウィキペディア(Wikipedia)』

これはこのページの過去の版です。Claw of Slime (会話 | 投稿記録) による 2014年1月1日 (水) 17:50個人設定で未設定ならUTC)時点の版 (SHA-1より比較表をコピー)であり、現在の版とは大きく異なる場合があります。

Secure Hash Algorithm(セキュアハッシュアルゴリズム)、略称SHAエスエイチエーシャー)は、一群の関連したハッシュ関数であり、アメリカ国立標準技術研究所 (NIST) によってアメリカ政府標準のハッシュ関数 Secure Hash Standard (SHS) として採用されている。

概要

アルゴリズムはMD4を元にしており、MD5よりも攻撃に対して強いと考えられている。

2013年現在、SHAは生成するビット長が異なるSHA-1(160ビット)、SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256、SHA-3の8種類が存在している。このうちSHA-1、SHA-256、SHA-384、SHA-512は2002年8月のFIPS Publication 180-2の初版に含まれている。SHA-224はChange Notice 1として、2004年2月に同規格に追加された。SHA-512/224、SHA-512/256は2012年のFIPS 180-4で追加された。

もっともよく使われる関数SHA-1でTLS、SSL、PGP、SSH、S/MIME、IPSecなど、さまざまなセキュリティアプリケーションプロトコルに採用されている。 SHA-1は、以前から広範囲に使われているハッシュ関数であるMD5に代わるものであると考えられている。SHAアルゴリズムは国家安全保障局 (NSA) によって開発され、アメリカ政府の標準として発表された。

グループのメンバーで1993年にはじめに発表されたものは、公式にはSHAと呼ばれている。しかしその後のものと区別するためにしばしばSHA-0と呼ばれている。2年後、SHAに初めての後継となるSHA-1が発表された。さらにSHA-224SHA-256SHA-384SHA-512と4つの変形が、増加する出力の範囲とわずかなデザインの違いで2001年に発行されている。2012年に加えられたSHA-512/224SHA-512/256と合わせてそれらはまとめてSHA-2といわれている。また、SHA-3としてKeccakが、アメリカ国立標準技術研究所 (NIST) が公募した新しいハッシュ関数アルゴリズムとして、2012年10月2日に選出された。

SHA-0、SHA-1ともに、対象とした攻撃(ハッシュ値の強衝突耐性突破)が見つかっているが、SHA-2には攻撃された記事はまだない。「MD5」の「ハッシュの衝突耐性について」の項も参照。

SHA-1

SHA-1
一般
設計者 NSA
初版発行日 1993 (SHA-0), 1995 (SHA-1)
シリーズ (SHA-0), SHA-1, SHA-2, SHA-3
認証 FIPS PUB 180-4, CRYPTREC (運用監視)
詳細
ダイジェスト長 160 bits
構造 Merkle-Damgård construction
ラウンド数 80
最良の暗号解読
2011年にMarc Stevensによって261回の試行で理論上、強衝突耐性を突破[1]。実際の突破には至っていない。

SHA-1のハッシュキーの長さは、160ビット= 2160(約 1.4615×1048)通りのハッシュ値をとり、40桁の16進数で表される。

SHA1("") = da39a3ee 5e6b4b0d 3255bfef 95601890 afd80709(入力データ長が0バイトの場合)

SHA-2

SHA-2
一般
設計者 NSA
初版発行日 2001
シリーズ (SHA-0), SHA-1, SHA-2, SHA-3
認証 FIPS PUB 180-4, CRYPTREC, NESSIE
詳細
ダイジェスト長 224, 256, 384, 512 bits
構造 Merkle-Damgård construction
ラウンド数 64 or 80
最良の暗号解読
2008年に原像攻撃によってSHA-512の80ラウンド中46ラウンドまで、SHA-256の64ラウンド中41ラウンドまで[2]衝突攻撃はSHA-256の24ステップまで[2]

SHA-256、SHA-512は、それぞれ32ビット、64ビットのワードサイズを持ち、出力されるハッシュ値の長さは256ビット、512ビットである。SHA-224、SHA-384はそれぞれSHA-256、SHA-512を切り詰めたものであり、ワードサイズはそれぞれ32ビット、64ビット、出力長はそれぞれ224ビット、384ビットである。SHA-512/224、SHA-512/256はSHA-512を切り詰めたものであり、ワードサイズは64ビット、出力長はそれぞれ224ビット、256ビットである。

SHA-2のハッシュキーの長さは以下の通りである。

  • SHA-224: 224ビット=2224(約 2.696×1067)通りのハッシュ値をとり、56桁の16進数
  • SHA-256: 256ビット=2256(約 1.579×1077)通りのハッシュ値をとり、64桁の16進数
  • SHA-384: 384ビット=2384(約 3.940×10115)通りのハッシュ値をとり、96桁の16進数
  • SHA-256: 512ビット=2512(約 1.341×10154)通りのハッシュ値をとり、128桁の16進数
  • SHA-512/224: 224ビット=2224(約 2.696×1067)通りのハッシュ値をとり、56桁の16進数
  • SHA-512/256: 256ビット=2256(約 1.579×1077)通りのハッシュ値をとり、64桁の16進数

入力データ長が0バイトの場合のSHA-2は次のようになる。

  • SHA224("") = d14a028c 2a3a2bc9 476102bb 288234c4 15a2b01f 828ea62a c5b3e42f
  • SHA256("") = e3b0c442 98fc1c14 9afbf4c8 996fb924 27ae41e4 649b934c a495991b 7852b855
  • SHA384("") = 38b060a7 51ac9638 4cd9327e b1b1e36a 21fdb711 14be0743 4c0cc7bf 63f6e1da 274edebf e76f65fb d51ad2f1 4898b95b
  • SHA512("") = cf83e135 7eefb8bd f1542850 d66d8007 d620e405 0b5715dc 83f4a921 d36ce9ce 47d0d13c 5d85f2b0 ff8318d2 877eec2f 63b931bd 47417a81 a538327a f927da3e
  • SHA512/224("") = 6ed0dd02 806fa89e 25de060c 19d3ac86 cabb87d6 a0ddd05c 333b84f4
  • SHA512/256("") = c672b8d1 ef56ed28 ab87c362 2c511406 9bdd3ad7 b8f97374 98d0c01e cef0967a

SHA-3

SHA-3
一般
設計者 Guido Bertoni, Joan Daemen, Michaël Peeters, and Gilles Van Assche.
認証 SHA-3採用
詳細
ダイジェスト長 arbitrary
速度 12.5 cpb on Core 2 [r=1024,c=576].

SHA-3としてKeccakが、アメリカ国立標準技術研究所 (NIST) が公募した新しいハッシュ関数アルゴリズムとして、2012年10月2日に選出された[3]

Keccakは64ビットのワードサイズを持ち、出力されるハッシュ値の長さは224ビット、256ビット、384ビット、512ビットの4種類である。SHA-2と同様、Keccak-224はKeccak-256を、Keccak-384はKeccak-512を切り詰めたものである。

Keccakのハッシュキーの長さは以下の通りである。

  • Keccak-224: 224ビット=2224(約 2.696×1067)通りのハッシュ値をとり、56桁の16進数
  • Keccak-256: 256ビット=2256(約 1.579×1077)通りのハッシュ値をとり、64桁の16進数
  • Keccak-384: 384ビット=2384(約 3.940×10115)通りのハッシュ値をとり、96桁の16進数
  • Keccak-256: 512ビット=2512(約 1.341×10154)通りのハッシュ値をとり、128桁の16進数

入力データ長が0バイトの場合のKeccakは次のようになる。

  • Keccak-224("") = f7183750 2ba8e108 37bdd8d3 65adb855 91895602 fc552b48 b7390abd
  • Keccak-256("") = c5d24601 86f7233c 927e7db2 dcc703c0 e500b653 ca82273b 7bfad804 5d85a470
  • Keccak-384("") = 2c23146a 63a29acf 99e73b88 f8c24eaa 7dc60aa7 71780ccc 006afbfa 8fe2479b 2dd2b213 62337441 ac12b515 911957ff
  • Keccak-512("") = 0eab42de 4c3ceb92 35fc91ac ffe746b2 9c29a8c3 66b7c60e 4e67c466 f36a4304 c00fa9ca f9d87976 ba469bcb e06713b4 35f091ef 2769fb16 0cdab33d 3670680e

SHAシリーズの比較

Algorithm and
variant
出力長 (bits) 内部状態長 (bits) ブロック長 (bits) 最大メッセージ長 (bits) ワード長 (bits) ラウンド数 ビット演算 ハッシュ衝突 パフォーマンスの例 (MiB/s)[4]
MD5 (as reference) 128 128 512 264 − 1 32 64 and,or,xor,rot Yes 335
SHA-0 160 160 512 264 − 1 32 80 and,or,xor,rot Yes -
SHA-1 160 160 512 264 − 1 32 80 and,or,xor,rot Theoretical attack (261)[5] 192
SHA-2 SHA-224
SHA-256
224
256
256 512 264 − 1 32 64 and,or,xor,shr,rot None 139
SHA-384
SHA-512
SHA-512/224
SHA-512/256
384
512
224
256
512 1024 2128 − 1 64 80 and,or,xor,shr,rot None 154
SHA-3 224/256/384/512 1600
(5×5 array of 64-bit words)
64 24 and,xor,not,rot None

関連項目

脚注

  1. ^ Marc Stevens. hashclash - Framework for MD5 & SHA-1 Differential Path Construction and Chosen-Prefix Collisions for MD5. http://code.google.com/p/hashclash/. 
  2. ^ a b Yu Sasaki, Lei Wang, and Kazumaro Aoki (2008-11-25). Preimage Attacks on 41-Step SHA-256 and 46-Step SHA-512. http://eprint.iacr.org/2009/479.pdf.  引用エラー: 無効な <ref> タグ; name "preimage-sasaki"が異なる内容で複数回定義されています
  3. ^ NIST Selects Winner of Secure Hash Algorithm (SHA-3) Competition”. NIST. 2012年10月2日閲覧。
  4. ^ Crypto++ 5.6.0 Benchmarks”. 2014年1月1日閲覧。
  5. ^ Cryptanalysis of MD5 & SHA-1” (PDF). 2014年1月1日閲覧。

外部リンク