TLS実装の比較

Transport Layer Security (TLS) プロトコルは、ネットワーク間の通信を保護する機能を提供する。このTLS実装の比較（ティーエルエスじっそうのひかく）では、最も知られるライブラリを比較する。

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

 概要 
 実装 開発元 オープンソース ソフトウェアライセンス 著作権所有者 言語 最新の安定バージョン、リリース日 出所 GnuTLS GnuTLS project   フリーソフトウェア財団 C  EU (Greece and Sweden) OpenSSL OpenSSL project   Eric Young、Tim Hudson、Sun、OpenSSL projectなど C, アセンブリ言語  Australia/EU wolfSSL  wolfSSL    商用ライセンス wolfSSL Inc. C  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のすべてのバージョンに影響がでる。

 実装 SSL 2.0 (安全でない) SSL 3.0 (安全でない) TLS 1.0 TLS 1.1 TLS 1.2 TLS 1.3draft-ietf-tls-tls13-11 - The Transport Layer Security (TLS) Protocol Version 1.3 DTLS 1.0 DTLS 1.2 GnuTLS         OpenSSL         wolfSSL         実装 SSL 2.0 (安全でない) SSL 3.0 (安全でない) TLS 1.0 TLS 1.1 TLS 1.2 TLS 1.3 DTLS 1.0 DTLS 1.2

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

NSA Suite B暗号化（）に必要なコンポーネント:

 鍵サイズが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  OpenSSL  wolfSSL  実装 TLS 1.2 Suite B

  認定 
 実装 FIPS 140-1, FIPS 140-2 組み込みFIPSソリューション GnuTLS"While, as a free software project, we are not actively pursuing this kind of certification, GnuTLS has been FIPS-140-2 certified in several systems by third parties." GnuTLS 3.5.6 B.5 Certification  OpenSSL  wolfSSL   実装 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-2001draft-chudov-cryptopro-cptls-04 - GOST 28147-89 Cipher Suites for Transport Layer Security (TLS) GnuTLS          OpenSSL         openssl/engines/ccgost/README.gost wolfSSL          実装 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-2001draft-chudov-cryptopro-cptls-04 - GOST 28147-89 Cipher Suites for Transport Layer Security (TLS)

  鍵交換アルゴリズム（代替鍵交換）  
 実装 SRP SRP-DSS SRP-RSA PSK-RSA PSK DHE-PSK (forward secrecy) ECDHE-PSK (forward secrecy) KRB5 DH-ANON (安全でない) ECDH-ANON (安全でない) GnuTLS           OpenSSL           wolfSSL           実装 SRP SRP-DSS SRP-RSA PSK-RSA PSK DHE-PSK (forward secrecy) ECDHE-PSK (forward secrecy) KRB5 DH-ANON (安全でない) ECDH-ANON (安全でない)

  証明書の検証方法 
 実装 アプリケーション定義 PKIXパス検証 CRL OCSP DANE (DNSSEC),  Trust on First Use (TOFU) GnuTLS       OpenSSL       wolfSSL       実装 PKIXパス検証 CRL CRL OCSP DANE (DNSSEC) Trust on First Use (TOFU)

  暗号化アルゴリズム 
実装 ブロック暗号/暗号利用モード  ストリーム暗号  なし AES GCM,  AES CCM,  AES CBC Camellia GCM Camellia CBC,  ARIA GCM ARIA CBC SEED CBC  CBC(安全でない)  CNT(proposed)このアルゴリズムは草案で提案されている段階で、RFCのTLS暗号スイートとしてはまだ定義されていない。 ChaCha20-Poly1305 Null(安全でない)認証のみ、暗号化なし GnuTLS             OpenSSL             wolfSSL            実装 ブロック暗号/暗号利用モード  ストリーム暗号  なし AES GCM AES CCM AES CBC Camellia GCM Camellia CBC ARIA GCM ARIA CBC SEED CBC  CBC(安全でない)  CNT(proposed) ChaCha20-Poly1305 Null(安全でない)
 Notes

  廃止されたアルゴリズム 
