TLS的应用对比

安全传输层协议 (TLS) 保障网络间的通信安全。本文比较几种最常用的TLS应用库。市面上存在许多种自由开源的TLS应用软件。

所有类目的比较均使用下列概述部分中列出软件的稳定版本。该比较仅限于与TLS协议直接相关的功能。

 概述 
 应用软件 开发商 开源 软件证书 版权拥有 编辑语言 最新版本，日期 源于 Botan Jack Lloyd 是  Jack Lloyd C++  美国 (Vermont) GnuTLS GnuTLS项目 是  自由软件基金会 C  欧洲 (希腊和瑞典) LibreSSL OpenBSD Project 是  Eric Young, Tim Hudson, Sun, OpenSSL project, OpenBSD Project, and others C, 汇编语言  加拿大 MatrixSSLThe features listed are for the closed source version PeerSec Networks   and commercial license PeerSec Networks C  美国 Mbed TLS (previously PolarSSL) Arm   and commercial license Arm Holdings C  EU (Netherlands) Network Security Services (NSS) Mozilla, AOL, Red Hat, Sun, Oracle, Google and others   NSS contributors C, 汇编语言  US OpenSSL OpenSSL 项目 是  Eric Young, Tim Hudson, Sun, OpenSSL 项目, 及其他 C、汇编语言  澳大利亚/欧洲 wolfSSL (曾名为 CyaSSL) wolfSSL 是  and commercial license wolfSSL 公司. C  美国

 协议支持 
TLS协议存在几种版本。 SSL 2.0是一个被弃用的[rfc:6176 RFC6176: Prohibiting Secure Sockets Layer (SSL) Version 2.0] 协议版本，具有明显的缺陷。 SSL 3.0（1996）和TLS 1.0（1999）是具有两个CBC-填充弱点的版本——在2001年由Serge Vaudenay解析. 。 TLS 1.1（2006）通过将CBC块密码切换到随机初始化矢量（IV）解决了其中一个问题，RFC7366[rfc:7366 RFC7366: Encrypt-then-MAC for Transport Layer Security (TLS) and Datagram Transport Layer Security]强调了 更严重的mac-pad-encrypt使用问题而不是使pad-mac-encrypt更安全的问题。

在2011年底，一种用于SSL 3.0和TLS 1.0的解决方法，基本等同于TLS 1.1的随机的IV被很多应用软件广泛采用 。所以从安全角度来看，所有现有TLS 1.0，1.1和1.2版本在2030年前均在基本协议中提供相同的强度协议并适用于128位，据 NIST SP800-57。在2014年，SSL 3.0的POODLE漏洞被发现，其利用在CBCd的已知漏洞，以及浏览器中不安全的回退协商。

TLS 1.2（2008）是最新发布的基本协议，引入了一种用于识别数字签名的散列方法。虽然在SSL 3.0保守选择（rsa，sha1 + md5）上允许将来使用更强大的散列函数进行数字签名（rsa，sha256 / sha384 / sha512），但TLS 1.2协议不经意间变化并大大削弱了默认数字签名并提供（rsa，sha1）甚至（rsa，md5）。TLSv1.2's Major Differences from TLSv1.1

数据报传输层安全性（DTLS或数据报TLS）1.0是针对面向数据包的传输层的TLS 1.1修改，其中必须容忍数据包丢失和数据包重新排序。基于TLS 1.2的修订版DTLS 1.2于2012年1月发布RFC 6347

在SSL 2.0和SSL 3.0中存在已知的漏洞。除了可预测的IV（存在简单的解决方法）之外，所有当前已知的漏洞都会影响所有版本的TLS 1.0 / 1.1 / 1.2。

 应用软件 SSL 2.0 (不安全) SSL 3.0 (不安全)RFC 6101 TLS 1.0RFC 2246 TLS 1.1RFC 4346 TLS 1.2 TLS 1.3 DTLS 1.0RFC 4347 DTLS 1.2 Botan        GnuTLS         MatrixSSL         Mbed TLS      (experimental)   NSS         LibreSSL         OpenSSL         wolfSSL        

 NSA Suite B 密码学 
NSA Suite B 密码学 (RFC 6460) 的必须部分:

高级加密标准 (AES)， 密钥大小为128和256位。对于业务流量，AES应与低带宽流量的计数器模式（CTR）或高带宽流量的伽罗瓦/计数器模式（GCM）操作模式一起使用（请参阅分块密码模式操作） - 对称加密
椭圆曲线数字签名算法（ECDSA） - 数字签名
椭圆曲线 Diffie-Hellman（ECDH） - 密钥协议
安全散列算法2  (SHA-256 和 SHA-384) — 消息摘要

