共通鍵・公開鍵暗号方式とSSL
今日はAWSのサーバーにssh通信をする機会があったのですが、公開鍵や秘密鍵の仕組みについて忘れかけていたので、その備忘録として書いていきます。
①共通鍵暗号方式
共通鍵暗号方式は、暗号化するための鍵と復号化(暗号解除)するための鍵が同じという特徴を持っています。僕なりに簡単に表現すると、「マスターキーが二つあって、片方を相手に渡す」といった感じです。
1 送信側が共通鍵を使いデータを暗号化(鍵は二つ持っている)
2 暗号化したデータともう一つの共通鍵を相手に送る
3 受信側は送られてきたデータを共通鍵で復号する
これが送受信の流れです。
共通鍵暗号方式のメリットは、データが暗号化されているため、第三者に見られても安心という点です。しかし、これにはデメリットもあります。それは、鍵自体を盗まれる可能性があるということです。
共通鍵暗号方式では、データだけでなく、復号するための鍵も送信しなくてはいけないのですが、この「鍵」自体は暗号化されていないため、悪意ある第三者に見られてしまうかもしれません。この問題を「鍵配送問題」といいます。こういった弱点があるため、現在では公開鍵暗号方式が主流になっているそうです。
2 公開鍵暗号方式
公開鍵暗号方式は、「公開鍵」と「秘密鍵」の二つを用いて通信するものです。公開鍵はその名の通り多数の人に公開する暗号化用の鍵で、秘密鍵は復号用に自分の懐に隠しておく鍵です。通常は受信側が公開鍵と秘密鍵の両方を作成します。流れとしてはこんな感じです
①受診者が公開鍵と秘密鍵を作成する
②公開鍵を外部に公開する
③送信側は公開鍵を使って送りたいデータを暗号化し、相手に送る。
④受信側は秘密鍵を使いデータを復号する。
ここで大事なことは、公開鍵は暗号化用、秘密鍵は復号化用ということです。
外部に公開されている公開鍵では暗号化しかできませんので、悪意ある第三者に見られても安心というわけですね!
公開鍵暗号方式のメリットは共通鍵暗号方式よりも安全であることですが、デメリットとして基本的に一方通行の通信しかできないということや処理が複雑になるため、共通鍵暗号方式よりも処理速度が遅くなる傾向があるみたいです。
③SSL (Secure Sockets Layer)
SSLはこのサイトを参考にしました
https://viral-community.com/blog/ssl-summary-1510/
SSLは先程までの共通・公開鍵暗号方式の二つを用いることで、より強力な暗号化通信を行っています。イメージとしては、共通鍵暗号方式の弱点を公開鍵暗号方式で補っている感じですね。
①クライアントがSSH通信をさせてくれ〜とサーバーに要求
②サーバーは要求にOKを出し、SSL証明書と公開鍵をクライアントに渡す(この時、復号用に秘密鍵も作られている。)
③クライアントは共通鍵を二つ用意し、一つを受け取った公開鍵で暗号化しサーバーに送る。
④サーバーは送られてきた共通鍵(暗号化状態)を秘密鍵で復号する
後は、共通鍵暗号方式と同じで安全に通信ができます。つまり、SSLは鍵配送問題が解決された共通鍵暗号方式ということですね!