実装 ブロック暗号/暗号利用モード ストリーム暗号 IDEA CBC(安全でない)https://sweet32.info DES CBC(安全でない) DES-40 CBC(EXPORT、安全でない)特定の強力な暗号化アルゴリズムを含む暗号化ソフトウェアの輸出に関する米国の規制を遵守するために、40ビット強度の暗号スイートが短縮された鍵長で動作するように設計されている。これらの弱いスイートはTLS 1.1以降では禁止 RC2-40 CBC(EXPORT、安全でない) RC4-128(安全でない)RC4攻撃によりSSL/TLSで使用されるRC4は安全でないとされる。RC4の使用はで禁止されている RC4-40(EXPORT、安全でない)RC4攻撃によりSSL/TLSで使用されるRC4は安全でないとされる。RC4の使用はで禁止されている GnuTLS       OpenSSL       wolfSSL      実装 ブロック暗号/暗号利用モード ストリーム暗号 IDEA CBC(安全でない)https://sweet32.info DES CBC(安全でない) DES-40 CBC(EXPORT、安全でない) RC2-40 CBC(EXPORT、安全でない) RC4-128(安全でない) RC4-40(EXPORT、安全でない)
 Notes

  サポートされている楕円曲線 
このセクションでは、各実装でサポートされている楕円曲線をリストする。
 実装 sect163k1(1) sect163r1(2) sect163r2(3) sect193r1(4) sect193r2(5) sect233k1(6) sect233r1(7) sect239k1(8) sect283k1(9) sect283r1(10) sect409k1(11) sect409r1(12) sect571k1(13) sect571r1(14) GnuTLS               OpenSSL               wolfSSL               実装 sect163k1(1) sect163r1(2) sect163r2(3) sect193r1(4) sect193r2(5) sect233k1(6) sect233r1(7) sect239k1(8) sect283k1(9) sect283r1(10) sect409k1(11) sect409r1(12) sect571k1(13) sect571r1(14)

 実装 secp160k1(15) secp160r1(16) secp160r2(17) secp192k1(18) secp192r1prime192v1(19) secp224k1(20) secp224r1(21) secp256k1(22) secp256r1prime256v1(23) secp384r1(24) secp521r1(25) arbitrary prime curves(0xFF01)Negotiation of arbitrary curves has been shown to be insecure for certain curve sizes  arbitrary char2 curves(0xFF02) GnuTLS              OpenSSL              wolfSSL              実装 secp160k1(15) secp160r1(16) secp160r2(17) secp192k1(18) secp192r1prime192v1(19) secp224k1(20) secp224r1(21) secp256k1(22) secp256r1prime256v1(23) secp384r1(24) secp521r1(25) arbitrary prime curves(0xFF01) arbitrary char2 curves(0xFF02)

 実装 brainpoolP256r1(26) brainpoolP384r1(27) brainpoolP512r1(28) X25519 Curve448 M221Curve2213 E222 Curve1174 E382 M383 Curve383187 Curve41417Curve3617 M511Curve511187 E521 GnuTLS               OpenSSL               wolfSSL               実装 brainpoolP256r1(26) brainpoolP384r1(27) brainpoolP512r1(28) Curve25519 Curve448 M221Curve2213 E222 Curve1174 E382 M383 Curve383187 Curve41417Curve3617 M511Curve511187 E521

  データの完全性 
 実装 HMAC-MD5 HMAC-SHA1 HMAC-SHA256/384 AEAD GOST 28147-89 IMIT GOST R 34.11-94 GnuTLS       OpenSSL       wolfSSL       実装 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クライアントは攻撃に対して脆弱である。
 実装 再ネゴシエーション Server Name Indication ALPN Certificate Status Request OpenPGP Supplemental Data Session Ticket Keying Material Exporter Maximum Fragment Length Truncated HMAC Encrypt-then-MAC TLS Fallback SCSV Extended Master Secret ClientHello Padding Raw Public Keys GnuTLS     廃止予定https://lists.gnupg.org/pipermail/gnutls-devel/2017-February/008309.html           OpenSSL      ?  ?    http://www.openssl.org/news/secadv_20141015.txt    wolfSSL                実装 再ネゴシエーション Server Name Indication ALPN Certificate Status Request OpenPGP  Supplemental Data  Session Ticket  Keying Material Exporter  Maximum Fragment Length  Truncated HMAC  Encrypt-then-MAC TLS Fallback SCSV Extended Master Secret ClientHello Padding Raw Public Keys

  アシスト暗号 
