機械学習理論研究室 ← AI体験の一覧

戻せないかけ算

会ったこともない相手と、合言葉を決めないまま秘密のやりとりができます。支えているのは「かけ算は一瞬、その逆は途方もなく遅い」という一方通行の性質です。鍵を自分で作って、そして自分で破ってみます。

初めて開いた店に、カード番号を打ち込む

通販のサイトで買い物をします。いま初めて開いた店です。店の人と会ったことはありませんし、番号を隠すための合言葉を前もって決めたこともありません。それでもカード番号は、途中の誰にも読まれずに店まで届きます。

昔からある暗号は、同じ鍵で閉めて、同じ鍵で開けます。これを共通鍵暗号(かける鍵と開ける鍵が同じ暗号)といいます。手紙を送る前に、同じ鍵を相手に渡しておかなければなりません。

その鍵を、どうやって渡すのでしょうか。鍵を安全に渡せるなら、最初から手紙もそのやり方で渡せばよいはずです。

もう一つ困ることがあります。相手ごとに別の鍵が要るので、みんなが互いに連絡しようとすると、鍵の数がふくらみます。

やりとりする人数必要な鍵の数(共通鍵暗号)公開鍵暗号なら

人数が10倍になると、鍵の数はおよそ100倍になります。ネット通販の店が客ひとりずつに別の鍵を配って管理するのは、現実的ではありません。

開いたままの南京錠を、配ってしまう

鍵を渡さずに秘密を送る方法

開いたままの南京錠を、誰にでも配ります。錠そのものは隠しません。これが公開鍵です。

手紙を箱に入れ、配られた錠をパチンと閉めます。閉めるのは誰でもできます。

開けられるのは、錠を作った本人だけです。手元に残した鍵を秘密鍵といいます。

閉める道具と開ける道具を別々にする。それだけで、鍵を前もって渡す必要がなくなります。これが公開鍵暗号です。1977年に発表されたRSA暗号は、その代表です。

錠を配っても平気なのは、配った錠から開ける鍵を作れないからです。RSA暗号では、この「作れない」を数の性質で実現します。ここから先がその中身です。

絵が、そのまま砂嵐になる

同じ鍵の組で、暗号化と復号をしています

写真は、点ひとつひとつの明るさを表す数の並びです。その数を1つずつ暗号にかけると、絵は消えます。秘密鍵で戻すと、元の絵が現れます。

元の絵(送りたいもの)
公開鍵で暗号にしたもの
秘密鍵で戻したもの
元の絵と、戻した絵は完全に同じ

この3枚は、いまこの画面の中で計算しています。真ん中の絵は、途中の通信を盗み見た人に見えているものです。

小さい数で、ひととおり通してみる

RSA暗号の全部がこの表に入っています

本物の鍵は600桁を超えますが、仕組みは小さい数でも変わりません。素数を2つ選ぶところから、暗号にして、戻すところまでを並べます。

手順計算意味

送る側は y = xe mod n(xをe回かけて、nで割った余り)を計算するだけです。受け取る側は x = yd mod n で元に戻します。使う数が違うだけで、やっていることは同じ形です。

講義ノート(データエンジニアリング演習 第10回)では、eをb、dをaと書いています。ここでは公開鍵の指数をe(encrypt)、秘密鍵の指数をd(decrypt)と書きます。