暗号を破るのに必要なのは、スパイ映画のような特殊技術でも、天才数学者でもありません。時間だけです。
十分な時間があれば、すべての鍵を順番に試せばいい。では、なぜそれができないのか。
答えは一つの原理にあります。
『やるのは一瞬、逆は宇宙の年齢でも足りない』——一方向性と呼ばれる性質です。
1. 一方向性とは何か——「卵を割る」数学
しかし、割った卵を元に戻すことは誰にもできません。
暗号が使う数学はすべて、この「割る方向(やるのは簡単)」しか存在しない操作で成り立っています。
2. 第一の一方向性——素因数分解のジレンマ
RSA暗号の安全性を支えている「一つ目の卵」。それは、私たちが中学校の数学で習った「素因数分解」に潜む『素因数分解問題(IFP:Integer Factorization Problem)』の計算論的困難さです。
「えっ?あんな昔の計算ドリルが、現代のインターネットを守ってるの?」と驚くかもしれませんが、実はこの素因数分解こそが、未だに人類が解き明かせていない最強の「一方通行の道」なんです。
用済みの「素数」は、焼き魚の火種にして灰にしちゃえ!🐾
RSA暗号では、最初に誰にも内緒で「2つの素数(PとQ)」を選びます。そして、その2つを掛け算した答え(P×Q)を、公開鍵の一部として全世界に堂々と公開します。
ここで絶対におさえておきたいルールがあります。それは、「掛け算の答え(P×Q)を公開した後は、元のPとQの数字は二度と使わない」ということです。
もし、元のPとQの数字がハッカーにバレてしまうと、そこからあなたの「秘密鍵」をまるごと芋づる式に計算されてしまいます。だから、鍵を作り終わったあとのPとQは、もふねこが「秘密鍵」という名の絶対に開かない金庫の奥底に厳重に封印し、自分だけがこっそり使うのが、一番のセキュリティ対策なのです🐾(※教科書的には「PとQは捨てても暗号は機能する」のですが、実際のOpenSSLなどでは復号・署名を約4倍高速化する「中国人剰余定理(CRT)」のために、PとQを秘密鍵ファイルの中に安全に保存して毎回活用しています)
でも、ちょっと待って!「掛け算の答え」を全世界に公開しちゃったら、誰かがそれを見て「あ、元の数字(PとQ)はこれだな」って逆算できちゃうんじゃないの!?🐾
掛け算は「一瞬」、元に戻すのは「地獄」
もふねこの言う通り、たとえば公開された数字が「65」だったら、誰でも「あ、5と13を掛けたんだな」とすぐに分かってしまいます。これでは秘密鍵がバレバレです。
では、公開された数字が「11021」だったらどうでしょう?
一瞬で元の2つの素数を言い当てられますか?おそらく「えーと、3で割れる?ダメか。7は?13は?」と、電卓を片手に総当たりで試していくしかないはずです。(正解は 103 × 107 です)。
そう、実は現代の超エリート数学者たちをもってしても、「巨大な数字を、一発でパッと素因数分解できる魔法の公式」は一つも見つかっていないのです。
1977年、RSA暗号の発明者たちは「我々が作った129桁の数字を素因数分解できたら100ドル払うよ!」と、全世界に挑戦状を叩きつけました。彼らは「生きている間は絶対に解かれない」と自信満々でしたが……なんと17年後、世界中のボランティアが1600台のパソコンをつなぎ、8ヶ月間ぶっ通しで計算し続けることで、執念で解き明かしてしまったのです。
ここで重要なのは、「破られたこと」ではありません。
「2つの素数を掛けて129桁の数を作る」のは、パソコンなら0.001秒(一瞬)で終わります。しかし、その答えを元の素数に戻すには1600台のパソコンで8ヶ月の死闘が必要だったということです。
この「掛けるのは一瞬、分けるのは地獄」という圧倒的な非対称性こそが、暗号を守る分厚い壁の正体なのです。
人類最大の「数学のロマンと恐怖」
現在、私たちが使っているRSA暗号(RSA-2048など)は、なんと「600桁」を超える巨大な数字を公開鍵にしています。
コンピュータの性能がどれだけ上がっても、素数の桁数をほんの少し増やすだけで、逆算(素因数分解)に必要な時間は宇宙の寿命を簡単に超えてしまいます。
しかし、暗号学者たちは常に一つの「恐怖」と隣り合わせにいます。
それは、「素因数分解を一瞬で解ける公式は存在しない」と、数学的に完全に証明した人はまだ地球上に誰一人としていないということです。
明日、どこかのお茶目な天才数学者が「あ、こうやれば一瞬で素因数分解できるじゃん!」とあっさり公式を発見してしまう可能性も、ゼロではありません。
私たちが毎日安心してお買い物をしたりメッセージを送れたりするのは、「何千年も見つかってないんだから、きっとそんな魔法の公式はないだろう」という、人類の歴史とロマンの上に成り立っているのです。
3. 第二の一方向性——乱数という「絶対に読めないサイコロ」
暗号の安全性を守る「二つ目の卵」。それは「乱数(ランダムな数字)」です。
「えっ、ただの適当な数字でしょ?」と思うかもしれませんが、実は「完璧にデタラメな数字」をコンピュータに作らせることは、ものすごく難しいんです。
真面目すぎるコンピュータの弱点
私たち人間なら「適当に数字を言って」と言われれば「うーん、7!あ、次は4!」と適当に答えられます。でも、コンピュータは「計算」しかできない超マジメな機械です。そのため、ハードウェアの熱雑音やディスクのシーク時間などから抽出した『エントロピー(Entropy:予測不可能性の度合い)』をOS(/dev/urandom等)が収集し、それを「シード(種)」として与え、決定論的アルゴリズムを用いて疑似的にデタラメな数字を生み出します。
これを暗号学では『暗号論的疑似乱数生成器(CSPRNG:Cryptographically Secure Pseudo-Random Number Generator)』と呼びます。
暗号の世界において、この「規則性」は致命傷です。
「あ、この数式を使ってるなら、次に出る数字は『8』だな」とハッカーに予測された瞬間、どんなに強力な暗号でも、秘密鍵をまるごと推測されて一瞬で突破されてしまいます。
2012年の悲劇:サイコロが死ぬとき
実際に2012年の論文『Mining Your Ps and Qs』等による大規模調査で、なんと十数万台のルーター等の組み込み機器が「全く同じ素数」を使ってしまっていたことが発覚しました。
原因は、機器起動直後のエントロピー不足(乱数プールの枯渇)です。「デタラメな数字」を作るはずが、OSの起動直後でエントロピーが溜まる前に予測可能な同じシードから乱数を生成してしまったのです。これにより攻撃者は、『ユークリッドの互除法』を用いて他人の公開鍵との「最大公約数(GCD)」を計算するだけで、一瞬にして共通の素数Pを割り出し、秘密鍵全体を復元して数え切れないほどのシステムを丸裸にしました。
だから、暗号に使う乱数には「過去に出た数字から、未来の数字が絶対に予測できない(非線形性)」っていう、鬼のように厳しい条件が課せられているんだよ🐾
サイコロを振るのは一瞬だけど、次に出る目はハッカーにも神様にも読めない!これが第二の『一方向性』だよ!
4. 第三の一方向性——ハッシュ関数という「デジタル指紋」
暗号を支える「三つ目の卵」。それは「ハッシュ関数」です。
一言でいうと、これは「暗号化はできるけど、鍵がないから絶対に元に戻せない魔法のミキサー」です。「えっ!?元に戻せないなら暗号の意味がないじゃん!」と思うかもしれませんが、これが大活躍するんです。
データから「指紋」だけを取り出す
ハッシュ関数に、どんな長さのデータ(たとえばあなたのパスワードや、1000ページの分厚い契約書)を入れても、必ず決まった長さの「意味不明な文字列(ハッシュ値)」に変換されて出てきます。
→ 出力:6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090(64文字・256bit)
ここで暗号学的ハッシュ関数に求められる『3つの必須要件』があります。
1つ目は、出力から元のデータを逆算することが不可能であること(『原像計算困難性:Pre-image resistance』)。2つ目は、ある入力と同じハッシュ値を持つ「別の入力」を見つけることが不可能であること(『第2原像計算困難性』)。
そして3つ目は、同じハッシュ値になるような「任意の2つの異なるデータ」を見つけ出すことが不可能であること(『衝突困難性:Collision resistance』)です。この厳密な要件を満たすからこそ、ハッシュ値はデータの完璧な「デジタル指紋」として機能します。
雪崩(アバランチ)効果の恐るべき威力
ハッシュ関数の内部アルゴリズムは、ブロック暗号と同様に「錯乱と拡散(Confusion and Diffusion)」の連鎖構造を持っています。このため、入力データが「たった1ビット」変わっただけでも、出力されるハッシュ値の約半分のビットが全く別のものへと劇的かつ予測不能に変化します。暗号学ではこの性質を「雪崩(アバランチ)効果」と呼びます。
→ 出力:6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090
→ 出力:cd7011e7a6b27d44ce22a71a4cdfc2c47d5c67e335319ed7f6ae72cc03d7d63f
「たった一つ数字を変えただけ」なのに、出力された指紋は元の面影すら残していません。この徹底的な不規則性があるおかげで、ハッカーが「出力結果の規則性から、元の入力データを推測する」ことは物理的に不可能になります。
さらに、どんなに巨大なデータを入れても「常に決まった長さ(SHA-256なら64文字)」に圧縮されるため、通信の途中でデータが改ざんされていないかを一瞬で見破るための絶対的な壁として機能するのです。
(※この強力なハッシュ関数が「パスワード」をどう守っているのかは、次章『第3の扉』でたっぷり解説します🐾)
メッセージダイジェストとハッシュの進化
この「改ざんを一瞬で見破る」性質は、LinuxやPythonパッケージなどのソフトウェアをダウンロードする際に、「メッセージダイジェスト(データの要約)」として広く使われています。配布元が公開したハッシュ値と、手元のファイルのハッシュ値が一致すれば、途中でハッカーにウイルスを仕込まれていないことが100%証明できるからです。
かつてはこの用途に「MD5」や「SHA-1」が主流でしたが、暗号解読技術の進化により「衝突攻撃(同じ指紋を持つ別の偽装データを作れてしまうこと)」が実証されてしまいました(暗号・署名用途としてのSHA-1は2030年末で廃止予定)。
そのため現在では、より安全な「SHA-2」(SHA-256など)や、内部構造を根本から変えたスポンジ構造の「SHA-3」が標準とされています。さらに最新のWeb3・ブロックチェーンの世界では、並列処理によりSHA-3の約15倍の超高速を誇る新世代ハッシュ「BLAKE3」をスマートコントラクトでサポートする動き(Solanaでの活用など)も広がっており、用途に合わせて最適な魔法のミキサーが進化し続けているのです。
計算するのは一瞬、でも逆算は不可能。
「素因数分解」「乱数」「ハッシュ関数」。この3つの強力な「一方向性の卵」たちが連携することで、現代のインターネットはハッカーの脅威から固く守られているのです🐾
5. 0.001秒の中で、3つの魔法が動いている
あなたが今日、ネットショッピングで「注文する」ボタンを押した。
その瞬間、画面には何も変化がありません。ただ、インターネットの見えない場所で、たった0.001秒の間に、ここまで学んできた3つの数学がこの順番で、この理由で動いています。
① まず「乱数」が動く——今日だけの鍵を作る
通信が始まる最初の一瞬、あなたのブラウザは「この通信1回きりで使い捨てる秘密の鍵(セッション鍵)」を生成します。
なぜ使い捨てなのか。同じ鍵を使い続ければ、過去の通信記録を集めたハッカーがパターンを分析できてしまうからです。だから毎回、誰にも予測できない乱数で新しい鍵を作る。
「次の数字が絶対に読めない」という第二の一方向性が、ここで最初に動きます。
② 次に「素因数分解」が動く——その鍵を封印して渡す
使い捨ての鍵を作っても、それをAmazonのサーバーに届けなければ意味がありません。しかし、鍵をそのままインターネットに流せば、途中で盗まれます。
そこで登場するのがRSA(素因数分解の困難さ)です。あなたのブラウザはAmazonの公開鍵を使って、その使い捨て鍵を金庫に封印します。この金庫を開けられるのは、Amazonだけが持つ秘密鍵だけ。
「掛けるのは一瞬、戻すのは地獄」という第一の一方向性が、鍵を安全に届けます。
※現在のTLS 1.3ではRSA鍵交換は廃止されECDHEが使われますが、ここでは「公開鍵暗号が鍵を封印する」という原理の説明としてRSAを用いています。
③ 最後に「ハッシュ関数」が動く——届いたデータが本物かを確かめる
鍵が無事に届き、通信が始まりました。しかし、あなたが送った「注文内容」が通信の途中でハッカーに書き換えられていたら?
ハッシュ関数は、送信データの「デジタル指紋」をデータに添付します。Amazonのサーバーは受け取ったデータから同じ指紋を計算し、添付されていたものと照合します。1文字でも書き換えられていれば、指紋はガラッと変わる。改ざんは一瞬で見破られます。
「計算は一瞬、逆算は不可能」という第三の一方向性が、データの完全性を保証します。
この3つ、バラバラに見えたかもしれないけど、実は「一方向性」という同じ原理の3つの顔だったんだよ🐾
乱数は「時間の一方向性」、素因数分解は「計算の一方向性」、ハッシュは「変換の一方向性」。あなたが今日押した注文ボタンの裏で、この3つが完璧なリレーをしていたんだ。
6. 「絶対の壁」は永遠ではない——だから数学を理解することに意味がある
ここまで読んで、「なんだ、数学さえあれば暗号は永遠に安全なんだ」と思ったとしたら、少し待ってください。
一方向性は、「発見されていない」から一方向なのです。
素因数分解を一瞬で解く公式が存在しないことは、数学的に証明されていません。ショアのアルゴリズムという量子コンピュータ向けの手法は、RSAを原理上数分で破ることが証明されています。
乱数もハッシュ関数も、グローバーのアルゴリズムによって安全性が理論上「平方根(半分)」まで引き下げられます。しかし、最初から十分に長い出力(SHA-256など)を使っておけば、半分になってもまだ「128ビット相当の安全性」が残るため、現在でも実質的に安全だと評価されています。
これは「暗号が危ない」という話ではありません。これが暗号の本質なのです。
暗号の歴史は常にこの繰り返しでした。難しいと思われていた問題が解かれ、より難しい問題に移行する。DESが破られてAESへ、SHA-1が破られてSHA-256へ、そして今RSAからポスト量子暗号へ。
この移行を担ってきたのは、「なぜこの数学が安全なのか」を根っこから理解していた人たちです。
2024年にNISTが標準化したポスト量子暗号「SLH-DSA(ステートレス・ハッシュベースデジタル署名:旧称SPHINCS+)」は、素因数分解などの複雑な代数的構造を持たず、純粋にハッシュ関数の「原像計算困難性と衝突困難性」のみを安全性の根拠としています。ショアのアルゴリズムが通用しないため、かつて縁の下の力持ちだったハッシュ関数が、量子コンピュータ時代の主役に変わろうとしているのです。
このパラダイムシフトを本質的に理解できるのは、「ハッシュ関数とは何か」を仕組みから知っている人だけです。
「一方向性」は人類が発見した最善の答えであって、永遠の真理じゃない🐾
だからこそ、テクニックを覚えるより原理を理解することに意味がある。次の時代の暗号も、きっと同じ問いから生まれるから。「やるのは一瞬、逆は誰にもできない——そんな数学はないか?」ってね。
🎯 まとめ——「一方向性」というレンズを手に入れたあなたへ
この記事を読む前と後で、あなたの暗号の見え方は変わっているはずです。
暗号は「難しい技術の話」ではありません。「やるのは簡単、戻すのは不可能」という一つの原理が、三つの顔を持っている——それだけの話です。
素因数分解は「掛けるのは一瞬、分けるのは地獄」という計算の非対称性。
乱数は「振るのは一瞬、次の目は誰にも読めない」という予測不可能性。
ハッシュ関数は「変換は一瞬、逆算は絶対に不可能」という変換の非可逆性。
この三つが、あなたが今日押した注文ボタンの裏で、0.001秒のリレーをしていました。
そして、そのリレーはいつか形を変えます。量子コンピュータの時代が来れば、素因数分解の役割は別の数学に引き継がれる。しかし「一方向性」という原理は変わらない。
数学は変わらない。ただ、人類がより深く理解していくだけです。
📝 もふねこまとめ🐾
- 🥚 第一の卵(素因数分解):掛けるのは一瞬、戻すのは地獄
- 🎲 第二の卵(乱数):振るのは一瞬、次の目は誰にも読めない
- 🔍 第三の卵(ハッシュ関数):変換は一瞬、逆算は絶対不可能
この3つは別々の技術じゃなく、「一方向性」という同じ原理の三つの顔だったんだよ🐾 この「レンズ」を持っていれば、これから登場するどんな新しい暗号技術も、同じ問いで理解できるはず。「どこが一方向なのか?」ってね!