本文へスキップ
株式会社オープンナレッジ
株式会社オープンナレッジ Open Knowledge Inc.
MATHEMATICS & EVERYDAY CRYPTOGRAPHY ESSAY 科学・数学コラム(基礎から詳しい数理まで) 執筆:加藤 明生(登録情報処理安全確保支援士(第007617号))

なぜネット通販のカード番号は盗まれないのか? 「時計の針の算数(剰余演算)」と素数が守る公開鍵暗号の美しい仕組み

私たちが毎日何気なく使っているネット通販やLINEのメッセージ、そしてスマートフォンの顔認証(パスキー)。画面の向こうのお店とは一度も直接会って「秘密の合言葉」を打ち合わせたことがないのに、なぜ世界中の通信経路を通り抜けながら誰にも中身を読まれないのでしょうか。その裏側には、2000年以上前から数学者たちが愛した「素数」と、小学校で習う「割り算の余り」が織りなす驚くほどエレガントな仕組みが隠れています。

1. 基本と全体像

この記事の要点と4つの章のご案内

このコラムの要点(3行まとめ)に関するイメージ写真
このコラムの要点(3行まとめ)
2000年間のパズル:「一度も会ったことがない2人」はどうやって同じ鍵を持てるのか?に関するイメージ写真
2000年間のパズル:「一度も会ったことがない2人」はどうやって同じ鍵を持てるのか?
なぜネット通販のカード番号は盗まれないのか? 「時計の針の算数(剰余演算)」と素数が守る公開鍵暗号の美しい仕組み の各章におけるテーマと要点一覧表
章構成 主なテーマ 要点と確認ポイント
1. 基本と全体像 このコラムの要点(3行まとめ) 私たちが毎日何気なく使っているネット通販やLINEのメッセージ、そしてスマートフォンの顔認証(パスキー)。画面の向こうのお店とは一度も直接会って「秘密の合言葉」を打ち合わせたことがないのに、なぜ世界中の通信経路を通り抜けながら誰にも中身を読まれないのでしょうか。その裏側には、2000年以上前から数学者たちが愛した「素数」と、小学校で習う「割り算の余り」が織りなす驚くほどエレガントな仕組みが隠れています。
2. 現場での進め方と対策 2000年間のパズル:「一度も会ったことがない2人」はどうやって同じ鍵を持てるのか? 紀元前のローマ帝国(シーザー暗号)から第2次世界大戦(エニグマ暗号機)に至るまで、人類の歴史における暗号にはずっと1つの大きな弱点がありました。それは、「暗号を送る前に、どうやって相手に『鍵(合言葉)』を渡すか?」という問題です。もし合言葉を書いた紙を届ける途中でスパイに盗み見られたら、その後の暗号通信はすべて筒抜けになってしまいます。
3. 関連する制度とルール 絵の具の代わりにコンピュータが使う「時計の針の算数(剰余演算)」 1976年、ホイットフィールド・ディフィーとマーティン・ヘルマンという2人の研究者が、この2000年間の常識を覆すアイデアを発表しました。それが「部屋の中で盗聴者がすべての会話を聞いているのに、2人だけがまったく同じ秘密の色(共通鍵)を作れる方法」です。
4. 詳しい技術仕様としくみ RSA暗号から楕円曲線(Ed25519)、そして耐量子計算機暗号へ 絵の具のたとえ話を、実際のコンピュータの中で数字として実現するのが「時計の針の算数(モジュロ演算・剰余演算)」です。私たちが普段見ている時計は「12」になると「0(12時)」に戻ります。たとえば今が10時で、そこから5時間進むと「10 + 5 = 15時」ではなく、12で割った余りである「3時(15 mod 12 = 3)」を指します。
第1章〜第4章では、実務チェックリスト・公的制度基準・詳しい技術仕様を確認できます。

このコラムの要点(3行まとめ)

Core Intuition
  • 01. 「混ぜるのは簡単だが、元の色に戻すのは不可能」な一方向性関数を使う: 2色の絵の具を混ぜるのは1秒でできますが、混ざった色から元の絵の具だけを分離することはできません。暗号はこの「行きは簡単、帰りは宇宙の寿命より長い」という計算の非対称性を利用しています。
  • 02. 「時計の針の算数(mod 素数)」が、誰にも見破れない共通の秘密を作る: たとえば「17時間で1周する時計」の上で、掛け算の余り(gx mod p)を計算すると、秘密の数字 x を外から当てることができなくなります。
  • 03. 巨大な素数から「楕円曲線」、そして「多次元の格子(耐量子暗号)」へ進化中: 300桁の素数の掛け算(RSA)から、より少ない計算量で強固な楕円曲線(Ed25519 / P-256)、さらに量子コンピュータ時代を見据えた格子暗号へと数学のバトンが受け継がれています。

