Secure Hash Algorithm
Secure Hash Algorithm(セキュアハッシュアルゴリズム)、略称SHA(エスエイチエー、シャー)は、一群の関連したハッシュ関数であり、アメリカ国立標準技術研究所 (NIST) によってアメリカ政府標準のハッシュ関数 Secure Hash Standard (SHS) として採用されている。
概要
2015年現在、SHAはSHA-0、SHA-1、SHA-2 (SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256)、SHA-3 (SHA3-224、SHA3-256、SHA3-384、SHA3-512、SHAKE128、SHAKE256)の4種類が存在している。このうち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-3については、2015年8月にNISTがSecure Hash Standard (SHS) とは独立した標準としてSHA-3を含むFIPS 202を発行した[1]。
もっともよく使われる関数はSHA-1でTLS、SSL、PGP、SSH、S/MIME、IPSecなど、さまざまなセキュリティのアプリケーションやプロトコルに採用されている。 SHA-1は、以前から広範囲に使われているハッシュ関数であるMD5に代わるものであると考えられている。SHA-2までは国家安全保障局 (NSA) によって開発され、アメリカ政府の標準として発表された。グループのメンバーで1993年にはじめに発表されたものは、公式にはSHAと呼ばれている。しかしその後のものと区別するためにしばしばSHA-0と呼ばれている。2年後、SHAに初めての後継となるSHA-1が発表された。
さらにSHA-224、SHA-256、SHA-384、SHA-512と4つの変形が、増加する出力の範囲とわずかなデザインの違いで2001年に発行されている。2012年に加えられたSHA-512/224、SHA-512/256と合わせてそれらはまとめてSHA-2といわれている。
SHA-3はこれまでのものとは異なりアメリカ国立標準技術研究所 (NIST) により公募が行われており、その結果Keccakが新しいハッシュ関数アルゴリズムとして選出された。
SHA-0、SHA-1のアルゴリズムはMD4を元にしており、MD5よりも攻撃に対して強いと考えられている。SHA-0、SHA-1ともに、対象とした攻撃(ハッシュ値の強衝突耐性突破)が見つかっているが、SHA-2、SHA-3には攻撃された報告はまだない。「MD5」の「ハッシュの衝突耐性について」の項も参照。
SHA-0
SHA-0はSHAシリーズの最初の規格である。発表から間もなくして脆弱性が発見された。ハッシュキーの長さは、160ビット。
SHA-1
SHA-0の脆弱性が発見されたため、改訂版としてSHA-1が発表された。SHA-1のハッシュキーの長さは、SHA-0と同じく160ビット。
実際の攻撃に成功した例はないものの理論的な脆弱性が指摘されており、2014年現在ではSHA-1からSHA-2への移行が進んでいる。
SHA-2
SHA-1に多くの改良を加え、出力されるハッシュ長を大きくしたのがSHA-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-3
SHA-3としてKeccakが、アメリカ国立標準技術研究所 (NIST) が公募した新しいハッシュ関数アルゴリズムとして、2012年10月2日に選出された[2]。2015年8月に、正式版が発行された。
SHAシリーズでは初めて開発に国家安全保障局 (NSA) が関わっていない。
SHA-3は64ビットのワードサイズを持ち、出力されるハッシュ値の長さは224ビット、256ビット、384ビット、512ビットの4種類、もしくは可変長(セキュリティパラメータに応じてSHAKE128、SHAKE256の2種類が選択可能)である。SHA-2とは異なり全ての関数が同じスポンジ関数を用いており、異なるのは固定長と可変長を区別するパディングと、最大のセキュリティ強度を決定するスポンジ関数のパラメータのみである。
SHAシリーズの比較
アルゴリズムとバリエーション | 出力長 (bits) |
内部状態長 (bits) |
ブロック長 (bits) |
最大メッセージ長 (bits) |
ラウンド数 | ビット演算 | セキュリティ強度 (bits) |
パフォーマンスの例[4] (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 (衝突発見[5]) |
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 |
制限なし[6] | 24[7] | And, Xor, Rot, Not |
112 128 192 256 |
- |
SHAKE128 SHAKE256 |
d(可変長) d(可変長) |
1344 1088 |
d/2と128のいずれか小さい方 d/2と256のいずれか小さい方 |
- |
関連項目
脚注
- ^ “SHA-3 Standardization”. Computer Security Division - Computer Security Resource Center. NIST. 2015年8月6日閲覧。
- ^ “NIST Selects Winner of Secure Hash Algorithm (SHA-3) Competition”. NIST. 2012年10月2日閲覧。
- ^ “Crypto++ 5.6.0 Benchmarks”. 2014年1月1日閲覧。
- ^ AMD Opteron 8354 2.2 GHzプロセッサと64ビット版Linuxによる計測[3]
- ^ “Announcing the first SHA1 collision”. 2017年2月23日閲覧。
- ^ “The Sponge Functions Corner”. 2016年1月28日閲覧。
- ^ “The Keccak sponge function family”. 2016年1月28日閲覧。
外部リンク
- FIPS PUB 180-1, SECURE HASH STANDARD
- (PDF) FIPS PUB 180-2, SECURE HASH STANDARD
- SHA-0、MD5、 MD4にコリジョン発見、reduced SHA-1も スラッシュドットジャパン
- オンラインでSHA256ハッシュ関数ツール
- オンラインでSHA512ハッシュ関数ツール
- SHA1, SHA-256, SHA-384, SHA-512 Online Calculator Calculate SHA file hashes using an on-line web form.