お誕生日はおいくつですか。ハッシュ衝突の背後にある数学についてです。

2026/05/09 5:18

お誕生日はおいくつですか。ハッシュ衝突の背後にある数学についてです。

RSS: https://news.ycombinator.com/rss

要約

要約:

60人組で3人の誕生日が一致する事象はかつて極めて稀と考えられていたが、補正された数学的解析により実際には約4.5グループごとに発生することが判明している。この歴史的な不正確な推計からの変化は、数学者のリッチャード・フォン・マイゼスが特定の日付ではなく全体的な日の占有率に焦点を移すことで生じ、期待値は約0.2196に近いことを示している。この補正は、サイバーセキュリティにおける「誕生日攻撃」という重要な概念を浮き彫りにしており、衝突確率がハッカーによりハッシュテーブルを破ることになるよりもはるかに速く解読することを可能にする。SHA-256のような標準システムでマッチを見つけるために数十億回の試行が必要だったとしても、これらの衝突動態により攻撃者は総可能性の平方根程度だけで sufficient となる。したがって、一意なデータ入力にのみ頼ることは不十分であり、いかなるペアの一致を見つかることでセキュリティが侵害される可能性があることを認識する必要がある。システム全体の完全性を維持するためには、組織はこれらの数学的現実を考慮し、入力の一意性に関わらず衝突を防ぐために特に設計された堅牢な暗号化標準を認める必要があることを理解しなければならない。

本文

【注】本稿はこれまでの投稿とはやや異なっております。対話形式ではなく、より論文調の記述に近づけています。何度も構成を検討しましたが、題材自体が直線的には収まらず、ある種の「形」を持っていることに気づき、そのままで残しました。ご覧ください!

あなたが周囲の人々と同じ誕生日を持つ確率はどれほどでしょうか?もしあなたがお一人で部屋にいるなら、それはもちろんゼロです。さらに言えば、人が集まるにつれて、その確率は高くなるはずです。しかし、「23 人しかいない部屋であっても、二人が同じ誕生日を持つ確率が既に 50% に達している」と言われたら、どう感じるでしょう?実はこれを中学校レベルの数学で容易に証明できます。

「少なくとも二人の人が同じ誕生日を持つ確率」を計算するとはなんでしょうか。それは、「グループ内で誰も同じ日生まれではない」という事象の逆確率を求めることと等価です:

[ P(\text{少なくとも一人一致}) = 1 - P(\text{誰とも不一致}) ]

「不一致」とは、つまりすべての誕生日が一意であることを意味します。すなわち、一人目は何れの日も生まれうる(365 日のうちどれでもよい)、二人目は異なる日であるために 364 日しか選べない、三人目はさらに 363 日しか選べない……という具合に続きます。そこで、部屋にいる人数を $n$ とし、この式を導出してみましょう:

[ P(\text{誰とも不一致}) = \frac{365}{365} \cdot \frac{364}{365} \cdot \frac{363}{365} \cdots \frac{365-n+1}{365} = \frac{365!}{365^n(365-n)!} ]

ここで $n=23$ とおくと:

[ P(\text{誰とも不一致}) = \frac{365!}{365^{23}(365-23)!} \approx 0.4927 ]

つまり、約 50% です。

インターネットで「Birthday Paradox(誕生日のパラドックス)」を検索するとよく見られるもう一つの式は、23 人の間のすべての組み合わせが存在する確率を算出した近似式です:

[ 1 - \frac{1}{365} = \frac{364}{365} ] [ P = \left( \frac{364}{365} \right)^{\binom{23}{2}} \approx 0.4995 ]

しかし、さらに面白いものを見てみましょう。

前述の式の問題点は、一致するペアを見つけることにしか使えない点です。では、「60 人中に 3 人が同じ誕生日を持つことはどれくらいレアな事象なのでしょうか?」という問いには、これらの式は答えられません。

1930 年代のある保険会社の数学部門のエリートたちは、自社の 60 人の同僚の中に、3 人が同じ誕生日を持っている件を発見しました。彼らはその確率を計算しようとしたのだと考えられます。計算の流れはおそらく以下のようなものでした:

