Edited at
SSL/TLSDay 2

ざっくりまとめたSSL/TLS

More than 1 year has passed since last update.


"SSL"とは

多くの場合はSSL3.0/TLSの2つの事を指す

下位互換はないものの、ほぼ同じ機能を提供する為に呼ばれている。


"https"とは

ご存知、

Web通信で使用されるHTTPプロトコルをSSL/TLSプロトコルで保証するプロトコル


https通信をする上で重要な登場人物

種類
説明

証明書
WEBサイトが安全であるという事を外部に示す電子証明書

公開鍵・秘密鍵
WEBサーバで使用する暗号化・復号化の鍵

暗号化アルゴリズム
データ転送時に用いる暗号化・復号化のルール

SSLライブラリ
SSLプロトコルを実装する暗号化・復号化モジュール


"SSH"とは

ご存知の通り、リモートでコンピュータにログイン・操作プロトコル。

いつも使うコマンド。

アプリケーション層で実装される暗号化方式

SFTPやポート制御でも利用される


"TLS" とは

SSLとの違いは、暗号アルゴリズムをサポートしたという点。

「SSL通信でxxする。」という会話も実際にはTLSだったりする事が多い。

DH,DSS,3DESなど。

3DES(トリプルデス)はDESで3回暗号化する方式。


SSLハンドシェイク


方法

公開鍵暗号方式で共通鍵を交換などを行う


ステップ

スクリーンショット 2017-11-30 18.46.07.png

(※かなり簡略化しています)



  1. 使用するアルゴリズムの合意

    クライアントが対応しているアルゴリズムのリストを送付

    クライアントに実際に使用するアルゴリズムを返す


     

    伝える情報


    • SSL version

    • サーバ認証アルゴリズム

    • 鍵交換アルゴリズム

    • データ転送で使用するデータ保護用の鍵共通方式アルゴリズム

    • データ転送で使用するデータの完全性を確認するためのMACアルゴリズム


    • MACアルゴリズム チェック

    • 圧縮アルゴリズム
           



  2. アルゴリズムの確定

     通信で使うアルゴリズムを確定し、

    自身の公開鍵を含む証明書を送付

       


  3. ランダムな文字列をserverの公開鍵で暗号化

    ランダムな文字列はクライアントで生成される

    serverの公開鍵で暗号化して送付する


  4. ランダムな文字列をserverの秘密鍵で復号化

    クライアントとサーバそれぞれで作成した2つの乱数を


  5. 暗号化鍵とMAC鍵を作成

    鍵生成関数の入力に追加し、暗号化鍵とMAC鍵を生成

     



SSLで暗号化される範囲

全てのパケットを暗号化する訳ではない

SSL プロトコルはOSI参照モデルのセッション層に位置する為、

OSI参照モデルの上位3層

(セッション層、プレゼンテーション層、アプリケーション層)を暗号化する。

それ以下の層(レイヤ1-4)については暗号化しない。

スクリーンショット 2017-11-30 17.38.35.png

つまり、SSLを導入したからと言っても、誰宛かのパケットかは隠せない。

「AさんからBさんへ連絡した」という事を隠すことはできない。

当然会話の内容は暗号化される。

イメージ的には大勢の前で、暗号化された言葉で話しているような感じ。


SSLで保証されるもの


  • 転送中のデータ

    盗聴されても、解読する事はできない。

    仮に改ざんされても、MACという技術により検知することができる

     


  • 通信相手が正しいマシンであること

    サーバの公開鍵の証明書を確認することで

    「なりすまし」されても偽物だと気付ける