このセクションでは、暗号化を最適化するCPU命令セットの利点を生かした実装、ハードウェア暗号やデータ分離のためのシステム固有のデバイス利用について示す。
 実装 PKCS #11 device Intel AES-NI VIA PadLock ARMv8-A Intel SGX Intel QAT GnuTLS    https://lists.gnupg.org/pipermail/gnutls-devel/2016-October/008194.html   OpenSSL https://habrahabr.ru/post/134725/, https://forum.rutoken.ru/topic/1639/, https://dev.rutoken.ru/pages/viewpage.action?pageId=18055184      wolfSSL       実装 PKCS #11 device Intel AES-NI VIA PadLock ARMv8-A Intel SGX Intel QAT

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

  暗号モジュール/トークンのサポート  
 実装 TPM support Hardware token support Objects identified via GnuTLS   RFC7512 PKCS #11 URLsRFC 7512 OpenSSL   RFC7512 PKCS #11 URLs wolfSSL    実装 TPM support Hardware token support Objects identified via

  コードの依存関係 
 実装 依存 オプションの依存 GnuTLS libcnettlegmp zlib (compression)p11-kit (PKCS #11)trousers (TPM) OpenSSL libc zlib (compression) wolfSSL None libc, zlib (compression) 実装 依存 オプションの依存

  開発環境 
 実装 Namespace ビルドツール API マニュアル バックエンド暗号  GnuTLS gnutls_* Autoconf, automake, libtool マニュアルとAPIリファレンス(HTML, PDF) 外部, libnettle  (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)  (約10%のAPI) 実装 Namespace ビルドツール API マニュアル バックエンド暗号 OpenSSL互換レイヤ

  移植性に関する懸念 
 実装 プラットフォーム要件 ネットワーク要件 スレッドの安全性 ランダムシード クロスコンパイル No OS (ベアメタル) サポートOS GnuTLS C89 POSIX send()とrecv(). API to supply your own replacement.  プラットフォームによる   POSIXプラットフォーム、Windows、GNU/Linux, Win32/64, OS X, Solaris, OpenWRT, FreeBSD, NetBSD, OpenBSDなどの一般的にテストされたプラットフォーム OpenSSL C89完全にC89の枠内で記述されているわけではない。C99以降の文法、たとえばブロックの先頭以外で変数を宣言するなどの文法は用いず、古いコンパイラにも配慮した形式となってはいるが、C99で新規導入されたヘッダファイルであるstdint.hとそれが定義するビット長を明示する整数型(int8_t, int16_t, int32_tなど)を用いるため、C89にしか準拠していない開発環境ではstdint.h相当のものをユーザが準備する必要がある。また、OpenSSL 3.0以降はC言語規格で標準化されていない#pragma onceを多くのヘッダファイルが含むため、これをサポートしていない古いコンパイラ(GCCでは3.4未満)では処理できないソースとなっている。 ?  ネイティブAPI経由   Unix, DOS (with djgpp), Windows, OpenVMS, MacOS, NetWare, eCos wolfSSL C89 POSIX send()とrecv(). API to supply your own replacement.  wolfCryptでランダムシード   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

  参照 

  脚注 

Category:暗号ソフトウェア
Category:ソフトウェアの比較
Category:Transport Layer Security