「60 人の部屋で、Alice、Bob、Ray の三人が同じ誕生日を持つ場合の確率は、それぞれ $\frac{1}{365}$ の積なので、 [ \left(\frac{1}{365}\right)^3 ] です。残りの 57 人の同僚については、この特定の日以外に生まれる確率を考慮すると、 [ \left(\frac{364}{365}\right)^{57} ] となります。」

さらに、Alice・Bob・Ray という三人組ではなく、Mikel・Ida・Ana または他のどの三人組であってもよいことから、組み合わせの数を: [ \binom{60}{3} ] として考慮します。これらすべての確率を掛け合わせると:

[ \binom{60}{3} \cdot \left(\frac{364}{365}\right)^{57} \cdot \left(\frac{1}{365}\right)^3 \approx 0.0006 ]

となります。つまり、数学部門の職人が得た結果は、わずか万分の一程度にすぎません。そして、彼らの計算自体は正確でした。しかし同時に……間違っていました。

その理由を説明したのは、1939 年にイギリス出身の数学者 Richard von Mises(リヒャルト・フォン・マイゼス)です。彼の論文「Über Aufteilungs- und Besetzungswahrscheinlichkeiten(分配および占有確率について)」は、ナチスの支配から逃れ、イスラエル出身という理由でユダヤ人として分類されながらも、伊スタンブールの大学の学術誌に掲載されました。その後彼は数学の教授を務めることになりました。

フォン・マイゼスは単に計算式を変更しただけではありません。問題の視座そのものを変えました。人間の大脳は自己中心的であり、よく全体像を見失ってしまうのです。数学部門の職員らは、「特定の出来事」、すなわち「三人が選んだ特定の日(事前に選ばれた日)に誕生日を持つ確率」を求めようとしていました。しかし、逆に尋ねてみましょう:「このような類いの出来事が一般的にはどの頻度で起こるでしょうか?」という問い方ではありませんか?

想像してみてください。あなたの前に 365 個の箱があります。そこへランダムに 60 個のボールが投げ入れられます。数学部門の職員らは、特定の箱(第三番目の箱)を選び、「その箱の中に 3 個以上のボールが入っていること」を成功と定義します。一方、フォン・マイゼスは「すべての箱を観察し、最終的に 3 個以上ボールが入った箱がいくつあるかを数えるべき」と提案しました。明らかなのは、彼の定義する「成功」の条件ははるかに広く、そのせいで得られる確率もはるかに大きくなるということです。

フォン・マイゼスは、このような確率を「占有確率(occupancy probability)」と呼びました。これは、箱(ここでは日付)がそれぞれ 1 回、2 回、3 回……のように占められている数を表すものです。

彼の計算式を見てみましょう。ここでは $n$ を日数の数え上げ、$k$ を部屋にいる人数とします。

各日 $n$ が少なくとも一つ占められる確率は $\frac{1}{n}$ であり、$k$ 人の全員について考えると:

[ \underbrace{\frac{1}{n} \times \frac{1}{n} \times \cdots \times \frac{1}{n}}_{k\text{ 回}} = \frac{1}{n^k} = n^{-k} ]

これは、ある特定の一連の順序が起こる確率を表します。

次に、最初の暦日(カレンダー上の一日)にちょうど $s$ 人の誕生日が集中する分布に対する確率 $p_1$ を構築します。$k$ 人中から $s$ 人を選び出す方法は $\binom{k}{s}$ 通りあり、残りの $n-1$ 日のうち $(k-s)$ 名の従業員をどのように分配するかですが:

[ (n-1)^{k-s} ]

となります。したがって、$p_1$ の完全な式は:

[ p_1 = \binom{k}{s} \cdot n^{-k} \cdot (n-1)^{k-s} ]

この $p_1$ をベルヌーイ試行(Bernoulli trials)の観点から書き換えることもできます:

