SSH
SSL
HTTPS
TLS
SSL/TLSDay 2

ざっくりまとめたSSL/TLS

"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という技術により検知することができる
     

  • 通信相手が正しいマシンであること
    サーバの公開鍵の証明書を確認することで
    「なりすまし」されても偽物だと気付ける