この記事では、暗号化が必要な理由や共通鍵暗号方式・公開鍵暗号方式の概要、SSLの仕組みの概要について書きます。
暗号化については、ノード(端末やサーバ等、他の機器との通信を行う主体を指す)間の通信に着目した内容となります。
1.暗号化が必要な理由
ノード間の通信内容は、Wiresharkのようなパケットキャプチャ(ソフトウェア)で確認することが可能です。
どのような形で確認できるのかは、Googleの画像検索で調べればイメージがわきやすいと思います。
そして、ユーザ/パスワードのような重要な情報を送受信する際も、同じようにパケットキャプチャで通信内容を見ることができてしまいます。
もし、そのような重要な情報が平文(生データ)で送受信されていたとしたら、それはセキュリティ面で重大なリスクとなります。
例えば、ユーザ/パスワードを盗み見た第三者が、なりすましでログインすることができてしまいます。
それを防ぐために、「鍵」と呼ばれる通信を行う者同士であらかじめ共有されたデータを使用し、特定のアルゴリズムにより通信するデータを暗号文に変換します。
そうすることで、第三者に通信内容を盗み見られたとしてもその中から重要な情報を取得されるのを防ぐことができます。
「鍵」を持たない第三者が暗号文を見ても内容を理解できない、という所が重要です。
2.共通鍵暗号方式・公開鍵暗号方式の仕組み
暗号化の方式は大きく分けて二つあり、「共通鍵暗号方式」と「公開鍵暗号方式」があります。
2.1.共通鍵暗号方式
これは、あらかじめ2者間で共有された共通鍵を使用する方式です。
図解すると以下のようになります。
この方式は、方式が単純であることから暗号化・復号を早く行うことができるのが利点ですが、多くの鍵を用意する必要がでてきてしまう欠点があります。
上記の図の通りなのですが、2者の組み合わせ毎に鍵を用意する必要が出てきてしまうため、n(n-1)/2の分だけ鍵が必要になってしまいます。
(各々のノード(n)は、他の各々のノード(*(n-1))に対して鍵を用意する必要がある。ただし、2者間で別々の鍵を用意する必要はない(/2)。)
2.2.公開鍵暗号方式
これは、それぞれの主体が秘密鍵と共有鍵を管理し、通信を行う時に通信相手に共有鍵を渡して通信を行う方式です。
図解すると以下のようになります。
この方式は、少ない鍵で通信を行うことができる利点がありますが、方式が難しく暗号化・復号を早く行うことができません。
必要な鍵の数は、それぞれの主体が秘密鍵と共有鍵の2つの鍵さえ持っていれば良いので、必要なのは2nの分のみです。
3.SSLについて
インターネット上で通信を安全に行う仕組みとして、SSLと呼ばれる仕組みがあります。
SSLは、インターネットプロトコルであるhttpsにも使われています。
(重要な情報を送受信する時にはhttpsを使うべきであると言われたことがあると思いますが、httpsが安全な理由はSSLを使っているからです)
SSLでは、先で説明した共通鍵暗号方式と公開鍵暗号方式を利用しています。
また、サーバ証明書を利用するのも特徴です。
サーバ証明書とは、認証局(サーバの正当性を証明する第三者の企業)からサーバに対して付与されるものであり、通信を行うサーバが正当なものである(犯罪等に悪用されることがない)ことを証明するデータです。
仕組みは以下の通りです。サーバ側で管理する鍵は2つのみで済む、かつ公開鍵暗号方式は共通鍵(短い文字列)に対してのみ用いられるため高速、と共通鍵暗号方式と公開鍵暗号方式の良いとこ取りの方式となっています。
いかがでしたでしょうか。
暗号化は複雑なアルゴリズムで書かれており、汎用的なライブラリも用意されているので、アプリケーションを作成する技術者が意識することは通常ありません。
しかし、ライブラリを使用する時に暗号化方式の概要の知識がある方が理解が進むため、概要の知識だけでも知っておいた方が無難です。
また、情報処理技術者試験でも問われる内容となりますので、試験対策という意味でも知っておく必要があります。
これからも役に立つ技術の解説を書いていこうと思います!
コメント