Secure Hash Algorithm

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

Secure Hash Algorithm(セキュアハッシュアルゴリズム)、略称SHAは、一群の関連した暗号学的ハッシュ関数であり、アメリカ国立標準技術研究所(NIST)によって標準のハッシュ関数Secure Hash Standardに指定されている。

概要[編集]

(2017年現在)SHA-0、SHA-1SHA-2SHA-3の4種類(ないし、SHA-0はSHA-1に含めて3種類)に大別される。SHA-2まではMD5などと同じ Merkle–Damgård construction(en:Merkle–Damgård construction)のバリエーションと言える構造だが、SHA-3 は全く別の構造となっている。SHA-2 以降はハッシュサイズを大きくしたバリエーションが用意されており、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 がある。

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-0およびSHA-1が最も古く、(さらにそれ以前のMD5を置き換えて)以前はTLSSSLPGPSSHS/MIMEIPSecなど、さまざまなアプリケーションソフトウェアプロトコルに採用されていたが、2004年のCRYPTO2004におけるXiaoyun Wang(王小雲)らの発表以降、広く知られるようになった研究の進展により、2017年2月には実際に衝突攻撃の成功が示されている。よって、2017年初頭の段階でこれらを情報セキュリティの目的で使用しているのは無謀である。

SHA-2までは国家安全保障局 (NSA) によって開発された。

1993年に発表された最初のものは、公式には単にSHAと呼ばれていた。しかし現在は、その後のものと区別するためにもっぱらSHA-0と呼ばれている。1995年に弱点を修正したSHA-1が発表された。

SHA-2は、Merkle–Damgård construction を採用している点は同じだが、SHA-1 とは異なり、2020年の時点で有望な攻撃法は発表されていない。2001年に発行されたのは SHA-224、SHA-256、SHA-384、SHA-512という4種類のバリエーションで、2012年には SHA-512/224、SHA-512/256 も加えられた。

SHA-3は、これまでのものとは異なりアメリカ国立標準技術研究所 (NIST) による公募によるもので、Keccakが新しいハッシュ関数として選出された。前述のCRYPTO2004によってMerkle–Damgård constructionそのものが不安視されたことから別の構造を採用しているが、前述のようにSHA-2への攻撃は進展しなかったため、SHA-3の普及はほとんど進んでいない。

MD4とMD5は、前述のCRYPTO2004によって衝突の実例が示された。SHA-0はそれらより強いことが期待されていたハッシュ関数であったが、同様に衝突の実例が示された。SHA-1は修正版であるため、それらよりは強かったものの有効な攻撃法の研究が2004年から発展し、2017年には衝突の実例が示された。

SHA-0[編集]

SHA-0はSHAシリーズの最初の規格である。発表から間もなくして欠点が発見された。ハッシュ値の長さは、160ビット

SHA-1[編集]

SHA-0の欠点を修正した。SHA-1のハッシュ値の長さは、SHA-0と同じく160ビット。

2017年に、衝突攻撃の成功と実例が報告された[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日に選出された[3]。2015年8月に、正式版が発行された。これまでのSHAの Merkle–Damgård construction(en:Merkle–Damgård construction)とは異なり、ハッシュ値よりも大きな内部状態を持ち、ハッシュ値はその内部状態から「絞り出される」という、「スポンジ構造」を採用している。

SHAシリーズでは初めて開発に国家安全保障局 (NSA) が関わっていない。

SHA-3は64ビットのワードサイズを持ち、出力されるハッシュ値の長さは224ビット、256ビット、384ビット、512ビットの4種類、もしくは可変長(SHAKE128、SHAKE256 の2種類が選択可能)である。

比較[編集]

暗号学的ハッシュ関数の比較 [編集]
アルゴリズムとバリエーション 出力長
(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. ^ SHA-3 Standardization”. Computer Security Division - Computer Security Resource Center. NIST. 2015年8月6日閲覧。
  2. ^ SHAttered
  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日閲覧。

外部リンク[編集]