根据CNSSP-15，256位椭圆曲线（FIPS 186-2中），SHA-256和AES 128位密钥足以保护机密信息达到Secret级别，而384位椭圆曲线（在FIPS 186-2中指定），SHA-384和带有256位密钥的AES是保护最高机密信息所必需的。

 应用软件 TLS 1.2 Suite B Botan  GnuTLS  LibreSSL  MatrixSSL  Mbed TLS  NSS  OpenSSL  wolfSSL 

 证书 
请注意，某些认证已受到实际参与研发人的严重负面批评。

应用软件FIPS 140-1, FIPS 140-2通用标准Embedded FIPS Solution 第一层面 Level 2 Botan 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   LibreSSL no support MatrixSSL  Mbed TLS NSS   OpenSSL   wolfSSL  

 密钥交换算法（仅限于证书） 
本节列出了在不同应用软件中中可用的证书验证功能。
 应用软件 RSARFC 5246 RSA-EXPORT (不安全) DHE-RSA (forward secrecy) DHE-DSS (forward secrecy) ECDH-ECDSARFC 4492 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) Botan          GnuTLS          LibreSSL           MatrixSSL          Mbed TLS          NSS          OpenSSL          wolfSSL         

 密钥交换算法（备选密钥交换） 
 应用软件 SRPRFC 5054 SRP-DSS SRP-RSA PSK-RSARFC 4279 PSK DHE-PSK (前向保密) ECDHE-PSK (前向保密)RFC 5489 KRB5RFC 2712 DH-ANON (不安全) ECDH-ANON (不安全) Botan           GnuTLS           LibreSSL            MatrixSSL           Mbed TLS            NSS           OpenSSL           wolfSSL           

 证书验证算法 
 应用软件 应用程序定义 PKIX path validationRFC 5280 CRLRFC 3280 OCSPRFC 2560 DANE (DNSSEC)RFC 6698, RFC 7218 首用信任 (TOFU) Botan       GnuTLS       LibreSSL       MatrixSSL       Mbed TLS       NSS       OpenSSL       wolfSSL      

 加密算法 
应用软件 分组密码 的 操作模式流密码  None AES GCMRFC 5288, RFC 5289 AES CCMRFC 6655, RFC 7251 AES CBC Camellia GCMRFC 6367 Camellia CBCRFC 5932, RFC 6367 ARIA GCM ARIA CBCRFC 6209 SEED CBCRFC 4162  CBC(不安全)  CNT(提出)This algorithm is not defined yet as TLS cipher suites in RFCs, is proposed in drafts. ChaCha20-Poly1305RFC 7905 Null(insecure)authentication only, no encryption Botan             GnuTLS             LibreSSL             MatrixSSL             Mbed TLS              NSS    This algorithm is implemented in an NSS fork used by Pale Moon.         OpenSSL             wolfSSL            

 废弃算法 