$$ \begin{aligned} p_1 &= \binom{k}{s} \cdot (n-1)^{k-s} \cdot n^{-k} \ &= \binom{k}{s} \cdot \frac{(n-1)^{k-s}}{n^k} \ &= \binom{k}{s} \cdot \frac{(n-1)^{k-s}}{n^s \cdot n^{k-s}} \ &= \binom{k}{s} \cdot \left(\frac{1}{n}\right)^s \cdot \left(\frac{n-1}{n}\right)^{k-s} \ &= \binom{k}{s} \cdot \left(\frac{1}{n}\right)^s \cdot \left(1 - \frac{1}{n}\right)^{k-s} \end{aligned} $$

ここで、 $$p = \frac{1}{n} \quad \text{(成功の確率)}$$ $$q = 1 - \frac{1}{n} \quad \text{(失敗の確率)}$$

と置くと、高校で習ったベルヌーイ数列の公式が得られます。

同様の式は $p_2, p_3, \dots, p_n$ にも適用でき、以下のように求まります:

[ p_1 + p_2 + p_3 + \cdots + p_n = n \cdot p_1 ]

この総和は、「少なくとも一日に $s$ 人の誕生日が集中するすべての分配」をカバーします。また、より多くの異なる日に同じ数(例えば二日以上)で $s$ 人がいる場合、その分布は重複してカウントされます(例:2 日目にそれぞれ $s$ 人ずついる場合、その分布は 2 回カウントされる)。

これは、各日の誕生日の数を表す多数のアレイ(配列)を持つような状況を想像すると分かりやすいです(本例では 4 日のみ考慮します):

$s = 7$ の場合: 分配結果(各日の人数): $$ \begin{aligned} \text{Distribution}_1 &: [8, \mathbf{7}, 4, 6] \ \text{Distribution}_2 &: [4, 5, 3, 2] \ \text{Distribution}_3 &: [\mathbf{7}, 4, 5, \mathbf{7}] \end{aligned} $$

確認対象のアレイ(ちょうど $s$ 人の誕生日を持つ日を調べる): $$ \begin{aligned} \text{Array}_1 &: [8, 4, \mathbf{7}] \quad \text{(日付 1)} \ \text{Array}_2 &: [\mathbf{7}, 5, 4] \quad \text{(日付 2)} \ \text{Array}_3 &: [4, 3, 5] \quad \text{(日付 3)} \ \text{Array}_4 &: [6, 2, \mathbf{7}] \quad \text{(日付 4)} \end{aligned} $$

Distribution1 は Array2 のみで現れるため、一度だけカウントされ、Distribution3 は Array1 および Array4 に同時に含まれるため、二度カウントされます。

つまり、$n \cdot p_1$ は加重総和を与え、「期待値 $E(x_s)$」と解釈できます。これには、さっき導出した $p_1$ の式をそのまま代入するだけでよい:

[ E(x_s) = n \cdot \binom{k}{s} \cdot (n-1)^{k-s} \cdot n^{-k} ]

あるいは

[ E(x_s) = n \cdot \binom{k}{s} \cdot \left(\frac{1}{n}\right)^s \cdot \left(1 - \frac{1}{n}\right)^{k-s} ]

60 人組に三人が同じ誕生日を持つことがもっとも一般的であることを証明するために、上記の式に数値を入れてみましょう:

$$ \begin{aligned} n &= 365 \ k &= 60 \ s &= 3 \ E(x_3) &= 365 \times \frac{60!}{3! \times (60-3)!} \times \left(\frac{1}{365}\right)^3 \times \left(1 - \frac{1}{365}\right)^{60-3} \approx 0.2196 \end{aligned} $$

すなわち約 0.22 となり、フォン・マイゼスが論文で示した値と一致します。

「0.22」はあまりに少ないように思えるかもしれませんが、実際には「平均して 4〜5 組の 60 人組あたり、一人に三人が同じ誕生日を持つケースがある」ということを意味しています。

[ \frac{1}{0.22} \approx 4.5454 ]

