今さら聞けないSSL/TLSとは? HTTPSにすると何が良いの?

エンジニアコラム

SSL/TLSって何?

 SSL/TLSとはコンピューターがインターネット上のサーバーなどと通信をする際に、通信内容を暗号化することで、第三者が中身を見られなくするためのプロトコル(仕様)です。
 主な機能としては、通信相手の認証・暗号化・改ざんを検知することが出来ます。改ざんとは通信内容が第三者によって書き換えられてしまうことを「改ざん」と呼びます。

SSLとTLS、バージョンの違いは?

 SSLとTLSには古い歴史があり、「SSL1.0」が最も古いバージョンとなり、「TLS1.3」が最も新しいバージョンとなります。以下にバージョンの歴史を記載します。

バージョン内容
SSL 1.0ネットスケープコミュニケーションズ社が開発した、最初のバージョン。
設計段階で脆弱性(ぜいじゃくせい)が発見されたため、破棄されています。
SSL 2.01994年にネットスケープコミュニケーションズ社がSSL1.0を修正して開発したもの。
ダウングレード攻撃という脆弱性が発見され、
2011年3月にRFC 6176で、SSL 2.0の使用が禁止されています。
SSL 3.01995年にネットスケープコミュニケーションズ社がSSL2.0を修正して開発したもの。
2014年10月にPOODLE攻撃という脆弱性が見つかったため、
2015 年6月にRFC7568で、SSL 3.0の使用が禁止されています。
TLS 1.01999年にIETFのTLSワーキンググループが、RFC2246として公表したバージョン
2021年3月にRFC8996で、順次複数のブラウザで廃止されることが予定されています。
TLS 1.12006年にIETFのTLSワーキンググループが、RFC4346として公表したバージョン
2021年3月にRFC8996で、順次複数のブラウザで廃止されることが予定されています。
TLS 1.22008年にRFC5246で策定されたバージョン。
ハッシュアルゴリズムに、SHA-256が追加され、ブロック暗号についてもCBCモード
だけでなく、GCMやOCMなどが追加されている。
現在の主流のバージョン。
TLS 1.32018年8月にRFC8446として公開されたバージョン。
1.2と比べて高速で安全になり、CBCモードやRC4などの暗号スイートが廃止されている。
ChromeやSafariなどの最新ブラウザでは対応しているが、対応していないブラウザもある。

 たくさんのバージョンが更新されてきていますが、時代の流れで現在もSSLと呼ばれてはいますが、実際に使われているのはTLSですので、お間違いないようにしてください。

SSL/TLSの仕組みは?

 SSL/TLSを理解するには、「公開鍵暗号方式」と「共通鍵暗号方式」を理解する必要があります。説明のため、Aさん、Bさんを登場させます。

公開鍵暗号方式

 公開鍵暗号方式とは、2つの鍵「公開鍵」と「秘密鍵」を用意し、公開鍵のみを公開し、秘密鍵を特定の人(コンピューター)にのみ持たせる方法です。具体的にみてみましょう。

Aさん(受信側)

秘密鍵を作ったから、これを使って公開鍵を作成したぞ!

みんな、データを送る時は公開鍵を使ってね!

Bさん(送信側)

Aさんにデータを送るときは公開鍵を使うんだったわね。

公開鍵で私の個人情報が暗号化されるのね!

データ送信っと。

Aさん(受信側)

お!データが来たぞ。

俺の持ってる秘密鍵で、データを復号してと。

 このように、Aさんは秘密鍵を作成し、秘密鍵を使って公開鍵を作っています。秘密鍵から公開鍵を作っているのでペアになっています。
 そして、公開鍵を一般の人に使ってもらえるように公開しておくことで、Bさんは公開鍵を利用して暗号化を行うことが出来ます。

 ここでのポイントは、公開鍵を利用してデータを暗号化することは誰でもできます。一方、暗号化されたデータはAさんしか利用することができないため、データが安全に守られるということになります。

Aさん(受信側)は秘密鍵を厳重に保管しなければなりません。

共通鍵暗号方式

 共通鍵暗号方式とは、両者が共通の鍵を持ち、この鍵を使って暗号化/復号化を行うことです。公開鍵暗号方式と比べて、データの暗号/復号速度が早いのがメリットですが、鍵を受け渡す時は必ず安全なルートで受け渡しを行う必要があります。例を見てみましょう。

Aさん(受信側)

Bさんとデータをやりとりするための、共通鍵を作ったぞ!

この鍵をBさんにどうやって渡そうかな。

Bさん(送信側)

メールで送られるのは不安だから、直接USBで渡してほしいな

Aさん(受信側)

分かったよ!後日渡しに行くね。

これで、共通鍵を使えばデータを暗号/復号できるね!

 このように共通鍵暗号方式は、公開鍵暗号方式とは違って、鍵が1つしかありませんので、受け渡す時に安全に渡す必要があります。(公開鍵暗号方式の場合は、公開鍵を公開すればOKでしたね)
 ※ちなみに鍵を受け渡すことを、「鍵交換」と言います。