应用软件 分组密码 的 操作模式流密码 IDEA CBC(不安全) DES CBC(不安全) DES-40 CBC(EXPORT, 不安全)40 bits strength of cipher suites were designed to operate at reduced key lengths in order to comply with US regulations about the export of cryptographic software containing certain strong encryption algorithms (see Export of cryptography from the United States). These weak suites are forbidden in TLS 1.1 and later. RC2-40 CBC(EXPORT, 不安全) RC4-128(不安全)The RC4 attacks weaken or break RC4 used in SSL/TLS. Use of RC4 is prohibited by RFC 7465. RC4-40(EXPORT, 不安全)The RC4 attacks weaken or break RC4 used in SSL/TLS. Botan       GnuTLS       LibreSSL       MatrixSSL       Mbed TLS       NSS       OpenSSL       wolfSSL      

 支持的椭圆曲线 

 在 RFC 8446 (for TLS 1.3) 和 RFC 8422, 7027 (for TLS 1.2 and earlier) 中定义的曲线 
 适用的 TLS 版本TLS 1.3 and earlier TLS 1.2 and earlier 应用软件 secp256r1prime256v1(0x0017,RFC 8446 23RFC 8422) secp384r1(0x0018, 24) secp521r1(0x0019, 25) X25519(0x001D, 29) X448(0x001E, 30) brainpoolP256r1(26)RFC 7027 brainpoolP384r1(27) brainpoolP512r1(28) Botan         BoringSSL    (disabled by default)      BSAFE         GnuTLS         JSSE    x25519: JDK 13+Ed25519:JDK 15+ x448: JDK 13+Ed448: JDK 15+    LibreSSL         MatrixSSL         Mbed TLS         NSS         OpenSSL         Schannel Vista/2008, 7/2008R2, 8/2012, 8.1/2012R2, 10         Secure Transport         wolfSSL         Erlang/OTP SSL application         Implementation secp256r1prime256v1(0x0017, 23) secp384r1(0x0018, 24) secp521r1(0x0019, 25) X25519(0x001D, 29) X448(0x001E, 30) brainpoolP256r1(26) brainpoolP384r1(27) brainpoolP512r1(28)

 RFC 8422 中弃用的曲线 
 应用! 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) Botan               GnuTLS               LibreSSL               MatrixSSL               Mbed TLS               NSS               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) arbitrary prime curves(0xFF01)Negotiation of arbitrary curves has been shown to be insecure for certain curve sizes  arbitrary char2 curves(0xFF02) Botan           GnuTLS           LibreSSL           MatrixSSL           Mbed TLS           NSS           OpenSSL           wolfSSL           应用 secp160k1(15) secp160r1(16) secp160r2(17) secp192k1(18) secp192r1prime192v1(19) secp224k1(20) secp224r1(21) secp256k1(22) arbitrary prime curves(0xFF01) arbitrary char2 curves(0xFF02)

 Notes

 数据完整性 
 应用软件 HMAC-MD5 HMAC-SHA1 HMAC-SHA256/384 AEAD GOST 28147-89 IMIT GOST R 34.11-94 Botan       GnuTLS       LibreSSL       MatrixSSL       Mbed TLS       NSS       OpenSSL       wolfSSL      

 压缩 
请注意，CRIME 安全漏洞 利用了TLS压缩的优势，因此传统应用不会在TLS层启用压缩。 HTTP 压缩是不相关的且不受此漏洞攻击的影响，但会被BREACH相关的攻击利用。
 应用软件 DEFLATERFC 3749(不安全) Botan  GnuTLS  LibreSSL  MatrixSSL  Mbed TLS  NSS  OpenSSL  wolfSSL 

 扩展 
在本节中列出了每个应用支持的扩展。请注意，安全重新协商扩展对于HTTPS客户端安全至关重要。不执行TLS协议的客户端很容易受到攻击，无论客户端是否实施TLS重新协商。

 Implementation Secure RenegotiationRFC 5746 Server Name IndicationRFC 6066 ALPNRFC 7301 Certificate Status Request OpenPGPRFC 6091 Supplemental DataRFC 4680 Session TicketRFC 5077 Keying Material ExporterRFC 5705 Maximum Fragment Length Truncated HMAC Encrypt-then-MACRFC 7366 TLS Fallback SCSVRFC 7507 Extended Master SecretRFC 7627 ClientHello PaddingRFC 7685 Raw Public KeysRFC 7250 Botan                GnuTLS               LibreSSL      ?  ?        MatrixSSL                Mbed TLS                NSS                OpenSSL      ?  ?        wolfSSL               

 辅助加密 
本节列出了已知的利用CPU指令集优化加密，或利用系统特定允许访问底层加密硬件加速或分离数据的设备。
 应用软件 PKCS #11 device Intel AES-NI VIA PadLock ARMv8-A Intel SGX Intel QAT GnuTLS       OpenSSL https://habrahabr.ru/post/134725/ , http://forum.rutoken.ru/topic/1639/ , https://dev.rutoken.ru/pages/viewpage.action?pageId=18055184       wolfSSL      

 系统特定的后端 