01. 2000年間のパズル:「一度も会ったことがない2人」はどうやって同じ鍵を持てるのか?

紀元前のローマ帝国(シーザー暗号)から第2次世界大戦(エニグマ暗号機)に至るまで、人類の歴史における暗号にはずっと1つの大きな弱点がありました。それは、「暗号を送る前に、どうやって相手に『鍵(合言葉)』を渡すか?」という問題です。もし合言葉を書いた紙を届ける途中でスパイに盗み見られたら、その後の暗号通信はすべて筒抜けになってしまいます。

1976年、ホイットフィールド・ディフィーとマーティン・ヘルマンという2人の研究者が、この2000年間の常識を覆すアイデアを発表しました。それが「部屋の中で盗聴者がすべての会話を聞いているのに、2人だけがまったく同じ秘密の色(共通鍵)を作れる方法」です。

図解:絵の具の混ぜ合わせで見る「ディフィー・ヘルマン鍵共有」の直感モデル Diffie-Hellman Key Exchange
あなた(スマホ側) インターネット(誰でも見える場所) お店(サーバー側) 自分の秘密の色 A(青緑) ※絶対に外へ出さない秘密の数 a 共通のベース色 Y(生成元 g, 素数 p) ※全員に公開してよい基準の数 お店の秘密の色 B(琥珀色) ※絶対に外へ出さない秘密の数 b 混合色(Y+A)を作って送る 公開鍵 A = g^a mod p 混合色(Y+A)と(Y+B)が通過 混ぜた色から元のAやBは分離できない! 混合色(Y+B)を作って送る 公開鍵 B = g^b mod p 届いた(Y+B)に自分のAを足す 完成色:(Y + B + A) 計算:B^a mod p = g^(ab) mod p 2人だけが全く同じ鍵に到達! 盗聴者は(Y+A)と(Y+B)しか持てない 届いた(Y+A)にお店のBを足す 完成色:(Y + A + B) 計算:A^b mod p = g^(ab) mod p

02. 絵の具の代わりにコンピュータが使う「時計の針の算数(剰余演算)」

絵の具のたとえ話を、実際のコンピュータの中で数字として実現するのが「時計の針の算数(モジュロ演算・剰余演算)」です。私たちが普段見ている時計は「12」になると「0(12時)」に戻ります。たとえば今が10時で、そこから5時間進むと「10 + 5 = 15時」ではなく、12で割った余りである「3時(15 mod 12 = 3)」を指します。

この時計の文字盤を、12ではなく「素数 p(たとえば 17時間時計)」に変え、足し算ではなく「同じ数を何回も掛け算する操作(べき乗:3x mod 17)」を行うと、不思議な現象が起きます。

17時間時計の上で「3」を何回も掛け算したときの余り(3x mod 17)

x を 1, 2, 3, 4... と1つずつ増やしていくと、時計の針が指す数字(余り)は次のように激しく飛び回ります。

x = 1 のとき: 31 mod 17 = 3
x = 2 のとき: 32 mod 17 = 9
x = 3 のとき: 33(27) mod 17 = 10
x = 4 のとき: 34(81) mod 17 = 13
x = 5 のとき: 35(243) mod 17 = 5
x = 6 のとき: 36(729) mod 17 = 15

もし素数 p が「17」のような小さな数ではなく、「600桁を超える巨大な素数」だったとしたらどうでしょうか?秘密の数 x がわかっていれば、コンピュータは「繰り返し二乗法」という工夫を使って 0.001秒以下 で余りを計算できます。ところが、結果の余りだけを見せられて「元の指数 x は何だったでしょう?」と逆算(離散対数問題)しようとすると、地球上のすべてのスーパーコンピュータを束ねても宇宙の年齢(約138億年)より長い時間がかかってしまいます。

03. RSA暗号から楕円曲線(Ed25519)、そして耐量子計算機暗号へ

GENERATION 01 / RSA

素因数分解の困難性(RSA暗号)

2つの大きな素数 p と q を掛け合わせて N = p × q を作るのは一瞬ですが、積 N から元の p と q を見つけ出す素因数分解が極めて困難であることを利用した、インターネット初期からの大黒柱です。

GENERATION 02 / ECC & PASSKEY

楕円曲線上の点加算(Ed25519 / P-256)

y2 = x3 + ax + b という曲線の上で点を足し合わせる演算を使います。RSAの10分の1ほどの短い鍵長(256ビット)で同等以上の安全性を発揮し、現在のパスキー(FIDO2)やTLS 1.3の主力として活躍しています。

