ハッシュ関数とは

はっしゅかんすう

任意の長さのデータから、決まった長さの値(ハッシュ値)を計算する関数。暗号で使うもの(SHA-256など)は、ハッシュ値から元のデータを求めることも、同じハッシュ値になる2つのデータを見つけることも現実的にできないように作られ、改ざんの検出、デジタル署名、パスワードの保存に使われる。

「ハッシュ関数」は、3分野の8問の練習問題に出てきます(情報セキュリティの基礎, データ構造とアルゴリズム, 量子コンピュータのハードウェアなど)。

この用語の分野: 情報セキュリティの基礎

暗号学的ハッシュ関数に求められる性質

暗号で使うハッシュ関数には、3つの性質が求められます。原像計算困難性(一方向性)は、ハッシュ値から、そのハッシュ値になる入力を見つけるのが困難であることです。第2原像計算困難性は、ある入力が与えられたとき、同じハッシュ値になる別の入力を見つけるのが困難であることです。衝突困難性は、同じハッシュ値になる異なる2つの入力を、どれでもよいので見つけるのが困難であることです。また、入力が1ビット違うだけで出力のおよそ半分のビットが変わる性質(雪崩効果)も持ちます。

出力の長さと安全性

出力がnビットの理想的なハッシュ関数では、原像を総当たりで探すにはおよそ 2^n 回の計算が必要ですが、衝突は誕生日のパラドックスにより約 2^(n/2) 回で見つかる見込みが高くなります。このため、SHA-256の衝突への強さは約128ビット相当とされます。MD5やSHA-1は、総当たりよりはるかに少ない計算で衝突を作る方法が見つかっているため、デジタル署名などの安全が必要な用途には使わないことになっています。

主な使い道

ハッシュ値は、データの「指紋」として使えます。ダウンロードしたファイルのハッシュ値を公式に示された値と比べれば、壊れたり差し替えられたりしていないかが分かります(ただし、公式の値そのものが信頼できる経路で得られていることが前提です)。デジタル署名では、長い文書の代わりにそのハッシュ値に署名します。パスワードの保存では、ソルトを加え、bcryptやArgon2のような、わざと計算を重くした方式を使います。鍵と組み合わせたHMACは、メッセージ認証コードとして改ざんの検出に使われます。

ハッシュ関数の練習問題に挑戦

暗号で使われるハッシュ関数(暗号学的ハッシュ関数)の性質として正しいものはどれか。

  1. Aハッシュ値から元のデータを、秘密鍵を使えば復元できる
  2. B入力の長さに比例して、ハッシュ値も長くなる
  3. C入力が同じなら必ず同じハッシュ値になり、入力が1ビット違うだけでも、ハッシュ値は予測できないほど大きく変わる
答えと解説を見る

正解:C. 入力が同じなら必ず同じハッシュ値になり、入力が1ビット違うだけでも、ハッシュ値は予測できないほど大きく変わる

ハッシュ関数は、任意の長さのデータから、決まった長さの値(ハッシュ値、ダイジェスト)を計算する関数です。例えばSHA-256は、入力の長さによらず256ビットの値を出力します。同じ入力からは必ず同じ値が得られ、入力がわずかでも違うと、出力は予測できないほど大きく変わります。暗号で使うハッシュ関数には、さらに、ハッシュ値から元の入力を求めることが現実的に不可能であること(一方向性、原像計算困難性)や、同じハッシュ値になる異なる2つの入力を見つけることが困難であること(衝突困難性)が求められます。ハッシュ関数は鍵を使わない計算で、暗号化ではないので、復号して元に戻すこともできません。改ざんの検出、デジタル署名、パスワードの保存などに使われます。