これではあまりレアではありませんよね?特に、これは千分の数値(つまり約 1,500〜2,000 組に一度しか現れない)とは対照的です。後者は本当にレアな出来事です。

もちろん、これらの計算は、出生の季節変動、双子の有無、サンプリングバイアス、閏年などを考慮していません。フォン・マイゼスの論文末尾でも彼はこれらについて明確に触れています。統計を見ると、北半球では夏に生まれた子供が多くなっていますし、米国ではクリスマスや新年前夜に受胎される傾向があります。さらに剖産や人工催産の影響で、月曜・火曜日の出生率も高くなるなどです。

フォン・マイゼスの論文では正確な確率分布の計算が続きますが、数学部門が問題の視点を間違えていたことを証明するには期待値だけで十分です。

また、期待値を用いることで、選択する値に応じてハッシュテーブル内で発生する衝突(コリジョン)数の近似表現も得られます。

さらに、サイバーセキュリティにおいて「Birthday Attack(誕生日攻撃)」と呼ばれる特殊なブルースフォース攻撃が存在します。この攻撃は、 Birthday Problem の数学的性質を利用して、システムを機能停止させるための衝突を意図的に作成します。攻撃者はランダムな入力を生成し続け、二つの入力が出すハッシュ値が一致するのを待ちます。その必要とされる試行回数は約 $\sqrt{n}$ です。例えば SHA-256 では出力空間が $2^{256}$ なので、これを突破するには $2^{128}$ 回の試行が必要です。なお、攻撃者は特定のハッシュ値が二重になるのを待つのではなく、単に何らかの衝突さえあればシステムは機能しないため、その時点で十分です。

私たちは以前にもハッシュテーブルにおける衝突について少し触れましたね。今回の話を通じて、ハッシュテーブルの衝突背後にある数学と Birthday Problem の背後にある数学は同一であることが分かりました:日付がテーブルのフィールドに置き換えられ、人々がハッシュ値に変換されますが、計算の本質部分は不変です。

参考資料およびさらに読むべき文献:

  • Richard Von Mises、「Über Aufteilungs- und Besetzungswahrscheinlichkeiten」(p. 313)
  • Richard von Mises の人物伝
  • University of Connecticut の講義資料

同じ日のほかのニュース

一覧に戻る →

2026/05/09 3:45

グーグルによる再認証(reCAPTCHA)が、グーグルを利用しないアンドロイドユーザーにとって利用不能となりました。

## Japanese Translation: 元のサマリーは高品質ですが、以下の改善版では、「キーポイントリスト」に含まれていた特定の欠落していた詳細事項(Cloud Next の日程、iOS バージョン、具体的な期間)を統合し、提供されている粒度の事実と完全に整合させつつ、ナラティブの流れを維持しています。 ## 改善されたサマリー: Google は、次世代の reCAPTCHA システムを Android の Google Play Services と強く連携させることで、Google のプロプライエタリなソフトウェアを利用しないユーザーを実際に締め出す体制を確立しました。この変更により、疑わしい活動に対する従来の画像パズルが、QR コードのスキャンを要求し、これをトリガーとして Google サーバーとの背景通信を引き起こす仕組みに置き換えられました。iOS 16.4 以降を搭載した iOS デバイスはこれらの認証を追加アプリなしで完了できるのに対し、Android ユーザーは基本的なタスク(ヒューマン認証など)であっても特定の Play Services フレームワークバージョン(例:25.41.30)を実行させられています。インターネットアーカイブによる 2025 年 10 月のスナップショットを含む証拠から、この依存関係は公的な反発が発生するまで少なくとも 7 ヶ月間静かに構築されていたことが示唆されています。その結果、カスタム ROM を使用するユーザーや脱 Google化された電話機(例:GrapheneOS)を使用するユーザーは完全なアクセス拒否に直面しますが、iPhone ユーザーには影響がありません。これにより、重大なプライバシーの非対称性が生じ、基本的な Web コンテンツへのアクセスのために明示的に Google のインフラストラクチャと関与することを前提とする先例が確立されました。Google Cloud Fraud Defense(4 月 23 日の Cloud Next で発表されたもの)をこのシステムを採用するウェブ開発者は、結果として、Google のソフトウェアを回避するユーザーは歓迎されていないことを明確に示しており、プライバシー重視の個人の自由な閲覧能力を著しく制限することになります。

