ハッシュ関数

ハッシュ関数 (Web)

HashAlgorithm (TLS)

ダイジェストアルゴリズム (HTTP)

仕様書

識別

[22] ダイジェストアルゴリズムの名前は、字句です >>21大文字・小文字不区別です >>21

  1. 字句

[23] アルゴリズムによっては、引数を加えて指定する必要があるかもしれません >>21

構文は引数 (HTTP) >>21 参照。
[36] 実際には定義されているダイジェストアルゴリズムはいずれも引数を使っていませんし、引数を指定する構文も用意されていないようです。

[27] ダイジェストアルゴリズム名によって識別される符号化は、 引用文字列として表されるものか、 ;, を使わないものかのいずれかでなければなりません >>25

文脈

[34] ダイジェストアルゴリズムの名前と符号化された値は、 実現値ダイジェストで使われます。

[35] ダイジェストアルゴリズムの名前は Want-Digest: ヘッダーでも使われます。

ダイジェストアルゴリズムの一覧

[24] 次のダイジェストアルゴリズム名があります。

[26] IANA登録簿が用意されています >>25

歴史

[29] RFC 3230 (実現値要約) 4.1.1 Digest algorithms

Digest algorithm values are used to indicate a specific digest computation. For some algorithms, one or more parameters may be supplied.

要約算法値は特定要約計算を示すために使用します。 算法によっては、一つ以上の引数を供給するかもしれません。

  • digest-algorithm = token

The BNF for "parameter" is as is used in RFC 2616 [4]. All digest-algorithm values are case-insensitive.

parameterBNFRFC 2616 で使われているものの通りです。すべての digest-algorithm 値は大文字・小文字を区別しません。

The Internet Assigned Numbers Authority (IANA) acts as a registry for digest-algorithm values. Initially, the registry contains the following tokens:

インターネット割り当て番号事務局 (IANA) が digest-algorithm 値の登録簿として働きます。 最初に、登録簿は次の字句を含みます。

MD5
The MD5 algorithm, as specified in RFC 1321 [15]. The output of this algorithm is encoded using the base64 encoding [1].
SHA
The SHA-1 algorithm [12]. The output of this algorithm is encoded using the base64 encoding [1].
UNIXsum
The algorithm computed by the UNIX "sum" command, as defined by the Single UNIX Specification, Version 2 [13]. The output of this algorithm is an ASCII decimal-digit string representing the 16-bit checksum, which is the first word of the output of the UNIX "sum" command.
UNIXcksum
The algorithm computed by the UNIX "cksum" command, as defined by the Single UNIX Specification, Version 2 [13]. The output of this algorithm is an ASCII digit string representing the 32-bit CRC, which is the first word of the output of the UNIX "cksum" command.
MD5
RFC 1321 で規定されている MD5 算法。 この算法の出力は base64 符号化を使って符号化する。
SHA
SHA-1 算法。この算法の出力は base64 符号化を使って符号化する。
UNIXsum
単一UNIX仕様書第2版で定義されている UNIX sum 命令で計算される算法。 この算法の出力は16ビット検査和を表現する ASCII 十進数文字列で、 UNIX sum 命令の出力の最初の語である。
UNIXchecksum
単一 UNIX 仕様書第2版で定義されている UNIX cksum 命令で計算される算法。 この算法の出力は32ビット CRC を表現する ASCII 数値文字列で、 UNIX cksum 命令の出力の最初の語である。

If other digest-algorithm values are defined, the associated encoding MUST either be represented as a quoted string, or MUST NOT include ";" or "," in the character sets used for the encoding.

他の digest-algorithm 値が定義される時は、 関連付けられる符号化は引用文字列として表現されるものであるか、 もしくは符号化に用いられる文字集合中に ; または , を含んではならないかでなければなりません

[31] RFC 3230 6 IANA Considerations

The Internet Assigned Numbers Authority (IANA) administers the name space for digest-algorithm values. Values and their meaning must be documented in an RFC or other peer-reviewed, permanent, and readily available reference, in sufficient detail so that interoperability between independent implementations is possible. Subject to these constraints, name assignments are First Come, First Served (see RFC 2434 [11]).

インターネット割り当て番号事務局 (IANA) は digest-algorithm 値の名前空間を管理します。 値とその意味は、 RFC または他のよく評価された、持続的で、 既に入手可能な参照物で、独立な実装が相互運用可能である程度十分詳細に文書化されていなければなりません。 この制約の元、名前割り当ては先来先給とします (RFC 2434 を参照)。

[32] IANA登録簿には (last updated 2002-01-14) の時点では RFC 3230 の4種類のみ登録されていました。

[33] その後 RFC 5843 によって MD5SHA の定義が更新されると共に、 SHA-256SHA-512 が追加されています >>28

ダイジェストアルゴリズム (HTTP ダイジェスト認証)

仕様書

アルゴリズム

[46] 次のダイジェストアルゴリズムがあります。

a
アルゴリズム
v
通常の値
s
-sess
a
SHA-256 >>45
v
SHA-256 >>72
s
SHA-256-sess
a
SHA-512/256 >>45
v
SHA-512-256 >>72
s
SHA-512-256-sess
a
MD5 >>45
v
MD5 >>72
s
MD5-sess

[67] SHA-256 を実装しなければなりません >>66

[47] MD5 を使うべきではありません >>45

[68] RFC 2617 までは MD5 しかありませんでした。

[69] 折衝については、 challenge を参照。

[71] IANA登録簿があります >>70, >>72-sess 付きの名前はすべてのアルゴリズムに存在し、 IANA登録簿には登録されません >>72