GENERATION 03 / POST-QUANTUM

多次元空間の格子問題(ML-KEM)

数百次元の空間に並ぶ規則正しい格子点にわずかなノイズを加え、「一番近い格子点を探す」という問題です。量子コンピュータでも効率よく解く方法が存在しない次世代の標準暗号です。

INTERACTIVE CRYPTOGRAPHY LAB

時計の算数(モジュロ演算 3x mod 17)で体験する公開鍵と秘密鍵ラボ

素数 p = 17 / 生成元 g = 3

あなたの秘密の数(a)と、お店側の秘密の数(b)をスライダーで自由に選んでみてください。公開される数(公開鍵 A, B)はそれぞれ違うのに、最後に計算される「2人だけの共通鍵 S」がピタリと一致する様子を実験できます。

ネットに送る公開鍵 A = 3a mod 17
公開鍵 A = 15
ネットに送る公開鍵 B = 3b mod 17
公開鍵 B = 7
実験結果:お互いの公開鍵を受け取って自分の秘密鍵で計算すると…
あなたの手元: Ba mod 17 = 76 mod 17 = 9
お店の手元: Ab mod 17 = 1511 mod 17 = 9

途中の通信を見ている人には「p = 17, g = 3」と公開鍵「A = 15, B = 7」しか見えませんが、あなたとお店の手元には同じ共通鍵 S = 9 が生まれました。実際のインターネット通信では、この素数 p に600桁以上の素数(または256ビットの楕円曲線)が使われています。

よくあるご質問(FAQ)

Q. 「公開鍵(こうかいかぎ)」はインターネット上の誰にでも配ってしまって本当に大丈夫なのですか?

はい、まったく問題ありません。公開鍵はたとえるなら「誰でもパチンと閉めることができるけれど、特別な鍵(秘密鍵)を持っている本人しか開けられない南京錠」のようなものです。ネットショップが世界中の買い物客に「開いた状態の南京錠(公開鍵)」を配り、買い物客がカード番号を入れた箱にその南京錠をかけて送り返せば、途中で誰かが箱を盗み見ようとしても開けることはできません。

Q. なぜ暗号には「素数(1と自分自身でしか割り切れない数)」がこんなにも重要な役割を果たすのですか?

もし時計の文字盤が「12時間(合成数)」だと、針を2時間ずつ進めたときに「2・4・6・8・10・12」と半分しか通らず、周期がすぐに偏ってしまいます。ところが文字盤の目盛りを「17」や「23」のような『素数』にすると、掛け算をして余りを求める操作(べき乗剰余)を行ったとき、1から素数マイナス1までのすべての目盛りを予測不可能な順序でまんべんなく巡回する美しい性質(原始根の存在)が現れます。この性質が、逆算を極めて難しくする暗号の心臓部になっています。

Q. 将来「量子コンピュータ」が実用化されたら、今のインターネットの暗号はすべて破られてしまうのでしょうか?

巨大な素数の掛け算(RSA暗号)や楕円曲線暗号は、将来大規模な誤り耐性型量子コンピュータが登場すると「ショアのアルゴリズム」によって高速に解読されることが理論的にわかっています。そのため現在、世界中の研究者と標準化機関(米国NISTなど)によって、量子コンピュータでも解けない「格子暗号(何百次元もの空間の格子点から最も近い点を探す問題:ML-KEM / ML-DSA)」への移行がすでに始まっており、最新のWebブラウザや通信機器にも順次組み込まれています。

FOR ENGINEERS & CRYPTOGRAPHY RESEARCHERS

FIDO2 / WebAuthn と Ed25519 電子署名の厳密な実装モノグラフはこちら

楕円曲線暗号(P-256 / Ed25519)を用いたパスキー認証の署名検証実装や、ソフトウェアサプライチェーンを守るSBOM電子署名の技術仕様を公開しています。

ご質問・公的制度の活用に関するお問い合わせ窓口

掲載資料に関するご質問・公的制度活用のご案内

本ページの図解や解説内容に関するご質問、経済産業省「SCS評価制度」やIPA「SECURITY ACTION・サイバーセキュリティお助け隊サービス」等の公的制度の確認方法について、落ち着いた参考窓口としてご案内しております。売り込みや営業連絡は一切行いませんので、社内勉強会やご家庭での確認資料としてご自由にご活用ください。

図解・ビジュアルの拡大表示

図表内のテキストもそのまま選択・検索可能です(ベクターSVG描画) 枠外クリックまたは ESC キーで閉じます