Transport Layer Security (TLS) プロトコルは、ネットワーク間の通信を保護する機能を提供する。このTLS実装の比較では、最も知られるライブラリを比較する。

すべての比較カテゴリで、概要セクションにリストされている各実装の安定バージョンを使用する。この比較はTLSプロトコルに直接関連する機能に限定するものとする。

## 概要

| 実装 | 開発元 | オープンソース | ソフトウェアライセンス | 著作権所有者 | 言語 | 最新の安定バージョン、リリース日 | 出所 |
| --- | --- | --- | --- | --- | --- | --- | --- |
| GnuTLS | GnuTLS project | Yes | GNU LGPLv2.1+ | フリーソフトウェア財団 | C | 3.8.4  - 2024年3月20日 (2024-03-20) [±] | EU (Greece and Sweden) |
| OpenSSL | OpenSSL project | Yes | OpenSSL-SSLeay デュアルライセンス | Eric Young、Tim Hudson、Sun、OpenSSL projectなど | C, アセンブリ言語 | 3.4.0  - 2024年10月22日 (2024-10-22) [±] | Australia/EU |
| wolfSSL | wolfSSL | Yes | GNU GPLv2+ 商用ライセンス | wolfSSL Inc. | C | 5.5.0  - 2022年8月30日 (2022-08-30) [±] | US |
|
| 実装 | 開発元 | オープンソース | ソフトウェアライセンス | 著作権所有者 | 言語 | 最新の安定バージョン、リリース日 | 出所 |

## プロトコルのサポート

TLSプロトコルにはいくつかのバージョンが存在する。SSL 2.0は重大な弱点を持ち廃止予定となっている。SSL 3.0(1996年)とTLS 1.0(1999年)は、2001年にSerge Vaudenayによって説明されたCBCパディングの2つの弱点を継承している。TLS 1.1(2006)は、CBCブロック暗号にランダムな初期化ベクトル(IV)を使用するよう切り替えることで問題の1つが解決されたのみで、このバージョンでは安全なpad-mac-encryptではなく問題のあるmac-pad-encryptの使用がRFC7366で追加されてしまった。TLS 1.1のランダムIVにほぼ相当するSSL 3.0とTLS 1.0の回避策は、2011年後半の多くの実装で広く採用されていた。セキュリティの観点からは、TLS 1.0、1.1、1.2のいずれも基本プロトコルで同等の強度を持ち、NIST SP800-57によると、少なくとも2030年までの128ビットセキュリティに適している。2014年には、SSL 3.0のPOODLEの脆弱性が発見される。これはCBCの既知の脆弱性を利用し、ブラウザ内で安全ではないTLSバージョンのフォールバック・ネゴシエーションを行うものである。

TLS 1.2(2008)は基本プロトコルの最新版であり、デジタル署名に使用されるハッシュを識別する手段を導入した。SSL 3.0の保守的な選択(rsa、sha1 + md5)よりも将来のデジタル署名(rsa、sha256 / sha384 / sha512)に対してより強力なハッシュ関数を使用できるようにする一方で、TLS 1.2プロトコルの変更は(rsa、sha1)、(rsa、md5)までをも提供し、デフォルトのデジタル署名を不注意かつ大幅に弱くした。

データグラムトランスポートレイヤセキュリティ(DTLS)1.0は、パケット損失とパケットの並べ替えを許容する必要があるパケット型トランスポートレイヤ向けにのTLS 1.1を変更したものである。TLS 1.2に基づく改訂版であるDTLS 1.2が2012年1月に公開された。

SSL 2.0とSSL 3.0には既知の脆弱性が存在する。予測可能なIV(簡単な回避策が存在する)を除いて、現在知られているすべての脆弱性はTLS 1.0 / 1.1 / 1.2のすべてのバージョンに影響がでる。

## アメリカ国家安全保障局 (NSA) Suite B 暗号

