いづいづブログ

アジャイルコーチになりたい札幌在住SEです。アジャイル札幌スタッフ&ScrumFestSapporo実行委員。Like:パクチー/激辛/牡蠣/猫/初期仏教

SSL/TLSとは

f:id:izumii-19:20181212225627p:plain:w500

SSLとは

SSLとはSecure Sockets Layerの略で、ざっくり言うとWebサイトとそのサイトを閲覧しているユーザとのやりとりを安全に保つための仕組みのことである。

SSLの必要性

私達がネットで買い物をする時には、クレジットカード番号や住所・氏名といった個人情報を送信するような場面がたくさんある。

しかしこういったネット上を流れる情報は、実は悪意のある第三者が通信の中身を見ようと思えば比較的簡単に見ることができるのである。*1

このような状況では安心してクレジットカード番号や個人情報を送信することはできないため、Web上を流れる情報の秘密を守る必要がある。 このWeb上の情報の秘密を守る仕組みがSSLである。

SSL通信の見分け方

Webブラウザのアドレス入力欄やステータスバーに鍵マークが出ているのと、アドレス欄が「https://~」から始まるのもSSL通信をしている証拠である。

f:id:izumii-19:20181212134808p:plain
SSL通信をしているサイト
f:id:izumii-19:20181212135147p:plain
SSL通信をしていないサイト

SSLの3つの機能

SSLには以下の3つの機能がある。

  1. 通信内容を暗号化する

  2. 通信相手の真正性を確認する

  3. 通信データが改ざんされていないか検知する

通信内容の暗号化

SSLではブラウザとサーバー間の通信を、通信の始まりから終わりまで暗号化している。

  1. SSLを使用していない通信の場合Webブラウザから「http://」のURLで指定したサーバーあてに要求を送る際、順番としてまず、WebブラウザTCPにデータを渡す。
    SSLを使用している通信の場合Webブラウザからサーバーあてに要求を送る際、TCPではなくSSLにデータを渡す。そしてSSLは受け取ったデータを暗号化してから、改めてTCPへ渡す。このように暗号化された状態でデータが回線上に送り出されるため、通信の途中でデータを盗み見られたとしても、データは暗号化されているため解読は困難である。

  2. 暗号データを受け取ったTCPは,このデータがSSLのデータであることを示すため、TCPパケットに「443番ポートあて」と明記する。

  3. 暗号化されたデータは、サーバー側で復元し元のデータを取り出す。

  4. データを送信する際の暗号化と、データを受信した際の復元の仕方には「公開鍵暗号」と「共通鍵暗号」という2つの方法がある。

  5. 公開鍵暗号は、(SSL証明書を申し込んだ際に含まれる)公開鍵と秘密鍵と呼ばれる異なる鍵のペアを使う方式である。特徴は「片方の鍵で暗号化したデータはペアとなっているもう片方の鍵でしか復号できない」という点で非常にセキュアな暗号化方式だと言える。

  6. 共通鍵暗号」とは暗号化と復元に同じ鍵(共通鍵)を使う暗号方式であり、暗号化と復元の処理が軽いというメリットがある。

  7. このような特徴を踏まえ、SSLでは「公開鍵暗号」と「共通鍵暗号」の両方を使用して暗号化を行っている。 Webブラウザとサーバーとの間で「共通鍵」の受け渡しを行う際は、共通鍵のやりとりそのものが漏洩しないように、よりセキュアな「公開鍵暗号」で受け渡しを行っている。 そして安全に「共通鍵」を送った後、実際のデータ通信を行う際は処理の軽い「共通鍵暗号」で行っている。 このようにSSLでは「公開鍵暗号」と「共通鍵暗号」の両方のメリットを活かし、安全かつ高速にデータ通信を行っている。

このへんの詳しい説明は以下のサイトに図付きで説明がありわかりやすい。

tech.nikkeibp.co.jp

【参考】

プロトコル ポート番号
HTTP 80番
SMTP 25番
POP 110番
HTTPS 443番

通信相手の真正性を確認

暗号通信を使うと、通信の内容がサーバとクライアント以外の第三者には解読できなくなるが、暗号通信が正しく行われていても第三者に情報が洩れる場合がある。それはフィッシングサイト*2である。

このフィッシングサイトを正規のサイトだと思い込んで個人情報を送信してしまうと、自分の個人情報を意図していない相手に渡すことになり、結果として情報が第三者に漏洩することになる。そういったフィッシングサイト等への情報漏洩を防止するのに重要なのが「通信対象の真正性」である。

通信対象の真正性を確認するにはSSLサーバ証明書に含まれる所有者情報を利用する。

SSLは暗号通信にSSLサーバ証明書を利用しており、SSLサーバ証明書認証局ドメインの所有権等を確認した所有者情報を保有しているのため、SSLサーバ証明書は通信相手の真正性の確認に役立てることができる。

このへんの詳しい説明は以下のサイトに図付きで説明がありわかりやすい。

tech.nikkeibp.co.jp

通信データが改ざんされていないか検知

SSLには、通信データが改ざんされていないかを調べるための機能がある。

データ送信の前にデータの本文を元に改ざん検知用のデータを関数を用いて出力し本文とセットにして送付する。 受信側は、本文を送信側が使用した関数を使用して受信側も計算し、出力したデータと送られてきた検知用のデータが一致していれば、 本文は改ざんされていないと見なす。

一連の機能ははメッセージ認証と呼ばれ、改ざん検知用のデータはフィンガープリント(拇印)またはハッシュ値と呼ばれる。 メッセージ認証で利用される関数は、本文からフィンガープリントを作成できてもフィンガープリントを元にして本文を復元できないのが大きな特徴である。

SSLTLSの違い

TLSとは Transport Layer Securityの略。

現在「情報を安全にやりとりするための仕組み」として使われているのは実はSSLではなくこのTLSのほうである。

SSLは1996年5月 IETF というインターネット技術の標準化を推進する組織に管理が移され、そこで新たにSSLは「TLS」という新たな名前をつけられた。つまり「SSL」は「TLS」の前身である。 とはいえ、1999年1月に公開された TLS 1.0 は、SSL 3.0 とほとんど違いはなく *3同じ機能だと思ってよい。

現状、「SSL」の名称のほうがまだ一般に広く認知されているため、「SSL/TLS」と併記されることも多い。

SSLSSHの違い

SSHも内部ではSSLを使っており、言い換えるとSSHSSLの応用の1つだと言える。*4

この2つの違いはざっくりと、

  • インターネットのやり取りを暗号化するのがSSL
  • 他のコンピュータを遠隔操作する際のやり取りを暗号化するのがSSH

くらいに覚えておく。*5

*1:飲食店などで利用できる無料Wi-Fiなども、ちょっとした知識があれば管理者が非SSLの通信を盗み見ることが可能。

*2:正規のサイトになりすましているサイトのこと。

*3:そのため、SSL 3.1 とも呼ばれていました。

*4:OpenSSH は、OpenSSL がインストールされていないと全く動きません。SSL は、他にも Web サーバーや、FTPサーバー、メールサーバーなどで利用されています。

*5:https://wa3.i-3-i.info/diff384security.html