暗号/復号の処理速度は早いが、受け渡しを厳重にしなければならない。

ハイブリッド暗号方式

 ハイブリッド暗号方式とは「公開鍵暗号方式」と「共通鍵暗号方式」を組み合わせたものです。SSL/TLSではハイブリッド暗号方式を用いて、暗号化が行われており、両方の利点を活かして利用されています。

 ハイブリッド暗号方式の流れとしては、以下になります。

Bさん(送信側)

共通鍵を作りましたわ。

この共通鍵を使って私の個人情報を暗号化しましょう。

でもこれだと、Aさんは私の共通鍵を持ってないからどうしましょう・・・

Aさん(受信側)

それなら、Bさんが作った共通鍵を、

俺が作った公開鍵で暗号化して送ってよ!

それならBさんの共通鍵を、俺の秘密鍵で復号するから!

Bさん(送信側)

なるほど!では、

「共通鍵で暗号化したデータ」と

「Aさんの公開鍵で暗号化した、私の共通鍵」の2つ送るわ!

Aさん(受信側)

お、きたきた!

Bさんの共通鍵を、俺の秘密鍵で復号化してっと。

手元には、「Bさんの共通鍵」と「Bさんの共通鍵で暗号化されたデータ」か。

これでBさんの情報が分かるな!

 ご理解頂けましたでしょうか。上記のように共通鍵をAさんに渡すために、公開鍵暗号方式を利用するのがハイブリッド暗号方式となります。また、なぜデータの暗号化には共通鍵を利用するかというかと言うと、共通鍵の方が暗号化/復号化の処理が早いからです!

SSL/TLS通信する相手が詐欺師だったらどうするの?

 冒頭で、SSL/TLSには「認証・暗号化・改ざん」の仕組みがあると書きました。上の項目では、ハイブリッド暗号方式を利用することで暗号化が可能になりましたね。

 続いては認証機能について説明します。認証とは相手が本当に正しい相手かどうかを判定することです。例えば通常のサイトで、ID、パスワードを利用することは、サイトがあなたを認証していることになります。SSL/TLSでは認証局という仕組みが存在します。例を見てみましょう。

Cさん(サーバー管理者)

俺のサイトを安全にしたいから、SSL化したいな

どうしたらいいんだろう。

Dさん(認証局)

それなら僕たちが確認するから、Cさんの情報を確認するから

情報を色々教えてね

Cさん(サーバー管理者)

分かりました!

CSR(証明書署名要求ファイル)というものを出せば良いのか!

CSR出します!

Dさん(認証局)

OK、問題なさそうだね

じゃあ我々がCさんが問題ないことを皆にも保証するね!

 このように認証局(CA)は申請してきたサーバー管理者などのCSRというものを見て認証を行います。また、認証局には種類があり、「ルート認証局(root CA)」が最も安心できるところで、RapidSSLやGeoTrustなどがあります。一方、ルート認証局から署名を受け、代行業者として認証を行うことが出来るのが「中間認証局(中間CA)」になります。

SSL/TLSの利用

 SSL/TLSが最も利用されているのは、皆さんも御存知のようにHTTPSです。元々はHTTPというプロトコルがあり、これだけでも通信自体は可能です。しかしHTTPだけだと、ユーザーが入力した個人情報やデータが丸見えの状態になっているため、HTTPS化しておかないと個人情報保護法に抵触してしています。

  またその他にも、SSLを組み合わせたプロトコルとして、SMTPS、FTPSなどが上げられます。SMTPはメールを送信するときなどに利用されるプロトコルで、FTPはファイルを送信・制御するために利用されるプロトコルで、これにSSLを利用することで安全にデータが送信することが可能になります。

SSL/TLSでは防げないもの

 SSL/TLSはあくまで「通信時の安全性を保つためのものですので、例えば物理的にスマホやPCのロックを解除されたりすれば、中のデータはHTTPSのサイトから取ってきたデータでも防ぐことは出来ません。

 また、アプリケーションレベルで保護しているわけではないので、Webアプリの情報を第三者が運営元のデータベースから抜き出されてしまう場合も防ぐことや、不正なアプリの防止は出来ません。あくまでも「通信」の暗号化なので、覚えておいてください。

物理的や不正なアプリを防ぐことはできないよ!

まとめ

 ここまでお読み頂いた皆様であれば、SSL/TLSの重要性・必要性が十分理解できたかと思います。最近はレンタルサーバーでブログを始めてみたり、プログラミングを始めた方も多いと思いますが、HTTPで運営することはユーザーへの安心感や信頼性に関わりますので、必ずSSL化しておきましょう。

最後まで読んで頂きありがとうございます!

面白かった、参考になった、と少しでも感じて頂けましたら
ブログランキング上位になるための応援をして頂けないでしょうか!
今後も面白い記事を更新していきますので、ぜひ宜しくおねがいします!
エンジニアコラム
【TechGrowth】

コメント