コンテンツにスキップ

Secure Hash Algorithm

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

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

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シリーズの比較

暗号学的ハッシュ関数の比較 [編集]
アルゴリズムとバリエーション 出力長
(bits)
内部状態長
(bits)
ブロック長
(bits)
最大メッセージ長
(bits)
ラウンド数 ビット演算 セキュリティ強度
(bits)
パフォーマンスの例[5]
(MiB/s)
MD5 128 128
(4 × 32)
512 264 − 1 64 And, Xor, Rot,
Add (mod 232),
Or
<64(強衝突 335
SHA-0 160 160
(5 × 32)
512 264 − 1 80 And, Xor, Rot,
Add (mod 232),
Or
<80(強衝突 -
SHA-1 160 160
(5 × 32)
512 264 − 1 80 <63
(衝突発見[6])
192
SHA-2 SHA-224
SHA-256
224
256
256
(8 × 32)
512 264 − 1 64 And, Xor, Rot,
Add (mod 232),
Or, Shr
112
128
139
SHA-384
SHA-512
SHA-512/224
SHA-512/256
384
512
224
256
512
(8 × 64)
1024 2128 − 1 80 And, Xor, Rot,
Add (mod 264),
Or, Shr
192
256
112
128
154
SHA-3 SHA3-224
SHA3-256
SHA3-384
SHA3-512
224
256
384
512
1600
(5 × 5 × 64)
1152
1088
832
576
制限なし[7] 24[8] And, Xor, Rot,
Not
112
128
192
256
-
SHAKE128
SHAKE256
d(可変長)
d(可変長)
1344
1088
d/2と128のいずれか小さい方
d/2と256のいずれか小さい方
-

関連項目

脚注

  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. ^ AMD Opteron 8354 2.2 GHzプロセッサと64ビット版Linuxによる計測[4]
  6. ^ Announcing the first SHA1 collision”. 2017年2月23日閲覧。
  7. ^ The Sponge Functions Corner”. 2016年1月28日閲覧。
  8. ^ The Keccak sponge function family”. 2016年1月28日閲覧。

外部リンク