NSA Suite B暗号化(RFC 6460)に必要なコンポーネント:

- 鍵サイズが128および256ビットのAdvanced Encryption Standard(AES)。トラフィック幅については、AESは帯域幅が狭い場合はカウンタモード(CTR)または高帯域幅の場合はGalois/Counter Mode(GCM)で使用する必要がある(ブロック暗号/暗号利用モード参照) — 対称鍵暗号
- 楕円曲線DSA - 電子署名
- 楕円曲線ディフィー・ヘルマン鍵共有 - 鍵合意
- SHA-2(SHA-256およびSHA-384) - 暗号学的ハッシュ関数

CNSSP-15では、「機密(Secret)」レベルに分類される情報を保護するには256ビットの楕円曲線(FIPS
186-2で指定)、SHA-256、および128ビットのAES、「最高機密(Top Secret)」の情報を保護するには384ビットの楕円曲線 (FIPS 186-2で指定)、SHA-384、および256ビット鍵付きAESが必要としている。

| 実装 | TLS 1.2 Suite B |
| --- | --- |
| GnuTLS | Yes |
| OpenSSL | Yes |
| wolfSSL | Yes |
|
| 実装 | TLS 1.2 Suite B |

## 認定

| 実装 | FIPS 140-1, FIPS 140-2 | 組み込みFIPSソリューション |
| --- | --- | --- |
| GnuTLS | Red Hat Enterprise Linux GnuTLS Cryptographic Module (#2780) |  |
| OpenSSL | OpenSSL FIPS Object Module: 1.0 (#624), 1.1.1 (#733), 1.1.2 (#918), 1.2, 1.2.1, 1.2.2, 1.2.3 or 1.2.4 (#1051) 2.0, 2.0.1, 2.0.2, 2.0.3, 2.0.4, 2.0.5, 2.0.6, 2.0.7 or 2.0.8 (#1747) |  |
| wolfSSL | wolfCrypt FIPS Module: 4.0 (#3389) See details on NIST certificate for validated Operating Environments wolfCrypt FIPS Module: 3.6.0 (#2425) See details on NIST certificate for validated Operating Environments | Yes |
|
| 実装 | FIPS 140-1, FIPS 140-2 | 組み込みFIPSソリューション |

## 鍵交換アルゴリズム(証明書のみ)

このセクションでは、さまざまな実装で使用可能な証明書検証機能を示す。

| 実装 | RSA | RSA-EXPORT (安全でない) | ディフィー・ヘルマン鍵共有-RSA(Forward secrecy) | ディフィー・ヘルマン鍵共有-DSS(Forward secrecy) | ECDH-ECDSA | ECDHE-ECDSA (forward secrecy) | ECDH-RSA | ECDHE-RSA (forward secrecy) | GOST規格 R 34.10-94, 34.10-2001 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| GnuTLS | Yes | No | Yes | デフォルトでは無効 | No | Yes | No | Yes | No |
| OpenSSL | Yes | No | Yes | デフォルトでは無効 | Yes | Yes | Yes | Yes | Yes |
| wolfSSL | Yes | No | Yes | No | Yes | Yes | Yes | Yes | No |
|
| 実装 | RSA | RSA-EXPORT (安全でない) | ディフィー・ヘルマン鍵共有-RSA(Forward secrecy) | ディフィー・ヘルマン鍵共有-DSS(Forward secrecy) | ECDH-ECDSA | ECDHE-ECDSA (forward secrecy) | ECDH-RSA | ECDHE-RSA (forward secrecy) | GOST規格 R 34.10-94, 34.10-2001 |

## 証明書の検証方法

| 実装 | アプリケーション定義 | PKIXパス検証 | CRL | OCSP | DANE (DNSSEC) | Trust on First Use (TOFU) |
| --- | --- | --- | --- | --- | --- | --- |
| GnuTLS | Yes | Yes | Yes | Yes | Yes | Yes |
| OpenSSL | Yes | Yes | Yes | Yes | Yes | No |
| wolfSSL | Yes | Yes | Yes | Yes | No | No |
| 実装 | PKIXパス検証 | CRL | CRL | OCSP | DANE (DNSSEC) | Trust on First Use (TOFU) |

## 暗号化アルゴリズム

### 廃止されたアルゴリズム

| 実装 | ブロック暗号/暗号利用モード | | | | ストリーム暗号 | |
| --- | --- | --- | --- | --- | --- | --- |
| IDEA CBC (安全でない) | DES CBC (安全でない) | DES-40 CBC (EXPORT、安全でない) | RC2-40 CBC (EXPORT、安全でない) | RC4-128 (安全でない) | RC4-40 (EXPORT、安全でない) |
| GnuTLS | No | No | No | No | デフォルトでは無効 | No |
| OpenSSL | デフォルトでは無効 | デフォルトでは無効 | No | No | デフォルトでは無効 | No |
| wolfSSL | デフォルトでは無効 | No | No | No | デフォルトでは無効 | No |
|
| 実装 | ブロック暗号/暗号利用モード | | | | ストリーム暗号 | |
| IDEA CBC (安全でない) | DES CBC (安全でない) | DES-40 CBC (EXPORT、安全でない) | RC2-40 CBC (EXPORT、安全でない) | RC4-128 (安全でない) | RC4-40 (EXPORT、安全でない) |
|

## サポートされている楕円曲線

このセクションでは、各実装でサポートされている楕円曲線をリストする。

## データの完全性

| 実装 | HMAC-MD5 | HMAC-SHA1 | HMAC-SHA256/384 | AEAD | GOST 28147-89 IMIT | GOST R 34.11-94 |
| --- | --- | --- | --- | --- | --- | --- |
| GnuTLS | Yes | Yes | Yes | Yes | No | No |
| OpenSSL | Yes | Yes | Yes | Yes | Yes | Yes |
| wolfSSL | Yes | Yes | Yes | Yes | No | No |
|
| 実装 | HMAC-MD5 | HMAC-SHA1 | HMAC-SHA256/384 | AEAD | GOST 28147-89 IMIT | GOST R 34.11-94 |

## 圧縮

CRIME攻撃はTLS圧縮を利用するため、慎重な実装ではTLSレベルでの圧縮は使用していない。また、HTTP圧縮は無関係でこの攻撃の影響は受けないが、関連するBREACH攻撃によって悪用される点に注意が必要である。

| 実装 | DEFLATE (安全でない) |
| --- | --- |
| GnuTLS | デフォルトでは無効 |
| OpenSSL | デフォルトでは無効 |
| wolfSSL | デフォルトでは無効 |
|
| 実装 | DEFLATE |

## 拡張機能

各実装がサポートする拡張機能をリストする。安全な再ネゴシエーション拡張(Secure Renegotiation
extension)はHTTPSクライアントセキュリティにとって重要な意味を持つ。クライアントがTLS再ネゴシエーション(TLS renegotiation)を実装しているかどうかにかかわらず、この拡張を実装していないTLSクライアントは攻撃に対して脆弱である。

## アシスト暗号

このセクションでは、暗号化を最適化するCPU命令セットの利点を生かした実装、ハードウェア暗号やデータ分離のためのシステム固有のデバイス利用について示す。

## システム固有のバックエンド

使用可能なオペレーティングシステム固有のバックエンド、または別の実装によって提供されるバックエンドを利用する実装の機能を示す。

## 暗号モジュール/トークンのサポート

| 実装 | TPM support | Hardware token support | Objects identified via |
| --- | --- | --- | --- |
| GnuTLS | Yes | PKCS11 | RFC7512 PKCS #11 URLs |
| OpenSSL | Yes | PKCS11 (サードパーティモジュール経由) | RFC7512 PKCS #11 URLs |
| wolfSSL | No | No |  |
|
| 実装 | TPM support | Hardware token support | Objects identified via |

## コードの依存関係

| 実装 | 依存 | オプションの 依存 |
| --- | --- | --- |
| GnuTLS | libc nettle gmp | zlib (compression) p11-kit (PKCS #11) trousers (TPM) |
| OpenSSL | libc | zlib (compression) |
| wolfSSL | None | libc, zlib (compression) |
|
| 実装 | 依存 | オプションの 依存 |

## 開発環境

| 実装 | Namespace | ビルドツール | API マニュアル | バックエンド暗号 | Template:OpenSSL互換レイヤ |
| --- | --- | --- | --- | --- | --- |
| GnuTLS | gnutls\_\* | Autoconf, automake, libtool | マニュアルとAPIリファレンス(HTML, PDF) | 外部, libnettle | Yes (limited) |
| OpenSSL | SSL\_\*  SHA1\_\*  MD5\_\*  EVP\_\*  ... | Makefile | Man pages | 含まれる (monolithic) | — |
| wolfSSL | CyaSSL\_\*  SSL\_\* | Autoconf, automake, libtool, MSVC project workspaces, XCode projects, CodeWarrior projects, MPLAB X projects, Keil, IAR, Clang, GCC | マニュアルとAPIリファレンス(HTML, PDF) | 含まれる (monolithic) | Yes (約10%のAPI) |
|
| 実装 | Namespace | ビルドツール | API マニュアル | バックエンド暗号 | OpenSSL互換レイヤ |

## 移植性に関する懸念

| 実装 | プラットフォーム要件 | ネットワーク要件 | スレッドの安全性 | ランダムシード | クロスコンパイル | No OS (ベアメタル) | サポートOS |
| --- | --- | --- | --- | --- | --- | --- | --- |
| GnuTLS | C89 | POSIX send()とrecv(). API to supply your own replacement. | スレッドセーフ、POSIXかWindowsでない場合、カスタムmutexでフック | プラットフォームによる | Yes | No | POSIXプラットフォーム、Windows、GNU/Linux, Win32/64, OS X, Solaris, OpenWRT, FreeBSD, NetBSD, OpenBSDなどの一般的にテストされたプラットフォーム |
| OpenSSL | C89 | ? | mutexのコールバックが必要 | ネイティブAPI経由 | Yes | No | Unix, DOS (with djgpp), Windows, OpenVMS, MacOS, NetWare, eCos |
| wolfSSL | C89 | POSIX send()とrecv(). API to supply your own replacement. | スレッドセーフ、PThreadsかWinThreadsがなければmutexでフック。オフに設定可 | wolfCryptでランダムシード | Yes | Yes | Win32/64, Linux, OS X, Solaris, ThreadX, VxWorks, FreeBSD, NetBSD, OpenBSD, embedded Linux, Yocto Project, OpenEmbedded, WinCE, Haiku, OpenWRT, iPhone (iOS), Android, Nintendo Wii and Gamecube through DevKitPro, QNX, MontaVista, NonStop, TRON/ITRON/μITRON, Micrium μC/OS-III, FreeRTOS, SafeRTOS, NXP/Freescale MQX, Nucleus, TinyOS, HP/UX, AIX, ARC MQX, Keil RTX, TI-RTOS, uTasker, embOS, INtime, Mbed, uT-Kernel, RIOT, CMSIS-RTOS, FROSTED, Green Hills INTEGRITY, TOPPERS, PetaLinux, Apache mynewt |
|
| 実装 | プラットフォーム要件 | ネットワーク要件 | スレッドの安全性 | ランダムシード | クロスコンパイル | No OS (ベアメタル) | サポートOS |

## 関連

- SCTP — DTLS サポートあり
- DCCP — DTLS サポートあり
- SRTP — DTLS サポートあり(DTLS-SRTP)、SRTCP