当サイト「エンジニア サッスーが100%レンタルサーバーを使いこなすサイト」でエックスサーバーの「無料独自SSL」を導入しました。
具体的な手順は以下のページを確認してください。
まだまだレンタルサーバーの「5%」も使いこなしていませんが、ここで「SSL」について一度整理したいと思いました。
普段インフラエンジニアとしてSSL技術は利用していますが(OpenSSL)とかApacheにSSL証明書をアップロードしたり、ロードバランスにSSL証明書をインポートしたりとか。。
しかしSSL技術に関しては専門家レベルには達していないため、自身の勉強も含めてまずはレンタルサーバー初心者の方でも理解できるように優しいところから解説したいと思います。
SSLって何?
そもそもSSLとは何かと言うと「技術」です。
もっと言うと、SSLとは「データを暗号化する技術」です。
言葉を変えるとSSLとは「データを暗号化する仕組み・機能・ルール」です。
専門用語を使うと、SSLとは「データ通信時にデータを暗号化するプロトコル」です。
もちろん「ルール」や「規約」なので物体ではありません。
「ルール」や「規約」はドキュメント化(文書化)されています。
The Transport Layer Security (TLS) Protocol Version 1.2
https://tools.ietf.org/html/rfc5246
こんな感じで細かくルール化されています。
TCP/IPという用語を聞いたことがあるかもしれませんが、コンピュータ同士でデータをやり取りする時に「ルール」が必要になります。
- どういう形式でデータを送るのか?
- どのタイミングでデータを送るのか?
- どうやってデータを送るのか?
こういったルールを「プロトコル(規約・手順・儀典)」といいます。
SSLはプロトコルで、「データを暗号化する時はこうしましょう」「データを復号化する時はこうしましょう」と細かく決めています。
分かりやすくまとめると、SSLとは「データ通信時にどのように暗号化するか、どのように復号化するかといったルール」です。
SSLで何がしたいの?何のメリットがあるの?
次にSSLで何がしたいのか?ですが、「データを暗号化」するためです。
データを暗号化して「セキュリティを担保するため」です。
主に3つの目的があります。
1・盗聴を防止するため
データのやり取り自体はちゃんとできているものの、通信の途中でデータの内容を第三者に漏えいすることを防止します。
下図では
2.改ざんを防止するため
データのやり取り自体はちゃんとできているものの、データの内容が改ざんされることを防止します。
3.なりすましを防止するため
無関係の第三者がなりすまして、データを送受信する。
インターネットの世界は「情報・データ」が丸裸状態
基本的にインターネットの世界は丸裸状態です。
誰でもアクセスできて誰でも情報を見ることができます。
何気なくツイッターでつぶやいたことや、FaceBook や Youbute にアップロードした動画や画像があっという間に世界中に拡散されるというオープンな世界です。
しかもネットショップに「クレジットカード情報」や「アカウント」や「パスワード」を入力すると、直接そのネットショップに「情報・データ」が送信されるわけではなく、インターネット上にある様々な「サーバー」や「ルーター」などの機器を経由して送信されています。
下図のように暗号化されていないそのままのデータがいろいろな機器を経由しています。
インターネットの世界は丸裸状態、という前提を受け入れて
- インターネットの世界を変えるのではなく
- 流れる「情報・データ」を変える
という状況から「オープンな世界を流れるデータを暗号化しよう」という発想の転換になりました。
SSLのメリットは「情報・データを守ることができる」です
SSLを利用する最大のメリットは「情報・データを守ることができる」ということに集約できます。
インターネットというオープンな世界で流れる情報・データを暗号化できます。
その結果、SSLを利用することで以下のようなことが実現できました。
- データを覗きたければ覗いても良い、でも何が書いてあるのか分からない
- データを改ざんしても、当事者にはすぐにばれる
- 本人になりすましても、当事者にはすぐにばれる
どのようにデータを暗号化するのか?
「データを暗号化する」とは、元のデータを第三者に盗まれても解読されないようにする「技術」です。
たとえば文字を変えたり、文字をずらしたりします。
逆に暗号化されたデータを解くことを「復号化する」といいます。
たとえば、ずらされた文字を元に戻したり、変えられた文字を元に戻します。
SSLは「鍵(かぎ)」を使ってデータを暗号化します。
鍵とは何か?
鍵とは以下の2つを含んでいます。
- 暗号化するためのアルゴリズム
- 鍵長(かぎちょう)
一例ですが(かなり古いですが)「DESで64bitの鍵」の場合は
- 「DES(データ標準規格)」というアルゴリズムを使って暗号化します
- 鍵の長さ(鍵長)は64ビットです
などのデータを含んでいます。
具体的にこの「DESで64bitの鍵」を使ってどのようにデータを暗号化しているのかというと、64bit(実際はパリティチェックというデータの破損を調べるために8bitを使うので56bitになりますが)を暗号化の対象として置換したり、ひっくり返したり、ビットをシフトしたりして、できるだけたくさんデータをかき混ぜています。
簡単ですが、これがDESの場合の暗号化の手順です。
(他にもいろんな暗号化の手順があります)
SSLには「2つの鍵の方式」がある
すでにレンタルサーバーでいろいろ調べて知っているかもしれませんが、SSLには2つの鍵の方式があります。
- 共通鍵暗号方式
- 公開鍵暗号方式
共通鍵暗号方式とその特徴
共通鍵暗号方式は、「暗号化」と「復号化」に同じ鍵を使います。
この鍵を「共通鍵」と言います。
例えばパスワード「山川」をある鍵を使って暗号化したら「;cjmaluje;lkdja」になりました。
この「;cjmaluje;lkdja」を相手に送って、相手が同じ鍵を使って復号するとパスワード「山川」が出てきます。
この時、両者は「同じ鍵」を使っています。
共通鍵暗号方式の特徴は
- 鍵が一緒なので仕組みがシンプル
- 秘匿して共通鍵を相手に教える手段がない(限定的)
です。
共通鍵暗号方式は「シンプル」なので暗号化・復号化の処理が公開鍵暗号方式に比べて数百倍~千倍くらい速いと言われています。
その一方、一番最初に確実に共通鍵を相手に通知する手段がありません。
あるとしたら「鍵を手渡す」くらいでしょうか。
※配送しても途中で盗まれる可能性があります。
公開鍵暗号方式とその特徴
ちょっとややこしいですが、公開鍵暗号方式には以下の2つの鍵が登場します。
- 秘密鍵
- 公開鍵
おもしろいのが、一方の鍵で暗号化したデータは、もう一方の鍵でないと復号できません。
たとえば「秘密鍵」で暗号化したデータは「公開鍵」でしか復号できませんし、「公開鍵」で暗号化したデータは「秘密鍵」でしか復号できません。
公開鍵暗号方式の特徴ですが
- 暗号化と復号化の鍵が別々なのでバレない(バレにくい)
- 複雑な構成なので処理が公開鍵暗号方式に比べて遅い
です。
このように「共通鍵暗号方式」と「公開鍵暗号方式」ではそれぞれ利点・欠点、メリット・デメリットがあります。
実際はどうやってSSLを使って通信しているのか?
実際のSSLを使った通信では以下のようにしています。
1.公開鍵暗号方式で「共通鍵」を交換する
理由は、
- 通信の処理を早くするために「共通鍵」を利用したい
- しかし共通鍵暗号方式では、最初に鍵を相手に通知できない
だから最初の共通鍵の鍵通知のみ「公開鍵暗号方式」を使って鍵交換だけやってしまいます。
2.安全に「共通鍵」を交換後、実際のデータの通信は「共通鍵暗号方式」を使う
一度「共通鍵」さえ交換できてしまえば、あとは処理スピードが速い「共通鍵暗号方式」でデータの暗号化・復号化を行います。
このように「共通鍵暗号方式」「公開鍵暗号方式」の2つの方式を使って暗号化することを「ハイブリッド方式」と呼んでいます。
最後に
自分なりに知識を整理して図解化してみましたが、なんとなく理解のきっかけにはなりましたでしょうか。
「SSLとは何か?」「SSLとは何のためにあるのか?」「カギとは何か?」「実際、何をしているのか?」など整理出来たら嬉しいです。
私もこれからも更にSSLの詳しい技術を記事にしていきたいと思います。
コメント
コメント一覧 (1件)
[…] 【レンタルサーバー初心者向け】 SSL技術を分かりやすく解説してみました […]