本节列出了已知利用可用操作系统特定后端或另一个提供的后端的应用。
 应用软件 /dev/crypto Windows CSP 一般加密CommonCrypto OpenSSL  GnuTLS     OpenSSL     wolfSSL    

 加密模块/令牌支持 
 Implementation TPM support Hardware token support Objects identified via Botan    GnuTLS   RFC7512 PKCS #11 URLsRFC 7512 LibreSSL   Custom method MatrixSSL    Mbed TLS   Custom method NSS   OpenSSL   RFC7512 PKCS #11 URLs wolfSSL   

 代码属性 
 应用软件 属性 可选属性 Botan C++11 sqlitezlib (compression)bzip2  (compression)liblzma (compression)boostopenssl (crypto backend)trousers (TPM) GnuTLS libcnettlegmp zlib (compression)p11-kit (PKCS #11)trousers (TPM) MatrixSSL none zlib (compression) MatrixSSL-open libc or newlib Mbed TLS libc libpkcs11-helper (PKCS #11)zlib (compression) NSS libclibnspr4libsoftokn3libplc4libplds4 zlib (compression) OpenSSL libc zlib (压缩) wolfSSL None libc, zlib (压缩)

 开发环境 
 应用软件 Namespace 建设工具 API 手册 加密后端 OpenSSL 兼容层 Botan Botan::TLS Makefile Sphinx Included (pluggable)  GnuTLS gnutls_* Autoconf, automake, libtool Manual and API reference (HTML, PDF) External, libnettle  (部分) MatrixSSL matrixSsl_*
ps* Makefile, MSVC project workspaces, Xcode projects for OS X and iOS API Reference (PDF), Integration Guide Included (pluggable)  (Subset: SSL_read, SSL_write, etc.) Mbed TLS mbedtls_ssl_*
mbedtls_sha1_*
mbedtls_md5_*
mbedtls_x509*
... Makefile, CMake, MSVC project workspaces, yotta API Reference + High Level and Module Level Documentation (HTML) Included (monolithic)  NSS CERT_*
SEC_*
SECKEY_*
NSS_*
PK11_*
SSL_*
... Makefile Manual (HTML) Included, PKCS#11 basedOn the fly replaceable/augmentable.  (separate package called nss_compat_ossl) OpenSSL SSL_*
SHA1_*
MD5_*
EVP_*
... Makefile Man pages Included (monolithic)  wolfSSL CyaSSL_*
SSL_* Autoconf, automake, libtool, MSVC project workspaces, XCode projects, CodeWarrior projects, MPLAB X projects, Keil, IAR, Clang, GCC Manual and API Reference (HTML, PDF) Included (monolithic)  (大约 10% of API)

 移植问题 
 应用软件 平台要求 网络要求 线程安全 随机速度 能够交叉编译 No OS (bare metal) 可支持的操作系统 Botan C++11 None  Platform-dependent  Windows, Linux, macOS, Android, iOS, FreeBSD, OpenBSD, Solaris, AIX, HP-UX, QNX, BeOS, IncludeOS GnuTLS C89 POSIX send() and recv(). API 支持所找的替代品.  取决于平台   基本任何 POSIX 平台 or Windows, 一般已测试的平台包含 GNU/Linux, Win32/64, OS X, Solaris, OpenWRT, FreeBSD, NetBSD, OpenBSD. MatrixSSL C89 None  Platform dependent   All Mbed TLS C89 POSIX read() and write(). API to supply your own replacement.  Random seed set through entropy pool   Known to work on: Win32/64, Linux, macOS, Solaris, FreeBSD, NetBSD, OpenBSD, OpenWRT, iPhone (iOS), Xbox, Android, eCos, SeggerOS NSS C89, NSPR NSPR PR_Send() and PR_Recv(). API to supply your own replacement.  Platform dependentFor Unix/Linux it uses /dev/urandom if available, for Windows it uses CAPI. For other platforms it gets data from clock, and tries to open system files. NSS has a set of platform dependent functions it uses to determine randomness.  (but cumbersome)  AIX, Android, FreeBSD, NetBSD, OpenBSD, BeOS, HP-UX, IRIX, Linux, macOS, OS/2, Solaris, OpenVMS, Amiga DE, Windows, WinCE, Sony PlayStation OpenSSL C89? ?  通过原始API设置   Unix, DOS (with djgpp), Windows, OpenVMS, MacOS, NetWare, eCos wolfSSL C89 POSIX send() and recv(). API 支持所找的替代品.  通过 wolfCrypt设置随机速度   Win32/64, Linux, OS X, Solaris, ThreadX, VxWorks, FreeBSD, NetBSD, OpenBSD, embedded Linux, Haiku, OpenWRT, iPhone (iOS), Android, Nintendo Wii and Gamecube through DevKitPro, QNX, MontaVista, OpenCL, NonStop, TRON/ITRON/µITRON, Micrium's µC OS, FreeRTOS, SafeRTOS, Freescale MQX, Nucleus, TinyOS, HP/UX, Keil RTX, TI-RTOS

其他
 SCTP — 含DTLS 支持
 DCCP — 含 DTLS 支持
 SRTP — 含 DTLS 支持 (DTLS-SRTP) 安全实时传输控制协议 (SRTCP)

 参考文献 

Category:加密软件
Category:傳輸層安全協議