コラム

SSLってどんな技術でできてるの?~鍵を使った暗号化その3 公開鍵暗号編①~

筆者:古川 雄太

サーバ
セキュリティ
Web

2017.01.11


前回のコラムでは共通鍵暗号方式の1つ、DES について紹介しました。今回のコラムでは、公開鍵暗号方式の一つ、RSAについて紹介します。RSAはSSL/TLSで採用されている公開鍵暗号方式です。これまでのコラムで紹介した共通鍵暗号方式と組み合わせることで、SSL/TLSは成立します。


RSAとは?


RSA はSSL/TLSで採用されている 公開鍵暗号方式 です。

RSA Rivest-Shamir-Adleman の略 で、これはRSAの仕組みを発明した3人の名前の頭文字 をとったものになります。

以前のコラムで紹介した「公開鍵暗号方式」覚えていますか?
公開鍵暗号方式とは、暗号化するための鍵 と複合化するのための鍵が異なる暗号化の方式 です。
暗号化するための鍵を 公開鍵、複合化するための鍵を 秘密鍵 と呼びます。

共通鍵暗号方式ではなく、公開鍵暗号方式を利用すると、どのようなメリットがあるのでしょうか。それは、データを暗号化をする通信相手に鍵を共有する際の鍵配送問題を解決することでした。

 

詳しくはコラム「SSLってどんな技術でできてるの?~鍵を利用した暗号化技術その1~」をご覧ください。

RSAを使用した暗号化のための計算式


今回のコラムでは、具体的に RSAではどのような方法で暗号化を行っているか を解説していきます。
ポイントは、何度も出てきた 鍵 と呼ばれるものです。今回のコラムは、鍵と呼ばれるものは一体何なのか を理解していただくことが目的となります。

まず、 RSAを使用した暗号化のための計算式をご紹介します。
RSAを使用した暗号化のための式

計算式で出てくる各記号の意味は、

… Ciphertext (暗号文)
… Plaintext (平文)
E …Encryption (暗号化)
N …Number (数)
mod …Modulo (除法の法数のことで、割った余りを求めるための式)

この中の、と 、これが重要な記号となります。実は E と N の二つの数の組み合わせが 公開鍵  なのです!

暗号化のための式

RSAを使用した復号化のための計算式


逆に、復号化のための計算式をご紹介します。

復号化のための式 

計算式で出てくる各記号の意味は、下記の通りです。

… Ciphertext (暗号文)
… Plaintext (平文)
D …Decryption (復号化)
N …Number (数)
mod …Modulo (除法の法数のことで、割った余りを求めるための式)

この中の、と ですが、これも重要な記号となります。
なんとなくお気づきだとは思いますが、実は D と N の二つの数の組み合わせが 秘密鍵 なのです。

復号化のための式

補足ですが、暗号化、復号化の各式に登場する mod というのは、割り算の余りを導き出すための計算式 で、例えば12 mod 8であれば、12割ることの8の余りが解なので、4が答えです。

RSAの式を理解しよう


次に、暗号化の式を理解しましょう。

暗号化のための式 を日本語で説明すると、平文を【公開鍵の要素 E 】回かけて、【公開鍵の要素 N 】で割った余りが暗号文 であるといえます。
つまり、公開鍵の各要素である、EとNの数字が分かれば、だれでも簡単に暗号化ができる というころです。

次に、復号化の式を理解しましょう。

復号化のための式 暗号文を【秘密鍵の要素 D】回かけて、【秘密鍵の要素 N 】で割った余りが平文であるといえます。つまり、秘密鍵の各要素である、DとNの数字が分かれば、だれでも簡単に復号化ができる ということです。

E、D、Nはどのように導き出すのか


それでは、先にご紹介した式の記号に代入する数を、どのように決めていくのか確認しましょう。
公開鍵と秘密鍵のキーペアを作成する際は、N→E→Dの順序で数を決定していくので、公開鍵が最初に作成され、その後、秘密鍵が作成されます。

①    N を求める
N = p × q
p , q … 十分大きな素数

ここの と 素数 である必要があり、このpとqの長さが小さすぎると暗号の解読が楽になってしまうので、注意が必要です。ちなみに素数とは、 1より大きい整数で、1とその数以外で割り切れない数のことで、3や5などの数字のことです。6は2や3で割りきれてしまうので、素数ではありませんね。

②    L を求める
はここまでで出てきていませんが、キーペアを作成する際に必要になるもの です。Lは p から -1 した数と、q から -1 した数の最小公倍数 となります。

③    Eを求める
1より大きく、Lより小さい数 です。また、EとLとの最大公約数は1 となる必要があります。

④    D を求める
1より大きく、Lより小さい数 です。また、E × D mod L が 1 になる必要があります。

ここまでで、必要な数はすべてそろいました。記号だらけでよくわからないですか?実際に簡単な数で試してみましょう。
小学生の算数の知識だけで、実は計算できるんですよ。

実際にやってみよう


①    N を求める
… 2
… 5

pとqは素数である必要があります。ここではこの後の計算を楽にするために、非常に簡単な素数で計算をしていきます。

N = p×q
   = 2×5
   = 10

これで、公開鍵と秘密鍵に共通する、Nの値が決まりました。

②    L を求める
L = p - 1 とq – 1 の最小公倍数
   = 1 と 4 の最小公倍数
   = 4

これで、公開鍵、秘密鍵で使用するEとDを求めるために必要なLの値が決まりました。

③    E を求める
E = E と L の最大公約数が1になる値かつ素数
   = 3

これで、E と N の値が決定したので、公開鍵の作成は終了です。

④    D を求める
D = E×D mod L = 1 になる値
   = 11

これで、DとNの値が決定したので、秘密鍵の作成は終了です。
ここまでで公開鍵と秘密鍵のキーペアが生成されました。

公開鍵…E=  3 , N=10
秘密鍵…D=11 , N=10

暗号化を行うための公開鍵は広くクライアントに公開できますが、復号化のための秘密鍵はサーバ側で盗まれないように強固に守る 必要があります。
公開鍵と秘密鍵の共通値であるNは誰でも知ることができるので、Dの値をしっかり守る ということですね。

試しに計算してみましょう


では、先ほど求めた公開鍵と秘密鍵を使用して、暗号化および復号化を行ってみます。

まず、暗号化の処理 をしてみます。
今回は、平文を 2 とします。これが、だれにも盗まれずに守りながら送りたいデータそのものですね。

これで、平文2 が暗号文 8 に暗号化 されました。

では、平文に戻すため、復号化の処理 をしてみます。

これで、暗号文 8 が平文2 に復号化 されました。

おわりに


いかがだったでしょうか。SSL/TLSで使用しているRSAの公開鍵と秘密鍵の生成方法と、暗号化、復号化の流れを確認していきました。実際にはもっと桁数も多いですが、このコラムで、基本的な原理はお分かりいただけたのではないでしょうか。

それでは、次回のコラムもお楽しみに!

関連URL

筆者紹介

古川 雄太

プロフィール

古川 雄太(Yuuta Furukawa)

ERPシステム担当講師
主にシステム管理系のトレーニングを担当しています。

システム管理には明確な正解というものがないことが多いため、
お客様から頂いたご質問には苦慮するものもありますが、
なるべく多くの選択肢と、その中での最適なソリューションを、
なぜそれを選んだのかという理由を元に丁寧にお答えします。
一緒に問題点や疑問をを解決していきましょう。

コラムだけでなく、教室でも皆様とお会いできることを楽しみにしています。


Page Topへ