[2] [DFN[[CODE(URI)@en[[[nih:]]]]]] は、対象となる情報の[[ハッシュ値]]を使って[[識別]]する
[[URL scheme]] です。 [CODE(URI)@en[[[ni:]]]] [[URL]] よりも「[[人間可読]]」[SRC[>>3]]
とされています。

;; [4] 「[CODE(URI)@en[[[nih]]]]」は Named Information for Humans を表します [SRC[>>3]]。

* 仕様書

[REFS[
- [3] [CITE@en[[[RFC 6920]] - Naming Things with Hashes]] ([TIME[2014-06-02 05:17:24 +09:00]] 版) <https://tools.ietf.org/html/rfc6920>
]REFS]

* 可読性

[6] [CODE(URI)@en[[[ni:]]]] は [[base64url]] を使うため、
[[大文字]]と[[小文字]]が混在するなど口頭伝達に不向きです。
対して
[CODE(URI)@en[[[nih:]]]] は限られた[[英数字]]の[[小文字]]しか使いませんし、
[[checkdigit]] も入っているので、より伝達しやすいように設計されています。

[7] ... とか説明されていて、いまどき[[ハッシュ値]]の口頭伝達ってどんな冗談かと思いますが、 
[[RFC 6920]]
の発行は[[4月1日]]ではありませんし [WEAK[([[4月]]ではあります。)]]、
実際に真剣に検討されたようです。。。
どんな目的に使おうとしてたんでしょうかね。

* 構文

[8] [CODE(URI)@en[[[nih:]]]] [[URL]] は、 [CODE(URI)@en[[[nih:]]]]、
[[ダイジェストアルゴリズム]]、[CODE[[[;]]]]、
[[ダイジェスト値]]、[CODE[[[;]]]]、
[[checkdigit]] で構成されます。ただし最後の [CODE[[[;]]]] と [[checkdigit]]
は省略できます。 [SRC[>>3]]

[FIG(railroad)[
= [CODE(URI)@en[[[nih:]]]]
= [[ダイジェストアルゴリズム]]
= [CODE[[[;]]]]
= [[ダイジェスト値]]
= ?
== [CODE[[[;]]]]
== [[checkdigit]]
]FIG]

[10] [[ダイジェストアルゴリズム]]は、 [CODE(URI)@en[[[ni:]]]] と同じ [SRC[>>3]]
で [[IANA]] に登録された短い文字列です。 [[アルゴリズム]]に割り当てられた
[[Suite ID]] を使うこともできます [SRC[>>3]]。
実装は、対応している[[アルゴリズム]]について [[Suite ID]]
も対応しなければ[['''なりません''']] [SRC[>>3]]。

;; [15] [[Suite ID]] に[[先導0]]が認められているのかは不明です。

[11] [[ダイジェスト値]]は、1文字以上の[[小文字]]の[[十六進数]]による [[base16]]
で[[符号化]]したものです [SRC[>>3]]。ただし読みやすいように任意の位置に
[CODE[[[-]]]] を任意の個数挿入できます [SRC[>>3]]。

;; [12] [[ダイジェスト値]]が[[バイト列]]なら[[十六進数]]は偶数個ないといけないはずですが、
そのような構文の制限は明記されていません。

[13] [[checkdigit]] は、 [[ISO/IEC 7812]] [[Luhn's mod [VAR[N]] algorithm]]
([VAR[N]] は 16) により計算したものでなければ[['''なりません''']]。
その入力は[[符号化]]した[[ダイジェスト値]]ですが、 [CODE[[[-]]]]
はすべて除去し、[[十六進数]]をそれぞれ 0-15 の範囲の値として解釈したものとします。 [SRC[>>3]]

[FIG(corollary)[
[9] [CODE(URI)@en[[[ni:]]]] と違って [[authority]] や [[query]]
は使えません。[[相対URL]]も使えません。
]FIG]

* 比較

[5] [[ハッシュ値URLの比較]]を参照してください。

* 処理

[14] なぜか[[処理モデル]]は明記されていません。 [[checkdigit]]
が指定できるということは、それが不整合な場合、エラーとして扱うのが適切なように思われますが、
そう明記はされていません。

* 応用

[17] 使われているところを見たことがありません。

[18] 噂にすら聞いたことがないw

* 関連

[1] [[NIH]] ではありません。

* 歴史

[16] [[参照元にハッシュ値を埋め込む提案と失敗の歴史]]の1頁でした。

* メモ