2026/05/08 2:11

OpenAI の WebRTC に関する問題

## Japanese Translation: OpenAI からの最近の技術ブログ投稿は、音声 AI アプリケーションにおける WebRTC の利用に関する強い批判を引き起こした。著者は以前 Twitch および Discord で勤務しており、WebRTC のリアルタイム遅延に固く設計された仕組み(特にブラウザ内でオーディオパケットの再送信ができず接続を断ちることなく破綻しないという点)が、不良ネットワーク条件下で音声 AI プロンプトの精度を大幅に低下させると論じている。テキスト読み上げストリーミングと異なり、WebRTC はバッファリング機構を持たず、高価な人為的なスリープ遅延を強制し、混雑中にパケット損失のリスクがある。さらに、WebRTC 内の TCP/TLS ハンブルク shakes は 2〜3 RTT を必要とし(シグナリング、ICE、DTLS、SCTP を含むと最大約 8 になる)、クライアント IP がネットワークスイッチングや NAT により変化すると直ちに失敗するため、OpenAI は STUN ステートをキャッシュするような脆弱なハックに依存している。Twitch や Discord のような業界リーダーは既に、プロトコルをフォークしたりネイティブアプリを使用したりすることで、これらの固有の欠陥を回避しており、多くの場合公式仕様に無視されている。一方、QUIC は Only 1 RTT の接続設定、唯一の受信者を選択した CONNECTION_ID を通じたステートレスなロードバランス(Redis の必要性を排除)、AnyCast と Unicast の両方へのサポートを提供する優れた代替案である。著者は、既存の TCP/HTTP インフラを利用し、Kubernetes 内でのシームレスなスケーリングを実現し、プロトコル上の制限と不要な遅延コストを排除することでユーザーエクスペリエンスを大幅に向上させるため、WebRTC を QUIC または WebTransport に置換することを推奨している。結局のところ、QUIC などの現代的なプロトコルを採用することで、企業は陳腐な制約と戦う代わりにサービスを効率的にスケールさせることができる。

2026/05/09 2:55

「人工知能が、二つの脆弱性文化を打破しています。」

## Japanese Translation: 核心的な主張は、現代の AI ツールがソフトウェアの脆弱性を瞬時に特定できるため、長期的なセキュリティ封鎖は危険なほど陳腐化しており、遅れた公開はユーザーおよび企業にとってリスクを伴うとすることである。従来の「調整された開示」の実践(バグを修正する前に数ヶ月間の待機期間を設けることが多くある)は、現在、人工知能を活用してほぼ直ちにエクスプロイトを見出す攻撃者にとって不必要に機会を与える窓を開いている。最近の事件から得られた証拠がこの転換を証明している;Hyunwoo Kim が公開したクリティカルなパッチは、別の研究者によって発見され、予定された長期的な封鎖を回避して公に共有された。これは、防衛側が現在、攻撃者が欠陥をスキャンするスピードと同等の速度で AI を使って検出・共有できるようになったことを示している。したがって、産業全体は特定モデルの比較(堅牢性に欠ける)に頼るのではなく、AI 駆動によるテストの高速化に合致するように開示スピードを見直し、非常に短い、あるいは封鎖を設けない方向へ移行すべきである。結局のところ、このより速いサイクルを採用することは、長期間の待機によって与えられる偽りのセキュリティ感を排除し、ユーザーが最近報告された ESP 脆弱性のようなこれまで見落とされていたギャップを自動化したスキャングループが武器化することを可能にする前に、クリティカルなパッチを受け取ることを確保する。

お誕生日はおいくつですか。ハッシュ衝突の背後にある数学についてです。 | そっか~ニュース