暗号について次男とおしゃべりする(思い出の日記)
※全文を公開している「投げ銭」スタイルのノートです。
次男「ねえお父さん。素数を計算するプログラムって作れるの?」
私「素数を計算するってどういう意味かな?」
次男「だから、何番目の素数っていうと、それを計算するの」
私「そうだね、作れると思うよ」
次男「でも、それってまずくない? だって、銀行なんかの暗号が解けちゃう。素数の謎が解けたら暗号も解けるんでしょ?」
私「そう簡単な話じゃないよ。まず、何番目の素数を計算しなさいと言われて答えるようなプログラムを書くことは難しくはない。それから、そのプログラムが実際に素数を作るのもすぐにできる。素数が小さければね。でも、とても大きな素数まで順番に作っていくのはとても時間が掛かってしまう」
次男「でも、コンピュータは速いよ」
私「そうだね。でも、無限の速さじゃないから。で、暗号を解読するのに、ある大きな数が『どんな素数の掛け算でできているか』が重要な役目を持つことがある」
次男「?」
私「とても大きな数が与えられて、『この数はどんな素数の掛け算でできているか?』を求めるのはとても難しい問題なんだよ」
次男「でも、2で割ってみて、3で割ってみて、…ってずっとやればいいんでしょ?」
私「その通り。けれど、とても大きな素数までずっと試すのは、すごく大変で、長い時間がかかる」
次男「でも、いつかはわかるよ」
私「うん。いつかはわかる。けどね、暗号がたとえば300億年後に解けたとしてもあまり意味はないよね。 そのとき、地球が存在しないかもしれないし」
次男「そうか…でも、じゃ、どうやって暗号が作れるの? 素数を作るのが難しいんでしょ?」
私「そうだね。ある数があって『どんな素数の掛け算でできていますか?』に答えるのは難しいよ。 でも、大きな素数をぽんと作るのはそれほど難しくない。ランダムに大きな数を作っておいて、それが素数かどうかを判定すればいいんだよ。素数じゃなかったら、また別の数を作って試す。そうやって、大きな素数を二つ作り、掛け算する。『二つの素数を作って掛け算する』というのはそれほどたいへんじゃない。でもその逆の『この数はどんな二つの素数の掛け算でできていますか?』に答えるのはとても難しい」
次男「へー」
私「暗号の中には、こんなふうに『ある計算は易しいけれど、逆の計算は難しい』という性質をうまく使っているものがあるんだよ」
* * *
※2010年2月14日の「結城浩の日記」から。
http://www.hyuki.com/d/
※結城浩はメールマガジンを毎週発行しています。あなたも購読してみませんか。
http://www.hyuki.com/mm/
※Photo by webtreats.
https://www.flickr.com/photos/webtreatsetc/4185326903/
※以降に文章はありません。「スキ」や「投げ銭」での応援を歓迎します。
ここから先は
¥ 100
あなたからいただいたチップは、本やコンピュータを買い、多様なWebサービスに触れ、結城が知見を深める費用として感謝しつつ使わせていただきます! アマゾンに書評を書いてくださることも大きな支援になりますので、よろしくお願いします。 https://amzn.to/2GRquOl