毎度お世話になります。
前回解説した理想の暗号「公開鍵暗号」を具体的に解説していきます。
数学のお話が出てきますが「中学生数学」がわかっていれば問題ありません。
わかりやすく解説しますので、面倒くさがらず、読んでください(笑)。
(世の中には、頭がいい人がいっぱいいるんですねーー)
その中でも、今回は「公開鍵暗号」の先駆けでもある「RSA暗号」と呼ばれる暗号について解説します。
RSAと聞くと、難しい気分になりますが、発案者のロナルド・リベスト (Ron Rivest)、アディ・シャミア (Adi Shamir)、レオナルド・エーデルマン (Len Adleman) の頭文字をとっただけです。
このサイトでは「公開鍵暗号」といえば「RSA暗号」を指すものだと思ってみてください。
でも、このままじゃちょっと問題があります。
というのも、文字のままだと数学のチカラが使えないのです。数字に変換してあげなければいけません。
数字への変換の仕方は何種類も用意されていますので、ここではあまり深く説明しません。
(文字コードと呼ばれるものを利用することが多いと思います。文字コードについてはこちらも参考にみてください)
例えば、文字の1つ1つに番号を割り振って、数字にしてしまうのもありです。
(「明→9、日→1、の→5」とすれば「明日の」は「915」という数字になります。あとは、メッセージを受け取った人が「915」を変換表に従って「明日の」という風に変換すれば終わりです)
ちなみに、これから解説する「暗号」では上の例でいうと「915」という数字を暗号化するので、「明→9、日→1、の→5」という変換ルールがみんなにバレても問題ありません。
「915」という数字がみんなにバレなければいいのです。
ということで、ここからは、なんらかの方法でメッセージは数字に置き換わっているものとして考えてください。
そして、このメッセージを数字に置き換えたものをこのサイトでは「\(M\)」と書きます。(中身は915とか、301といったただの数字です)。
ちなみに、\(p\)は「Public(公開)」の頭文字で、\(s\)は「Secret(秘密)」の頭文字です。そして、両方とも、実際はただの数字(10とか55とか)だということを忘れないでください。。
実は、この暗号の基礎となる法則が300年前のスイスに住んでいたレオンハルト・オイラーという数学界の超有名人によって発見されています。
その名も「オイラーの定理」とよばれるもので、この定理を利用すると次のことがわかるんです(なぜそうなるかはちゃんと説明しますからね)。
これって、公開鍵暗号にぴったしな特徴じゃないですか?
だって、「メッセージ(\(M\))を\(p\)乗して\(n\)で割った余り」が、元のメッセージ\(M\)からは想像できないようなでたらめな数字(\(x\))になるんです。
しかも、\(p\)や\(n\)がみんなにバレたとしても、でたらめな数字(\(x\))から元のメッセージ\(M\)を計算することができないなんて、素晴らしい!
(\(p\)乗するというのは、\(M\)を\(p\)回掛け算するということですよ)
まさに、これはメッセージ(\(M\))を暗号化して、でたらめな数字(\(x\)に変換したことになりますね。
さらに、暗号を受け取った人だけが知っている秘密鍵(\(s\))を使って、でたらめな数字(\(x\))を\(s\)乗して\(n\)で割り算すると、その余りが\(M\)になるんです。
この解読は、これは秘密鍵(\(s\))を知っている人しかできません。
まさに、これはでたらめな数字になった暗号(\(x\))から元のメッセージ(\(M\))を解読したことになりますね。
ということで、次回は具体例を使って、今回解説した内容を見ていきましょう。
前回解説した理想の暗号「公開鍵暗号」を具体的に解説していきます。
数学のお話が出てきますが「中学生数学」がわかっていれば問題ありません。
わかりやすく解説しますので、面倒くさがらず、読んでください(笑)。
- 公開鍵暗号の一つに「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\))を解読したことになりますね。
次回のお知らせ
さて、なんだか理想の暗号がわかったようで、具体例がないと不思議な感じがするだけですね。ということで、次回は具体例を使って、今回解説した内容を見ていきましょう。