
INDEX
皆さん、こんにちは。中学生の数学を担当している原田です。
突然ですが、インターネットの通信って、何で守られていると思いますか?
ウイルス対策ソフトでしょうか。それともスーパーコンピュータでしょうか。実はその答えの一つが、中学生が数学で習う「素数」なんです。教科書に出てくるあの素数が、実はコンピュータやインターネットの世界でも大活躍しています。
補習校のサイトの自己紹介で「素数」と「暗号」という言葉を使ったものの、それ以上の説明をする機会がなかったので、今回はそれについて書いてみることにしました。「昔は数学が苦手だったなあ」という方も、ぜひご一読ください。
暗号って?
暗号と聞いて真っ先に頭に浮かぶのは、合言葉ではないでしょうか。そう、相手に特定の言葉を投げかけ、その返答によって敵か味方かを判別するというものです。「山」と言ったら「川」と応える、というのが有名ですね。
他にも、以下のような合言葉が知られているのではないでしょうか。
- 「風」→「谷」
- 「こんにちは、お急ぎですか」→「別に急いでいませんよ」
- 「砂漠に蝶は飛ぶのか」→「砂漠に飛ぶのはサボテンの棘」
※後半の合言葉の元ネタが分かった方、ぜひお声がけください!
さて、この合言葉の仕組みでは、相手が敵か味方かを判別することしかできません。しかも、もし相手が合言葉を事前に知っていたら、味方のふりをすることもできてしまいます。
さらに困ったことに、味方だと思って一度アジトに招き入れてしまったが最後、そこでの会話はすべて敵に筒抜けです。えーっ!合言葉じゃ全然だめじゃん!!
……でも大丈夫、安心してください!
皆さんがインターネットで通信をするときには、メッセージやデータは第三者に解読されないように暗号化して送信するのが一般的です。そしてそのときに使われるのは、先に紹介したような古典的な合言葉ではありません。現在の暗号技術を使えば、みんなが見ている前でも、堂々と、知らせたい相手にだけ秘密のメッセージを送ることが可能です。今やほとんどの Web サイトは、そのような方法で暗号化された通信しか受け付けないようになっています。
インターネットと暗号
さて、ここでようやく素数の登場です。
素数にはいくつかの不思議な特徴があり、これまで多くの数学者を魅了してきました。特に、「整数全体を素数で割った余りの集合」には面白い性質があり、長年研究されてきました。それらの研究から生まれたものの一つが、現在のインターネットでも使われている RSA ※1 暗号です。この暗号方式について、少し詳しく見ていきましょう。
この RSA 暗号方式は、公開鍵暗号と呼ばれる種類のもので、メッセージ(データ)を暗号化するときには公開鍵という誰でも知ることができる情報を使い、それを元に戻すときにだけ秘密鍵が必要になる、というものです。つまり、だいじなものを箱にいれて鍵を掛けることは誰にでも出来るけれども、その箱を開けることが出来るのは、開封専用の秘密の鍵を持っている人だけ、ということですね。
さて、ここでいう鍵とは具体的に何のことでしょうか。実はその正体は巨大な数字です。RSA 暗号では、まず巨大な 2 つの素数 p と q をランダムに選びます。現在主流の方式では、それぞれ 300 桁くらい※2の大きさの数を選びます。何を隠そう、この素数 p と q が秘密鍵です。
そして次に、 N = pq という数を計算して公開します。この N が公開鍵です。( 実際には、もう一つの値とペアで公開しますが、今回の説明では省略します。 )
この N を使えば誰でも「鍵をかける」ことが出来ます。具体的には、元の値(=データ)にある計算を施し、それを N で割った余りを求めます。なんと、この余りこそが暗号化されたデータなのです。商は不要で、余りだけを使うのがポイントです。まるで北京ダックのようですね。
では、どうやって「元の値を取り出す」のでしょうか。ここで秘密にしてある 2 つの素数 p と q の出番です。この 2 つの数を使ってある計算をすると、先程の割り算の余り(=暗号化されたデータ)から、なんと元の値を復元する(=解読する)ことが出来るのです。N だけではダメで、どうしても素数 p と q が必要になります。
ここで疑問に思った人はいませんか?「N が分かるなら、因数分解すれば p と q は分かるでしょ?方法は中学生のときに習うよね。」そう、そのとおりです。そしてそのことこそが、現代暗号の安全性の根拠となる部分なのです。実は、巨大な数の因数分解は、コンピュータを使っても短時間で解くことが出来ない、非常に難しい問題 ※3 なのです。
現在のインターネットにおける RSA 暗号では、2048 ビットの鍵を使うことが推奨されています。この大きさの数の因数分解は、現代のスーパーコンピュータの計算能力を総動員しても、数億年以上を要するとされています。そのため、十分な長さの鍵を使った暗号は安全だと言えるのです。
余談ですが、日本のアニメ映画「サマーウォーズ」の主人公・健二くんが一晩で解いたのは、2056 桁の RSA 暗号という設定だそうです。もしこれが事実なら、健二くんの脳は数学オリンピックレベルどころか、現代のスーパーコンピュータを軽く凌駕する計算処理能力を持っていることになります。もはや人を超え、神に近い存在と言えるでしょう。しかし真に驚くべきは、劇中で後に判明する、一晩で数十人の人間がこれを解読したという事実。神に近い存在、多すぎやしませんか?
デジタル社会が崩壊する日
先ほど、スーパーコンピュータでも因数分解は難しいと書きましたが、もしかすると量子コンピュータを使えば簡単に解けるのではないか、という可能性も指摘されています。
現段階ではまだ研究段階で、本当に解ける日が来るのかどうかは誰にも分かりません。神( または健二くん )のみぞ知る、というところでしょうか。
しかしもし、未来のコンピュータが巨大な数の因数分解を一瞬で計算出来るようになる、あるいは超天才が現れて因数分解を高速で実行できる革新的な方法を発見したとしたらどうなるでしょう。
インターネットの通信が安全であることを前提として発達してきた
- ネット銀行
- 電子決済
- オンラインサービス
などは、大きなリスクを抱えることになります。そうなると、現在のデジタル社会は大きな変化、あるいは崩壊の危機を迎えることになるのかもしれません。
最後に
どうでしたか?中学生で習った「素数」に、まさかこんな形でお世話になっているとは思わなかったのではないでしょうか。
いまや私たちの生活はインターネットなくして成立しないと言っても過言ではありませんが、それらのサービスを安心して利用できるのは、過去の数学者達が見出した素数の性質のおかげだったのです。
数学の教科書で見かけたあの数字が、世界中の通信を守っている。そんなことを、時々思い出していただけたら嬉しいです。
※1
ちなみに、この RSA という名前にたいした意味はありません。この仕組みを考案した3人の暗号学者の頭文字( Rivest, Shamir, Adleman )です。ネーミングにはあまり興味のない 3人だったようです。
※2
ちなみに、10 進数で 300 桁というのは、ゼロが 300 個並ぶという意味ですから、中学生らしく数式で書くと 10300になります。これがどれだけ巨大な数字なのか全くピンとこないと思いますので、皆さんがよく知っている単位と比べてみましょう。
- 1 メガ=100 万=106=1,000,000
- 1 ギガ=10 億=109=1,000,000,000
- 1 テラ=1 兆=1012=1,000,000,000,000
- 1 ペタ=1000 兆=1015=1,000,000,000,000,000
- 1 エタ=100 京=1018=1,000,000,000,000,000,000
うーん、全く足りませんね。比較的認知度の高い単位である「京」も全く勝負になりません。2 番を目指してるようではダメなんですかね。こうなったら漢字文化圏における単位の最高峰の一つ、みんな大好き「無量大数」に登場してもらいましょう。
- 1 無量大数=1068 = 100,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000
⋯。これでも届く気配がありません。こうなったら奥の手です。知名度はかなり低いですが、Google の語源にもなった googol ( グーゴル ) に登場してもらいましょう。
- 1 グーゴル=10100=
10,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000
⋯⋯。まだまだ目標の 10200分の 1 です。巨大な数字を体感するって難しいですね。自分で始めておいて何ですが、そろそろ単位の比較、勘弁してもらっても良いでしょうか?
※3
因数分解のやり方自体は、中学生でも習うとおり簡単です。ある数 n を因数分解するには、1から順に、最大で√n までの整数で割り切れるかどうか試せば良いのですから。ただしこの方法では、10600のような巨大な数を因数分解するには、割り切れるどうかを、10300回も試す必要があります。2025 年になって、ようやく人類は 1 EFLOPS(=1 秒間に1018回の浮動小数点演算を行う能力)の計算能力を手にいれましたが、仮に 1 秒間に 1020回の割り算が可能だとして、どのくらいの時間がかかるのでしょうか。
10300÷1020=10280 [秒] > 10273 [年]
なんと 10273年以上!現在我々がいる宇宙は、約 138 億年前(=1.38×1010 年前)に誕生したとの説が主流ですので、無数の宇宙が出来ては消滅するくらいの時間がかかりそうです。
実際には、より効率的な方法も考案されてはいますが、それでも数億年以上という非現実的な時間を必要とします。ということは、当面の間、現在の暗号方式は安全であるということです。これで今夜からは枕を高くして寝れますね!
- 原田 一泰
- メルボルン補習校 中学部担任
2024年7月よりメルボルン補習校にて教員として勤務。
数学の楽しさ・面白さを生徒たちに伝えるべく日々奮闘中。





