技能一覧 › 大学数学 暗号理論

ハッシュの衝突確率(誕生日問題)

出力が 通りのランダムなハッシュで 個の値がすべて異なる確率 を求め、余事象で衝突確率を求められる。近似 を使って衝突確率が を超える のおよその大きさ( の定数倍)を見積もれる

前提

この技能までの道筋(57 技能)
算数中学高校大学大学院

読み込み中…

右端(太枠)がこの技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。

一覧で見る(前提が先)
  1. 樹形図で数え上げる (算数 場合の数)
  2. 積の法則と和の法則 (算数 場合の数)
  3. 和の法則・積の法則と樹形図 (数学A 場合の数と確率)
  4. 順列・円順列・重複順列 (数学A 場合の数と確率)
  5. 組合せ (数学A 場合の数と確率)
  6. 確率の定義と和事象・余事象 (数学A 場合の数と確率)
  7. 分数のたし算・ひき算 (算数 計算と数のきまり)
  8. 小数の四則計算 (算数 計算と数のきまり)
  9. 正負の数の加法・減法 (中学数学 数と式)
  10. 分数のかけ算・わり算 (算数 計算と数のきまり)
  11. 四則の混じった計算の順序 (算数 計算と数のきまり)
  12. 正負の数の乗除・累乗と四則混合 (中学数学 数と式)
  13. 分配法則を使った計算のくふう (算数 計算と数のきまり)
  14. 文字式の計算(同類項・分配法則) (中学数学 数と式)
  15. 乗法公式による展開 (中学数学 数と式)
  16. 因数分解 (中学数学 数と式)
  17. 3 次式までの展開と因数分解 (数学I 数と式)
  18. 微分係数と導関数の定義 (数学II 微分法と積分法)
  19. 多項式の微分 (数学II 微分法と積分法)
  20. 小数と分数のまじった計算 (算数 計算と数のきまり)
  21. 逆算(□ を求める) (算数 計算と数のきまり)
  22. 1 次方程式の解き方 (中学数学 方程式)
  23. 比例・反比例の式とグラフ (中学数学 関数)
  24. 約数の見つけ方 (算数 整数の性質)
  25. 素因数分解と約数の個数 (算数 整数の性質)
  26. 平方根の意味と根号の簡単化 (中学数学 数と式)
  27. 関数 の式と変域 (中学数学 関数)
  28. 平方完成と 2 次関数のグラフ (数学I 2次関数)
  29. 2 次不等式 (数学I 2次関数)
  30. 剰余の定理・因数定理と高次方程式 (数学II 複素数と方程式)
  31. 増減表と極値 (数学II 微分法と積分法)
  32. 等間隔にならんだ数の和 (算数 計算と数のきまり)
  33. 等差・等比数列の和と Σ (数学B 数列)
  34. 数列の極限 (数学III 極限)
  35. 関数の極限 (数学III 極限)
  36. 関数の連続性と中間値の定理 (数学III 極限)
  37. 平均値の定理 (数学III 微分法)
  38. 積と商の微分 (数学III 微分法)
  39. 第 2 次導関数とグラフの凹凸 (数学III 微分法)
  40. 合成関数の微分 (数学III 微分法)
  41. 円の周の長さと面積 (算数 平面図形)
  42. おうぎ形の弧の長さと面積 (算数 平面図形)
  43. 弧の長さからおうぎ形の中心角と面積を求める (中学数学 平面図形)
  44. 三角形・四角形の面積 (算数 平面図形)
  45. 三平方の定理 (中学数学 相似と三平方の定理)
  46. 特別な直角三角形の辺の比 (中学数学 相似と三平方の定理)
  47. 弧度法と単位円による三角関数 (数学II 三角関数)
  48. の極限 (数学III 極限)
  49. 加法定理と 2 倍角・半角・積和の公式 (数学II 三角関数)
  50. 三角関数の導関数 (数学III 微分法)
  51. 根号の乗除と加減 (中学数学 数と式)
  52. 指数の拡張と指数関数 (数学II 指数関数と対数関数)
  53. 対数の定義と性質 (数学II 指数関数と対数関数)
  54. 自然対数の底 (数学III 極限)
  55. 指数関数・対数関数の導関数 (数学III 微分法)
  56. 増減・凹凸・漸近線とグラフ (数学III 微分法)
  57. テイラー展開 (大学数学 微分積分)

説明

出力が 通りのハッシュ関数に 個の異なる入力を与えたとき、出力のどこかが一致する(衝突する)確率を求める技能です。「40 人のクラスに同じ誕生日の 2 人がいる確率」と同じ構造なので、誕生日問題とも呼ばれます。まず全部が異なる確率を正確に求め、余事象で衝突確率を出します。さらに指数関数による近似を使うと、衝突確率が を超えるのは がおよそ に達したときだとわかります。これは、ハッシュ値の長さが安全性に十分かどうかを見積もるときに使います。

なぜそうしてよいのか

モデルを決めます。各入力のハッシュ値は 通りのどれかに等確率でなり、入力ごとに独立に決まるとします。 個の出力の並びは重複順列で 通りあり、どれも同様に確からしい根元事象です。すべて異なる並びは 個から 個を並べる順列で 通りあります。よって

番目()の値が、それまでに出た 個の値のどれとも違う確率が だと考えても同じ式になります。「少なくとも 1 組が衝突する」は「すべて異なる」の余事象なので、衝突確率は です。なお のときは因子 が含まれるので、衝突確率は になります(鳩の巣原理)。

近似のために、 のテイラー展開を剰余項つきで書きます。ある ()を用いて と表せ、剰余項は 以上です。したがって、すべての実数 で が成り立ちます。 が小さいときは の項が無視できるので、 となります。 のとき各因子は正なので、これらを掛け合わせると

が得られます。ここで (等差数列の和)を使いました。よって衝突確率は 以上で、 が に比べて十分小さいとき両者はほぼ等しくなります。

近似式で衝突確率が 以上になる条件は です。両辺の対数をとると となります。 が大きいとき なので、 です。ペアの個数 が の 2 乗に比例して増えるので、 に比べてずっと少ない 程度の個数で衝突が起こりやすくなります。

手順

  1. 出力の総数 と値の個数 を確認する。 なら衝突確率は で終わり。

  2. すべて異なる確率を積で書く:

  3. 余事象で衝突確率を出す:

  4. 見積もりだけが必要なら近似を使う: (正確な値はこれ以上になる)

  5. 衝突確率 の目安を求めるときは を解く。おおよそ となる。

例題

出力が 通りのランダムなハッシュ関数に、異なる 個の入力を与える。各出力は 通りに等確率かつ独立に決まるとする。少なくとも 1 組のハッシュ値が一致する確率を求めよ。

例題の解答

手順 1: , であり、 を満たす。

手順 2: すべて異なる確率は

である。

手順 3: 余事象をとると、衝突確率は となる。

(参考・手順 4: 近似式では となる。これは正確な値 以下であり、不等式と合っている。 が大きいので近似の誤差も大きめになっている。)

答え:

よくある誤り

この説明は AI が書き、別の AI が例題を独立に解いて答えを確かめ、説明を一歩ずつ査読しました。

入口の問題

この技能を使う問題

この技能の次に学べること