毎度お世話になります。
前回解説した理想の暗号「公開鍵暗号」を具体的に解説していきます。

数学のお話が出てきますが「中学生数学」がわかっていれば問題ありません。
わかりやすく解説しますので、面倒くさがらず、読んでください(笑)。

  • 公開鍵暗号の一つに「RSA暗号」と呼ばれるものがある。
  • メッセージは暗号化するために、数字に置き換える必要がある。(置き換えルールはどんなものでもOK。「文字コード」と呼ばれる文字に割り振られた数字を使うことが多いかな。)
  • 以下の2つのことが成り立つ\((p,n,s)\)を作ることができる。
    • メッセージ\(M\)を\(p\)乗して\(n\)で割り算した余りを「暗号」として使える。(「暗号化」したメッセージから元のメッセージを推測するのは現実的には不可能)
    • 暗号化したメッセージを\(s\)乗して\(n\)で割り算した余りは元のメッセージ\(M\)になる

今回解説する「公開鍵暗号」について

前回解説した理想の暗号「公開鍵暗号」は、実は何種類か考え出されています。
(世の中には、頭がいい人がいっぱいいるんですねーー)

その中でも、今回は「公開鍵暗号」の先駆けでもある「RSA暗号」と呼ばれる暗号について解説します。
RSAと聞くと、難しい気分になりますが、発案者のロナルド・リベスト (Ron Rivest)、アディ・シャミア (Adi Shamir)、レオナルド・エーデルマン (Len Adleman) の頭文字をとっただけです。

このサイトでは「公開鍵暗号」といえば「RSA暗号」を指すものだと思ってみてください。

まずは、数学の世界にもっていこう!

暗号って、「明日の午後7時に築地駅1番出口で待ち合わせ」というようなメッセージを、他の人にはわからないように変換することですよね。

でも、このままじゃちょっと問題があります。
というのも、文字のままだと数学のチカラが使えないのです。数字に変換してあげなければいけません。

数字への変換の仕方は何種類も用意されていますので、ここではあまり深く説明しません。
(文字コードと呼ばれるものを利用することが多いと思います。文字コードについてはこちらも参考にみてください)


例えば、文字の1つ1つに番号を割り振って、数字にしてしまうのもありです。
(「明→9、日→1、の→5」とすれば「明日の」は「915」という数字になります。あとは、メッセージを受け取った人が「915」を変換表に従って「明日の」という風に変換すれば終わりです)

ちなみに、これから解説する「暗号」では上の例でいうと「915」という数字を暗号化するので、「明→9、日→1、の→5」という変換ルールがみんなにバレても問題ありません。
「915」という数字がみんなにバレなければいいのです。

ということで、ここからは、なんらかの方法でメッセージは数字に置き換わっているものとして考えてください。

そして、このメッセージを数字に置き換えたものをこのサイトでは「\(M\)」と書きます。(中身は915とか、301といったただの数字です)。

具体的な暗号方法を大公開!

でも、「メッセージを数字に変換した「\(M\)」を、「公開鍵(\(p\))」を使って暗号化し、その暗号は「秘密鍵(\(s\))」を使わないと元に戻せない」なんて都合のよい方法はあるのでしょうか?

ちなみに、\(p\)は「Public(公開)」の頭文字で、\(s\)は「Secret(秘密)」の頭文字です。そして、両方とも、実際はただの数字(10とか55とか)だということを忘れないでください。。


実は、この暗号の基礎となる法則が300年前のスイスに住んでいたレオンハルト・オイラーという数学界の超有名人によって発見されています。
その名も「オイラーの定理」とよばれるもので、この定理を利用すると次のことがわかるんです(なぜそうなるかはちゃんと説明しますからね)。

  • ある特殊な数字の組み合わせ「公開鍵(\(p\))と、秘密鍵(\(s\))と、謎の数字(\(n\))」を作ると、次のことが成り立つ
  • 「メッセージ(\(M\))を\(p\)乗して\(n\)で割った余り」を暗号にすることができる。(\(p\)や\(n\)を知っていたとしても、暗号から元の(\(M\))を推測することはできない)
  • 暗号を\(s\)乗して\(n\)で割った余りは、元のメッセージ\(M\)に等しくなる

これって、公開鍵暗号にぴったしな特徴じゃないですか?
だって、「メッセージ(\(M\))を\(p\)乗して\(n\)で割った余り」が、元のメッセージ\(M\)からは想像できないようなでたらめな数字(\(x\))になるんです。
しかも、\(p\)や\(n\)がみんなにバレたとしても、でたらめな数字(\(x\))から元のメッセージ\(M\)を計算することができないなんて、素晴らしい!
(\(p\)乗するというのは、\(M\)を\(p\)回掛け算するということですよ)


まさに、これはメッセージ(\(M\))を暗号化して、でたらめな数字(\(x\)に変換したことになりますね。


さらに、暗号を受け取った人だけが知っている秘密鍵(\(s\))を使って、でたらめな数字(\(x\))を\(s\)乗して\(n\)で割り算すると、その余りが\(M\)になるんです。

この解読は、これは秘密鍵(\(s\))を知っている人しかできません。

まさに、これはでたらめな数字になった暗号(\(x\))から元のメッセージ(\(M\))を解読したことになりますね。

次回のお知らせ

さて、なんだか理想の暗号がわかったようで、具体例がないと不思議な感じがするだけですね。
ということで、次回は具体例を使って、今回解説した内容を見ていきましょう。