出力が 通りの値 のどれかになるハッシュ関数 を考える。 はランダムオラクルとみなす。つまり、互いに異なる入力に対する出力は、それぞれ独立に 通りの値から等確率で選ばれるものとする。
攻撃者は互いに異なる 個の入力 を用意し、それぞれのハッシュ値 を計算する( は正の整数)。この 個のハッシュ値の中に等しいものが少なくとも 組ある(衝突が起こる)確率が を超えるような のうち、最小のものを求めよ。
出力が 通りのランダムなハッシュで 個の値がすべて異なる確率 を求め、余事象で衝突確率を求められる。近似 を使って衝突確率が を超える のおよその大きさ( の定数倍)を見積もれる
読み込み中…
右端(太枠)がこの技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
出力が 通りのハッシュ関数に 個の異なる入力を与えたとき、出力のどこかが一致する(衝突する)確率を求める技能です。「40 人のクラスに同じ誕生日の 2 人がいる確率」と同じ構造なので、誕生日問題とも呼ばれます。まず全部が異なる確率を正確に求め、余事象で衝突確率を出します。さらに指数関数による近似を使うと、衝突確率が を超えるのは がおよそ に達したときだとわかります。これは、ハッシュ値の長さが安全性に十分かどうかを見積もるときに使います。
モデルを決めます。各入力のハッシュ値は 通りのどれかに等確率でなり、入力ごとに独立に決まるとします。 個の出力の並びは重複順列で 通りあり、どれも同様に確からしい根元事象です。すべて異なる並びは 個から 個を並べる順列で 通りあります。よって
番目()の値が、それまでに出た 個の値のどれとも違う確率が だと考えても同じ式になります。「少なくとも 1 組が衝突する」は「すべて異なる」の余事象なので、衝突確率は です。なお のときは因子 が含まれるので、衝突確率は になります(鳩の巣原理)。
近似のために、 のテイラー展開を剰余項つきで書きます。ある ()を用いて と表せ、剰余項は 以上です。したがって、すべての実数 で が成り立ちます。 が小さいときは の項が無視できるので、 となります。 のとき各因子は正なので、これらを掛け合わせると
が得られます。ここで (等差数列の和)を使いました。よって衝突確率は 以上で、 が に比べて十分小さいとき両者はほぼ等しくなります。
近似式で衝突確率が 以上になる条件は です。両辺の対数をとると となります。 が大きいとき なので、 です。ペアの個数 が の 2 乗に比例して増えるので、 に比べてずっと少ない 程度の個数で衝突が起こりやすくなります。
出力の総数 と値の個数 を確認する。 なら衝突確率は で終わり。
すべて異なる確率を積で書く:
余事象で衝突確率を出す:
見積もりだけが必要なら近似を使う: (正確な値はこれ以上になる)
衝突確率 の目安を求めるときは を解く。おおよそ となる。
出力が 通りのランダムなハッシュ関数に、異なる 個の入力を与える。各出力は 通りに等確率かつ独立に決まるとする。少なくとも 1 組のハッシュ値が一致する確率を求めよ。
手順 1: , であり、 を満たす。
手順 2: すべて異なる確率は
である。
手順 3: 余事象をとると、衝突確率は となる。
(参考・手順 4: 近似式では となる。これは正確な値 以下であり、不等式と合っている。 が大きいので近似の誤差も大きめになっている。)
答え:
衝突確率を や としてしまう誤り。正しくは である。 は衝突確率の上からの目安にすぎず、 を超えることもある(例: で 。正確な値は )。
積の範囲を から までとしてしまう誤り。1 個目はどの値でも衝突しないので因子は である。正しくは で、分子は と 個の積になる。
「特定の 1 個と同じ値が出る確率」 と混同する誤り。正しくは、誕生日問題は「どこかの 2 個が一致する」確率であり、ペアが 組あるので、はるかに少ない で を超える。
衝突確率が になるのは だと考える誤り。正しくは より である。例えば なら で、 ではない。
この説明は AI が書き、別の AI が例題を独立に解いて答えを確かめ、説明を一歩ずつ査読しました。
出力が 通りの値 のどれかになるハッシュ関数 を考える。 はランダムオラクルとみなす。つまり、互いに異なる入力に対する出力は、それぞれ独立に 通りの値から等確率で選ばれるものとする。
攻撃者は互いに異なる 個の入力 を用意し、それぞれのハッシュ値 を計算する( は正の整数)。この 個のハッシュ値の中に等しいものが少なくとも 組ある(衝突が起こる)確率が を超えるような のうち、最小のものを求めよ。
出力が 通りの値のどれかになるハッシュ関数 を考える。 はランダムオラクルとみなし、互いに異なる入力に対する出力は、それぞれ独立に 通りの値から等確率で選ばれるものとする。
互いに異なる 個の入力 のハッシュ値のうち、少なくとも つが一致する(衝突が起こる)確率 を、近似式
で見積もる。この近似値が 以上となる最小の正の整数 を求めよ。ただし、 として計算してよい( は自然対数)。
出力が 通りの値 のどれかになるハッシュ関数 を考える。 はランダムオラクルとみなす。つまり、互いに異なる入力に対する出力は、それぞれ独立に 通りの値から等確率で選ばれるものとする。
互いに異なる 個の入力( は正の整数)のハッシュ値を計算したとき、少なくとも 組の衝突(同じハッシュ値をもつ つの入力)が起こる確率を とする。 を近似式
で見積もる。この近似値が 以上となる最小の正の整数 を求めよ。ただし、 として計算してよい( は自然対数)。
出力が 通りの値 のどれかになるハッシュ関数 を考える。 はランダムオラクルとみなす。つまり、互いに異なる入力に対する出力は、それぞれ独立に 通りの値から等確率で選ばれるものとする。
攻撃者は、署名してもらいたい「正当な文書」の変種 と、すり替えたい「不正な文書」の変種 を用意する。これら 個の入力は互いに異なる。攻撃者は
を満たす が少なくとも 組存在するとき、攻撃に成功するものとする。正当な文書どうし、または不正な文書どうしでハッシュ値が一致しても、それだけでは成功とはみなさない。
攻撃に成功する確率を、既約分数で求めよ。
出力が 通りの値 のどれかになるハッシュ関数 を考える。 はランダムオラクルとみなす。すなわち、互いに異なる入力に対する出力は、それぞれ独立に 通りの値から等確率で選ばれるものとする。
攻撃者は互いに異なる 個の入力 についてハッシュ値 を計算する。このとき、ある値 について となる が 個以上存在する確率を求めよ。この事象を「 重衝突(3-マルチコリジョン)が起こる」という。
出力が 通りの値 のどれかになるハッシュ関数 を考える。 はランダムオラクルとみなし、互いに異なる入力に対する出力は、それぞれ独立に 通りの値から等確率で選ばれるものとする。
攻撃者は互いに異なる入力 をこの順に つずつ に問い合わせ、それまでに得た出力のどれかと同じ出力が初めて得られた時点で問い合わせをやめる。すなわち、
を とし、攻撃者は 回問い合わせる。 の期待値 を求めよ。
出力が 通りしかない簡易ハッシュ関数 を考える。 はランダムオラクルとみなし、互いに異なる入力に対する出力は、それぞれ独立に 通りの値から等確率で選ばれるものとする。
攻撃者は互いに異なる入力 を順に選んで を 回ずつ計算し、すでに計算した出力のどれかと同じ出力が初めて得られた時点で計算をやめる(衝突の発見)。このとき計算した の値の個数を とする(たとえば ならば )。
確率変数 の期待値 を求めよ。
出力が 通りの値 のどれかになるハッシュ関数 を考える。 はランダムオラクルとみなし、互いに異なる入力に対する出力は、それぞれ独立に 通りの値から等確率で選ばれるものとする。
攻撃者は互いに異なる入力 を順に選び、ハッシュ値 を 1 つずつ計算していく。そして、計算したハッシュ値がそれまでに得たハッシュ値のどれかと一致した時点(衝突が初めて見つかった時点)で計算をやめる。
やめるまでに計算したハッシュ値の個数を とする(たとえば ならば )。 の期待値 を求めよ。