メインコンテンツまでスキップ

1. Overview of Contents (内容の概要)

本文書には、アメリカ合衆国 (USA) の連邦情報処理標準 (FIPS) セキュアハッシュアルゴリズム (SHAs) の仕様、SHAsを実装するコード、SHAsに基づくHMAC (ハッシュメッセージ認証コード, [RFC2104]) を実装するコード、およびHMACに基づくHKDF (HMACベース鍵導出関数, [RFC5869]) を実装するコードが含まれます。HMACとHKDFの仕様は、RFCシリーズの他の場所 [RFC2104] [RFC5869] に記載されているため、含まれていません。

注記: 以下のテキストの多くは [SHS] から引用されており、そこで説明されているハッシュアルゴリズムのセキュリティに関する主張は、本文書に記載された著者ではなく、[SHS] の著者である米国政府によって行われています。SHA-1のセキュリティに関しては [RFC6194] も参照してください。

以下のテキストは、メッセージまたはデータファイルの圧縮表現を計算するためのセキュアハッシュアルゴリズム、SHA-224 [RFC3874]、SHA-256、SHA-384、およびSHA-512を規定します。(SHA-1は [RFC3174] で規定されています。) 任意の長さ < 2^64ビット (SHA-224およびSHA-256の場合) または < 2^128ビット (SHA-384およびSHA-512の場合) のメッセージがこれらのアルゴリズムのいずれかに入力されると、メッセージダイジェスト (Message Digest) と呼ばれる出力が生成されます。メッセージダイジェストの長さは、アルゴリズムに応じて224ビットから512ビットまでの範囲です。セキュアハッシュアルゴリズムは通常、デジタル署名アルゴリズムや鍵付きハッシュ認証コード、乱数生成 [RFC4086]、または鍵導出関数などの他の暗号化アルゴリズムとともに使用されます。

本文書で規定されているアルゴリズムがセキュアと呼ばれるのは、(1) 与えられたメッセージダイジェストに対応するメッセージを見つけること、または (2) 同じメッセージダイジェストを生成する2つの異なるメッセージを見つけることが計算上実行不可能であるためです。転送中のメッセージへの変更は、非常に高い確率で異なるメッセージダイジェストをもたらします。これにより、セキュアハッシュアルゴリズムがデジタル署名アルゴリズムまたは鍵付きハッシュメッセージ認証アルゴリズムとともに使用される場合、検証失敗が発生します。

ここで提供されるコードは、任意のビット長の入力文字列をサポートします。[RFC3174] のSHA-1のサンプルコードも、任意のビット長の入力文字列を処理するように更新されました。このコードの商用および非商用のすべての用途に対して許可が付与されています。

本文書は [RFC4634] を廃止し、そのRFCからの変更点は付録にまとめられています。

[RFC4055] から取得したSHAアルゴリズムのASN.1 OID (オブジェクト識別子) は次のとおりです:

id-sha1  OBJECT IDENTIFIER  ::=  { iso(1)
identified-organization(3) oiw(14)
secsig(3) algorithms(2) 26 }
id-sha224 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2)
country(16) us(840) organization(1) gov(101)
csor(3) nistalgorithm(4) hashalgs(2) 4 }
id-sha256 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2)
country(16) us(840) organization(1) gov(101)
csor(3) nistalgorithm(4) hashalgs(2) 1 }
id-sha384 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2)
country(16) us(840) organization(1) gov(101)
csor(3) nistalgorithm(4) hashalgs(2) 2 }
id-sha512 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2)
country(16) us(840) organization(1) gov(101)
csor(3) nistalgorithm(4) hashalgs(2) 3 }

以下の第2節では、これらのアルゴリズムを形成するための構成要素として使用される用語と関数を定義します。第3節では、これらのアルゴリズムが構築されるワードに対する基本的な操作について説明します。第4節では、メッセージが必要なブロックサイズの整数倍にパディングされ、その後ブロックに解析される方法を説明します。第5節では、ハッシュアルゴリズムを指定するために使用される定数と複合関数を定義します。第6節では、SHA-224、SHA-256、SHA-384、およびSHA-512関数の実際の仕様を示します。第7節では、HMAC鍵付きメッセージ認証コードの仕様と、HMACに基づく抽出・拡張鍵導出関数の仕様へのポインタを提供します。

第8節では、SHAアルゴリズム、SHAベースのHMACs、およびHMACベースの抽出・拡張鍵導出関数のサンプルコードを示します。