Hash function (ハッシュ関数)

ハッシュ関数は、可変長の入力を受けて固定長の出力を生成する関数であり、「ダイジェスト」(または単に「ハッシュ」)とも呼ばれます。ハッシュ関数は素早く計算されるべきであり、入力が異なる場合は可能な限り異なる出力を生成すべきです(これは衝突耐性と呼ばれます)。

ハッシュ関数には暗号学的な用途と非暗号学的な用途があります。ハッシュ関数の暗号以外の用途としては、例えばマップや辞書などの連想配列のキーを生成するというものがあります。

digest()SubtleCrypto インターフェイスの関数で、ウェブアプリケーションで利用可能な様々なハッシュを作成します。

暗号学的ハッシュ関数

暗号学的なハッシュ関数は、デジタル署名メッセージ認証コードなどの用途があります。

すべてのハッシュ関数が暗号に適しているわけではありません。暗号に使用するためには、ハッシュ関数は以下の性質を持っていなければなりません。

  • 計算が速い
  • 一方向性: 出力が与えられれば、元の入力を再生することは現実的でないか、不可能であるはずである
  • 改竄耐性:入力を変更すると出力が変わる
  • 衝突耐性: 同じ出力を生み出す 2 つの異なる入力を見つけることは現実的ではないはずだ

暗号学的に使用される最も一般的なハッシュ関数は SHA-2 (Secure Hash Algorithm 2) ファミリーであり、その名前は "SHA-" に続いて出力するダイジェストのビット数を示します。例えば "SHA-256""SHA-512" です。

SHA-2 は、もはや安全とはみなされないため、暗号化には使うべきではない SHA-1 アルゴリズムの後継です。なお、 MD5 アルゴリズムも安全でないと考えられています。

関連情報