出力が256ビットの理想的なハッシュ関数に対して、総当たりで攻撃するときに必要な計算の回数の目安として、「与えられたハッシュ値になる入力を見つける(原像攻撃)」場合と、「同じハッシュ値になる異なる2つの入力を、どれでもよいので見つける(衝突攻撃)」場合の組み合わせとして正しいものはどれか。

  1. A原像攻撃は約2^256回、衝突攻撃は約2^128回
  2. B原像攻撃は約2^128回、衝突攻撃は約2^256回
  3. C原像攻撃も衝突攻撃も約2^256回
答えと解説を見る

正解:A. 原像攻撃は約2^256回、衝突攻撃は約2^128回

出力がnビットの理想的なハッシュ関数では、ハッシュ値は 2^n 通りあり、入力を1つ試すごとに、決められたハッシュ値に一致する確率は 1/2^n です。そのため原像攻撃には、およそ 2^n 回、n = 256 なら約2^256回の計算が必要です。一方、衝突攻撃では、どの2つが一致してもよいので、k個の入力を試すと、比べられる組は約 k^2/2 通りに増えます。k^2/2 が 2^n に近づく、k が 2^(n/2) 程度で衝突が見つかる見込みが高くなり、n = 256 なら約2^128回です。これは「23人いれば、誕生日が同じ2人がいる確率が50%を超える」という誕生日のパラドックスと同じ考え方で、誕生日攻撃と呼ばれます。このため、ハッシュ関数の衝突に対する強さは出力のビット数の半分と見積もられ、128ビット相当の強さを求めるなら256ビットの出力が必要になります。

よくある質問

ハッシュ関数と暗号化の違いは何ですか?

暗号化は鍵を使って元に戻せる(復号できる)変換ですが、ハッシュ関数は鍵を使わず、元に戻すことができない一方向の計算です。そのため、ハッシュ値は秘密を守るためではなく、データが同じかどうかを確かめるために使います。

SHA-256のハッシュ値は何ビットですか?

入力の長さによらず256ビット(16進数で64文字)です。1文字のデータでも、大きなファイルでも、同じ長さの値になります。

解説の中の「ハッシュ関数」

「ハッシュ関数」が出てくる問題(8問)

  1. 暗号で使われるハッシュ関数(暗号学的ハッシュ関数)の性質として正しいものはどれか。
  2. 出力が256ビットの理想的なハッシュ関数に対して、総当たりで攻撃するときに必要な計算の回数の目安として、「与えられたハッシュ値になる入力を見つける(原像攻撃)」場合と、「同じハッシュ値になる異なる2つの入力を、どれでもよいので見つける(衝突攻撃)」場合の組み合わせとして正しいものはどれか。
  3. パスワードの保存に、SHA-256のような高速なハッシュ関数をそのまま使うのではなく、bcryptやArgon2のような、わざと計算に時間がかかるように設計された方式を使うことが推奨される理由として正しいものはどれか。
  4. 大きさ7のハッシュテーブル(位置0〜6)に、ハッシュ関数 h(k) = k mod 7 でキー10、17、24、3をこの順に格納する。衝突したときは、位置を1つずつ後ろへずらして(6の次は0)空いている位置を探す線形探査法を使う。キー3が格納される位置はどれか。
  5. 耐量子計算機暗号(ポスト量子暗号、PQC)の説明として正しいものはどれか。
  6. Webサービスで利用者のパスワードを保存するとき、パスワードに利用者ごとに異なるランダムな値(ソルト)を加えてからハッシュ値を計算して保存する。ソルトを使う主な目的はどれか。
  7. メッセージ認証コード(MAC)とデジタル署名を比べたときの説明として正しいものはどれか。
  8. ハッシュテーブル(ハッシュ表)における衝突(コリジョン)の説明として正しいものはどれか。

情報セキュリティの基礎の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

半導体・電子回路・情報の計算ツール

関連する用語

デジタル署名 ソルト ハッシュテーブル GPU 剰余演算 耐量子計算機暗号 ショアのアルゴリズム メッセージ認証コード SQLインジェクション 共通鍵暗号

用語集の一覧へ