皆さん、こんにちは!
今回は、RSA暗号について紹介したいと思います。

RSA暗号って何?って人もちゃんとわかるように、まずは5分でわかる概要編です。
ちょっと読む時間はないけど、気になるなぁという人は、紹介ムービーを見てくださいね。




1分目 「共通鍵暗号」と「公開鍵暗号」

暗号には大きく「共通鍵暗号」と「公開鍵暗号」の2種類があります。

「共通鍵暗号」とは、「暗号化するための手順を知ると、暗号を解読することもできてしまう」種類の暗号を言います。
例えば、「文章中の各文字を3文字づつずらす」という暗号(こんにちは→すうのとへ)は、この手順を知ってしまえば解読もできます。

一方、「公開鍵暗号」とは「暗号化するための手順を知っても暗号を解読することができず、解読には秘密の手順を知る必要がある」種類の暗号を言います。
この「公開鍵暗号」には「楕円曲線暗号」や「RSA暗号」などがありますが、ここでは「RSA暗号」について解説します。

「共通鍵暗号」は暗号を作った相手から「暗号化の手順」を教えてもらわないと解読できないですが、「公開鍵暗号」は暗号化する手順をみんなに教えていれば、「秘密の手順」は誰にも教えなくても暗号を解読することができます。

それゆえ、「公開鍵暗号」は「共通鍵暗号」よりも「安全」といえます。


ここで解説した内容は以下の章で詳細を解説しています
  1. 理想の暗号
  2. これまでの暗号の課題
  3. 鍵の配送問題を解決する公開暗号鍵方式

2分目 RSA暗号を支える数学

まず、RSA暗号を使うにはメッセージを「数字」に変換します。(例えば、「あ」を「11」、「き」を「22」としたら、「あき」は「1122」になるといった感じです)
変換方法はどんなのでもいいですが、「暗号の送り手」と「暗号の受け手」が同じ変換表をもつようにしましょう。
この変換表は誰にバレてもかまいません。むしろ、世の中に広く公開されている変換表(文字コード表)があるので、それを使いましょう。


さて、RSA暗号は「オイラーの定理」と呼ばれる数学の定理を使って成り立っています。
「オイラーの定理」を使うと、次の2つの事実が成り立つ、特殊な(p,n,s)の数字の組み合わせを沢山つくることができることがわかります。


事実その1 「ある数字をp乗した後でnで割った余り」からは元の数字を推測することは難しい
事実その2 「ある数字をp乗した後でnで割った余り」をs乗した後でnで割った余りは、元の数字と同じになる


ここで解説した内容は以下の章で詳細を解説しています
  1. 公開鍵暗号(RSA)を実現する数学
  2. 公開鍵暗号(RSA)の仕組み:「オイラーの定理」
  3. 「オイラーの定理」の証明

3分目 RSA暗号との関係

先ほどの2つの事実を見ると、うまく暗号の要素を満たしていることがわかります。

例えば、送りたいメッセージを「16」とし、(p,n,q)の組み合わせを、(5,34691,13709)だとします。
このとき、先ほどの「事実1」を見てみると、次の通りです。

16を5乗した後で34691で割った余りは、7846になります。

確かに、7846から16を推測しようと思っても難しそうですよね。まったく別の数字になっています。


今度は、「事実2」をみてみましょう。

7846を13709乗した後で34691で割った余りは・・・・・見事「16」になります!(計算すると本当になるんですよ)

元のメッセージ「16」を暗号化した「7846」を全世界の人間に伝えたとしても、元のメッセージ「16」は、秘密の数字「13709」を知っている人しか導き出すことはできません。

こうすることで、秘密の数字「13709」を知っている人以外には元のメッセージを推測されることなく、安全に「16」という数字を伝えることができます。


ここで解説した内容は以下の章で詳細を解説しています
  1. 公開鍵暗号(RSA)の具体例
  2. 大きな数の累乗の余りを計算する方法
  3. 再び公開鍵暗号(RSA)の具体例

4分目 p,n,sの作り方

まずは、nから。
nは、2つの素数を掛け算して作ります。
素数というのは、1とそれ自身以外約数を持たない数のことです。

先ほどの例で使った34691というのは、113という素数と、307という素数を掛け算して作りました。

次に、pとsですが、先ほど選んだ2つの素数をaとbと置くと、p×sの値が、(a-1)×(b-1)の値の「倍数」になるように調整して選びます。
調整は難しいのですが、上手に選ぶとpとsを選ぶことができます。


ここで解説した内容は以下の章で詳細を解説しています
  1. 「オイラーの定理」から公開鍵暗号(RSA)を産み出そう

5分目 RSA暗号の実際

暗号をやりとりしたい人は、全員が(p,n,s)の数字の組み合わせを作ります。
素数は無限にあるので、初めに素数を選ぶときに、とっても大きな桁数の素数を選択すれば、他の人と同じ(p,n,s)になることは滅多にありません。

次に、それぞれが自分のpとnを他の人に知らせます。
(自分のホームページ上に載せるとか、メールで知らせ合うとかします)

メッセージを送りたい人は、自分のメッセージを数字に変換した上で、メッセージの送り先の人のpとnを調べ、「メッセージをp乗してnで割った余り」を求めます。
こうやって計算した数字は、元のメッセージを推測できないほどデタラメなものになるんでしたよね。

ここまで変換すると、安心して暗号化後のメッセージを相手に送ることができます。
(仮に他人にこの暗号化後のメッセージが漏れたとしても、わかりません)


この暗号を受け取った人は、自分のsを使って、「受け取った暗号をs乗してnで割った余り」を計算します。
すると、暗号を受け取った人は無事、元のメッセージを見ることができます。

他人は、受け取った人のsを知らないので、元のメッセージを見ることができません。


ここで解説した内容は以下の章で詳細を解説しています
  1. 公開鍵暗号(RSA)のまとめ
  2. 公開鍵暗号(RSA)は安全?

終わりに

簡単にRSA暗号の概要を解説しましたがいかがでしょうか。
なんでそうなるの???と思われた方は「詳細な解説を見る」をクリックしてくださいね。