[73] 明記されていませんが、元から -sess がついているダイジェストアルゴリズム名は禁止されているものと思われます。

[74] IANA登録簿RFC 7616 で新設されました。

[75] 値はASCII大文字・小文字不区別です。

[76] RFC 7616 はそのことをまったく説明していません。(ひどい話です。) RFC 2617 は当時の唯一のアルゴリズムである MD5 に関しては ABNF大文字・小文字不区別であることを示していました >>49

algorithm 引数

[51] algorithm 引数は、 digestunkeyed digest を生成するのに使うアルゴリズムを示します >>50

[60] auth-param引用文字列構文を使ってはなりません >>50, >>64

[54] 値はアルゴリズム名です。各アルゴリズムについて、 「non-Session variant」を表す通常の値 (例えば SHA-256) と 「Session variant」を表す -sess 付きの値 (例えば SHA-256-sess) があります >>50

[59] -sess は、第三者認証サーバーを効率的に実現するためのものです >>50

[55] ダイジェスト認証challenge >>50credentials >>64 で使うことができます。

[65] credentials には、 challenge と同じ値を指定しなければなりません >>64

[52] algorithm 引数が存在しなければ、 MD5 とみなします >>50

[53] 未知の値であれば、 challenge を無視するべきです >>50

[62] response 引数username 引数の値の計算に使われます。

関数 KD () と関数 H ()

[56] データデータと秘密秘密について、 (unkeyed digest アルゴリズムアルゴリズムに関する H () を使った) KD(データ (data) , 秘密 (secret) ) とは、次の操作をいいます >>50

  1. [57] 入力を、秘密:データをこの順に連結した列とします。
  2. [58] H (入力) を返します。

[61] 入力入力について unkeyed digest アルゴリズムアルゴリズムH (入力) とは、 入力アルゴリズムを適用した結果を返す操作をいいます >>50

[63] これらの関数は、 response="" 引数rspauth="" 引数の値の計算に使われます。

歴史

ハッシュ (ni:, nih: URL)

仕様書

識別

[13] ハッシュアルゴリズムIANA に登録することになっています >>12, >>20

[14] ハッシュアルゴリズムには名前が付けられます。名前は URL の構文上は1文字以上の RFC 3986 unreserved とされていますが、 登録手続き上は制限がありません。 名前は、 ni:nih: で使います。

[15] 登録済みの名前はすべてASCII小文字ASCII数字- で構成されています。 明記されていませんが大文字と小文字は区別していそうです。
[16] Suite ID と構文的に区別できるためには、 少なくても63以下の整数と一致する数字のみの列の名前が登録されることはなさそうです。

[17] また、 Suite ID を割り当てられることもあります。これは 0 から 63 までの整数です。 >>12 Suite IDnih: URL と、バイナリ表現で使います。

[18] 割り当てられないこともあるようですが、既存のものはすべて割り当てられています。
[19] いくつかの Suite ID は予約されています。

アルゴリズム

[5] sha-256 を実装しなければなりません >>3

[6] それ以外も実装して構いません >>3

[7] truncated hash も実装して構いません >>3

[8] truncated hash には、 truncate されていないものと別のアルゴリズム名が与えられています。

入力

[9] ハッシュアルゴリズムへの入力公開鍵の値の時は、 X.509 SubjectPublicKeyInfo 構造の公開鍵に対してハッシュを計算するべきです >>3

[10] これは主として DANE TSLA プロトコルとの互換性のために選ばれました。

[11] 公開鍵以外については、何を入力として使うかは定義されておらず、 応用依存とされています >>3

比較

[4] ハッシュ値URLの比較を参照してください。

参照元 (URL や HTML のリンク) にハッシュ値を埋め込む提案と失敗の歴史

[85] ni:, nih:

[84] hash:, hashed:

[83] SRI

[86] Hashlink

メモ

[1] スラッシュドット ジャパン | MD4/MD5 コリジョンの実証コードが公開 http://slashdot.jp/security/05/11/18/0125251.shtml (名無しさん 2005-11-18 09:36:28 +00:00)

[2] Hash Function FAQ ( ( 版)) http://burtleburtle.net/bob/hash/hashfaq.html#unique

[37] Instance Digests in HTTP (RFC3230) ( (Anthony Bryan 著, 版)) http://lists.w3.org/Archives/Public/ietf-http-wg/2009JulSep/0872.html

[38] Re: [SRI] Getting sha-384 and sha-512 added to the RFC6920 registry? ( (Brad Hill 著, 版)) http://lists.w3.org/Archives/Public/public-webappsec/2015Jan/0114.html

[77] XProc 2.0: Standard Step Library () https://www.w3.org/TR/2016/NOTE-xproc20-steps-20160721/#c.hash

The value of the algorithm option must be a QName. If it does not have a prefix, then it must be one of the following values: “crc”, “md”, or “sha”.

[78] Yocto Project Development Tasks Manual () http://www.yoctoproject.org/docs/current/dev-manual/dev-manual.html#new-recipe-single-c-file-package-hello-world

LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"

[79] Merge pull request #1671 from w3c/hash-func-registry (alvestrand著, ) https://github.com/w3c/webrtc-pc/commit/3f71abd79f96d2c3f72454707c8f239b6ce0735a

[80] Editorial: Add IANA-HASH-FUNCTION reference by adam-be · Pull Request #1671 · w3c/webrtc-pc () https://github.com/w3c/webrtc-pc/pull/1671

[81] Point to the Hash Function Textual Names registry · Issue #1663 · w3c/webrtc-pc () https://github.com/w3c/webrtc-pc/issues/1663

[82] WebSub () https://w3c.github.io/websub/#recognized-algorithm-names