コンテンツにスキップ

SSL/TLSの概要

全体アーキテクチャ

wolfSSL(以前のCyassl)が埋め込まれたSSLライブラリは、SSL 3.0、TLS 1.0、TLS 1.1、TLS 1.2、およびTLS 1.3プロトコルを実装しています。TLS 1.3は現在、標準の最も安全で最新のバージョンです。wolfSSLは、数年間不安定であるという事実により、SSL 2.0をサポートしていません。

WOLFSSLのTLSプロトコルは、RFC 5246 (https://tools.ietf.org/html/rfc5246).で定義されているとおりに実装されています.SSL には、メッセージ層とハンドシェーク層の 2 つのレコード層プロトコルが存在します。ハンドシェイク メッセージは、共通の暗号スイートのネゴシエーション、シークレットの作成、および安全な接続の有効化に使用されます。メッセージ レイヤーはハンドシェイク レイヤーをカプセル化すると同時に、アラート処理とアプリケーション データ転送もサポートします。

SSLプロトコルが既存のプロトコルにどのように適合するかについての一般的な図は、図1に表示されます。SSL は、OSI モデルのトランスポート層とアプリケーション層の間に位置し、任意の数のプロトコル (TCP/IP、Bluetooth などを含む) がトランスポート メディアとして機能します。アプリケーション プロトコルは、SSL (HTTP、FTP、SMTP など) の上に階層化されています。

SSL Protocol Diagram

SSLハンドシェイク

SSLハンドシェイクには、SSLクライアントとサーバーが構成されているオプションに応じて、いくつかのステップが必須ではありません。以下、図2では、SSLハンドシェイクプロセスの簡略図があります。

SSL Handshake Diagram

SSLプロトコルバージョンとTLSプロトコルバージョンの違い

SSL (Secure Sockets Layer) と TLS (Transport Security Layer) はどちらも、ネットワーク上で安全な通信を提供する暗号化プロトコルです。 これら 2 つのプロトコル (およびそれぞれのいくつかのバージョン) は、今日、Web ブラウジングから電子メール、インスタント メッセージング、VoIP に至るまで、さまざまなアプリケーションで広く使用されています。各プロトコル、およびそれぞれの基礎となるバージョンは、他とはわずかに異なります。

以下に、異なる SSL および TLS プロトコル バージョンの説明と主な相違点を示します。 各プロトコルの具体的な詳細については、記載されている RFC 仕様を参照してください。

SSL 3.0

このプロトコルは1996年にリリースされましたが、Netscapeによって開発されたSSL 1.0の作成から始まりました。バージョン1.0はリリースされておらず、バージョン2.0には多くのセキュリティ上の欠陥があり、SSL 3.0のリリースにつながりました。SSL 2.0 に対する SSL 3.0 のいくつかの主要な改善点は次のとおりです。

  • メッセージ層からのデータ転送の分離

  • Export Cipherを使用している場合でも、128ビットのキーイングマテリアルを使用する

  • クライアントとサーバーが証明書のチェーンを送信する能力により、組織は2つ以上の証明書の証明書階層を使用できるようにします。

  • 一般化された鍵交換プロトコルを実装し、Diffie-HellmanとFortezzaの鍵交換と非RSA証明書を許可しています。

  • レコードの圧縮と解凍を可能にする

  • 2.0 クライアントが検出されたときに SSL 2.0 にフォールバックする機能

TLS 1.0

このプロトコルは1999年1月にRFC 2246で最初に定義されています。このプロトコルは、1999 年 1 月に RFC 2246 で最初に定義されました。これは SSL 3.0 からのアップグレードであり、違いは劇的ではありませんでしたが、SSL 3.0 と TLS 1.0 が相互運用できない程度の変更を含んでいます。SSL 3.0とTLS 1.0の間の大きな違いの一部は次のとおりです。

  • キー導出関数は異なります

  • Macは異なります-SSL 3.0は初期HMACの変更を使用し、TLS 1.0はHMACを使用します。

  • 完了(Finished)メッセージが異なります

  • TLSにはより警告があります

  • TLSにはDSS/DHサポートが必要です

TLS 1.1

このプロトコルは、2006年4月にRFC 4346で定義され、TLS 1.0の更新です。主な変更は次のとおりです。

  • 暗黙の初期化ベクトル(IV)は、暗号ブロック連鎖(CBC)攻撃から保護するために明示的なIVに置き換えられます。

  • パディングエラーの取り扱いは、CBC攻撃から保護するためにdecryption_failedアラートではなくbad_record_macアラートを使用するよう変更されました。

  • IANAレジストリは、プロトコルパラメーター用に定義されています

  • 早期終了によってセッションが再開できなくなることがなくなりました。

TLS 1.2

このプロトコルは、2008 年 8 月に RFC 5246 で定義されました。TLS 1.1 に基づいて、TLS 1.2 には改善された柔軟性が含まれています。主な違いは次のとおりです。

  • 擬似ランダム関数(PRF)のMD5/SHA-1の組み合わせを、暗号スイート指定PRFに置き換えました。

  • デジタル署名要素のMD5/SHA-1の組み合わせは、単一のハッシュに置き換えられました。署名された要素には、使用されるハッシュアルゴリズムを明示的に指定するフィールドが含まれます。

  • クライアントとサーバーが受け入れるハッシュおよび署名アルゴリズムを指定する能力にかなりのクリーンアップがありました。

  • 追加のデータモードを使用した認証された暗号化のためのサポートの追加。

  • TLS拡張機能の定義とAES暗号スイートがマージされました。

  • EncryptedPremasterSecretバージョン番号の厳しいチェック。

  • 多くの要件が厳しくなりました

  • Verify_data長さは暗号スイートに依存します

  • Bleichenbacher/Dlima 攻撃防御の説明がクリーンアップされました。

TLS 1.3

このプロトコルは、2018年8月にRFC 8446で定義されています.TLS 1.3には、セキュリティとスピードが向上しました。主な違いは次のとおりです。

  • サポートされている対称アルゴリズムのリストは、すべての従来のアルゴリズムから整理されました。残りのアルゴリズムはすべて、認証タグ付き暗号(AEAD) アルゴリズムを使用します。

  • ゼロ RTT (0-RTT) モードが追加され、一部のセキュリティ 属性を犠牲にすることで、一部のアプリケーション データのための接続時のラウンドトリップが削減されました。

  • ServerHello の後のすべてのハンドシェイク メッセージが暗号化されるようになりました。

  • HMACベースの抽出および拡張鍵導出機能(HKDF)がプリミティブとして使用されているため、鍵導出機能が再設計されました。

  • ハンドシェイク ステート マシンが再構築され、一貫性が向上し、余分なメッセージが削除されました。

  • ECC は基本仕様になり、新しい署名アルゴリズムが含まれています。各曲線の単一のポイント形式を支持して、ポイント形式のネゴシエーションを削除しました。

  • 圧縮、カスタムDHEグループ、およびDSAが削除されました、RSAパディングは現在PSSを使用します。

  • TLS 1.2バージョンネゴシエーション検証メカニズムは、拡張子のバージョンリストを支持して非推奨を受けました。

  • サーバー側の状態の有無にかかわらず、セッションの再開と、TLS の以前のバージョンの PSK ベースの暗号スイートは、単一の新しい PSK 交換に置き換えられました。