いぬおさんのおもしろ数学実験室

おいしい紅茶でも飲みながら数学、物理、工学、プログラミング、そして読書を楽しみましょう

デフィーヘルマン鍵交換、『暗号技術入門 第3版』紹介

 『暗号技術入門 第3版』(結城 浩2015ソフトバンククリエイティブ) を紹介します。これは面白い本でした!! 暗号技術全般について大変分かりやすく正確に解説しており、暗号に関する体系的な知識が得られます。ぼくとしては特に暗号技術における乱数の大切さについて述べている部分、PGP(フィリップ・ジマーマンの開発した暗号ソフト)の話あたりが新鮮でした。初版を読みましたが、今は第3版が出ています。第3版には量子コンピュータ、量子暗号について簡単に触れている部分もあります。今回は本書に載っているデフィーヘルマン鍵交換について書きます。

暗号技術入門 第3版

暗号技術入門 第3版

 

 アリスとボブが2人で秘密の整数を決めたいと思っています(暗号の話ではよくアリスとボブが出てきます)。例えば2人で使う暗号の鍵とかです。離れたところに住んでいる場合など、鍵の共有は大変な問題になります。誰にも秘密を漏らさずに相手に届けなければならないのです。今、2人は北海道と九州にいるとします。近くでヒソヒソと打ち合わせはできません。電話でなんとかしましょう。しかし電話は盗聴されている可能性がありますから、「じゃあ14350にしよう!」というわけにはいきません。「大学時代のC君のケータイ番号なんてどう?」では? これもダメ。こんなの、知っている人が盗聴すればすぐバレます。実は……会話が世界中に筒抜けになっていても可能な、巧妙な方法があるのです。デフィー・ヘルマン鍵交換と言います。「これからデフィー・ヘルマン鍵交換を使って暗号の鍵を決めます!」と世界中に宣伝しても秘密は保たれます。
 まず、例えば13と2という数を選びます。これは2人で相談して決めますが第三者に知られてもかまいません。アリスは1~11の中から数を選びます。例えば9(=Aとする)を選びます。これはアリスだけの秘密です。ボブも同じく例えば7(=Bとする)を選びます。これも、ボブだけの秘密です。最初に決めてあった13と2を使い、アリスは2^{A} = 2^{9} = 512を13で割った余り、5をボブに送ります。ボブは同じように2^{B} = 2^{7} = 128を13で割った余り、11をアリスに送ります。ボブは送られてきた5を使い、5^{B} = 5^{7}を計算します。これを13で割った余りは8になります。アリスは送られてきた11を使い、11^{A} = 11^{9}を計算します。これを13で割った余りは8になります。これで2人は8を共有できました。
 分かりづらいかも知れませんのでまとめておきます。

f:id:Inuosann:20191101231807p:plain

実際には各段階で13で割った余りを求めますが、流れは上の通り。すごく単純です。指数法則によれば(2^{9})^{7} = (2^{7})^{9}ですから、2人は共通の整数を手に入れることになるのです。
 2人の間でやりとりされるのは13、2、5、11だけですが、これだけの情報から8を計算することは大変難しく(効率的に求める方法が見つかっていない。「有限体上の離散対数問題」と言われている)、第三者は鍵を知ることができません。実際には13や2の代わりにもっと大きな数を使いますが例なのでいいでしょう。

 暗号に興味のある人は是非!!