Content deleted Content added
m Update dead OpenSLL links from link schema change. |
Davidghook (talk | contribs) |
||
(33 intermediate revisions by 13 users not shown) | |||
Line 2:
{{About|TLS libraries comparison|cryptographic libraries comparison|Comparison of cryptography libraries}}
{{redirect|Secure Transport|the transportation of valuables|Armored car (valuables)}}
The [[Transport Layer Security]] (TLS) protocol provides the ability to secure communications across or inside networks. This '''comparison of TLS implementations''' compares several of the most notable [[software library|libraries]]. There are several TLS implementations which are [[free software]] and [[Open-source software|open source]].
Line 8:
== Overview ==
{{sort-under}}
{| class="wikitable sortable sort-under" style="text-align: left; font-size: smaller"
|-
! Implementation
Line 142 ⟶ 143:
| {{yes}}
| {{free|[[Apache License]] 2.0, [[GNU General Public License#Version 2|GNU GPLv2]]+}} and commercial license
| Amazon.com, Inc.
| [[C (programming language)|C]]
| Continuous
Line 151 ⟶ 152:
| {{no}}
| {{proprietary}}
| Microsoft
|
| Windows 11, 2021-10-05
Line 168 ⟶ 169:
| wolfSSL<ref name="wolfsslproduct">{{cite web | url=https://www.wolfssl.com/wolfSSL/Products-wolfssl.html | title=wolfSSL product description | accessdate=2016-05-03}}</ref>
| {{yes}}
| {{free|[[GNU General Public License#Version
| wolfSSL Inc.<ref name="wolfsslcompany">{{cite web | url=https://www.wolfssl.com | title=wolfSSL Embedded SSL/TLS | accessdate=2016-05-03}}</ref>
| [[C (programming language)|C]], [[Assembly language|assembly]]
Line 208 ⟶ 209:
Note that there are known vulnerabilities in SSL 2.0 and SSL 3.0. In 2021, IETF published RFC 8996 also forbidding negotiation of TLS 1.0, TLS 1.1, and DTLS 1.0 due to known vulnerabilities. NIST SP 800-52 requires support of TLS 1.3 by January 2024. Support of TLS 1.3 means that two compliant nodes will never negotiate TLS 1.2.
{| class="wikitable sortable sort-under mw-collapsible" style="text-align: left; font-size: smaller"
|-
! Implementation
Line 219 ⟶ 220:
! [[Datagram Transport Layer Security|DTLS 1.0]] (deprecated)<ref name="auto3">{{cite IETF|rfc=4347}}</ref>
! [[Datagram Transport Layer Security|DTLS 1.2]]<ref name="RFC 6347" />
! [[Datagram Transport Layer Security|DTLS 1.3]]
|-
| [[Botan (programming library)|Botan]]
Line 249 ⟶ 250:
| {{okay|Yes}}
| {{yes}}
| {{Yes}}
| {{okay|Yes}}
| {{yes}}
Line 267 ⟶ 268:
| [[cryptlib]]
| {{yes|No}}
| {{yes|
| {{okay|Yes}}
| {{okay|Yes}}
| {{yes}}
| {{yes}}
| {{yes|No}}
| {{no}}
Line 543 ⟶ 544:
! [[Datagram Transport Layer Security|DTLS 1.0]] (deprecated)<ref name="auto3" />
! [[Datagram Transport Layer Security|DTLS 1.2]]<ref name="RFC 6347" />
! [[Datagram Transport Layer Security|DTLS 1.3]]
|}
{{Reflist|group=lower-alpha|refs=
Line 561 ⟶ 562:
* [[SHA-2|Secure Hash Algorithm 2]] (SHA-256 and SHA-384) — [[message digest]]
Per CNSSP-15, the 256-bit elliptic curve (specified in FIPS 186-2), SHA-256, and AES with 128-bit keys are sufficient for protecting classified information up to the [[
{| class="wikitable sortable sort-under" style="text-align: left; font-size: smaller"
|-
! Implementation
Line 624 ⟶ 625:
Note that certain certifications have received serious negative criticism from people who are actually involved in them.<ref>{{Cite web|url=http://index.html/|archiveurl=https://web.archive.org/web/20131227190128/http://veridicalsystems.com/blog/secure-or-compliant-pick-one/|url-status=dead|title=Speeds and Feeds › Secure or Compliant, Pick One|archivedate=December 27, 2013}}</ref>
{| class="wikitable sortable sort-under" style="text-align: left; font-size: smaller"
|-
! rowspan="2"|Implementation
! colspan="2"|[[FIPS 140-1]], [[FIPS 140-2]]<ref>{{cite web|url=http://csrc.nist.gov/groups/STM/cmvp/documents/140-1/140val-all.htm|title=Search - Cryptographic Module Validation Program - CSRC|website=csrc.nist.gov|access-date=2014-03-18|archive-url=https://web.archive.org/web/20141226152243/http://csrc.nist.gov/groups/STM/cmvp/documents/140-1/140val-all.htm|archive-date=2014-12-26|url-status=dead}}</ref>
! [[FIPS 140-3]]
|-
! Level 1
Line 636:
|-
| [[Botan (programming library)|Botan]]<ref>{{cite web|url=http://botan.randombit.net/faq.html?highlight=fips#is-botan-fips-140-certified|title="Is botan FIPS 140 certified?" Frequently Asked Questions — Botan|access-date=2014-11-16|archive-url=https://web.archive.org/web/20141129042131/http://botan.randombit.net/faq.html?highlight=fips#is-botan-fips-140-certified|archive-date=2014-11-29|url-status=dead}}</ref>
|
|
Line 642 ⟶ 641:
|-
|[[Bouncy Castle (cryptography)|Bouncy Castle]]
|{{yes|BC-FJA
|
|
Line 650 ⟶ 648:
| {{yes|Crypto-J 6.0 ([https://csrc.nist.gov/projects/cryptographic-module-validation-program/certificate/1785 1785], [https://csrc.nist.gov/projects/cryptographic-module-validation-program/certificate/1786 1786])<br />Crypto-J 6.1 / 6.1.1.0.1 ([https://csrc.nist.gov/projects/cryptographic-module-validation-program/certificate/2057 2057], [https://csrc.nist.gov/projects/cryptographic-module-validation-program/certificate/2058 2058])<br />Crypto-J 6.2 / 6.2.1.1 ([https://csrc.nist.gov/projects/cryptographic-module-validation-program/certificate/2468 2468], [https://csrc.nist.gov/projects/cryptographic-module-validation-program/certificate/2469 2469])<br />Crypto-J 6.2.4 ([https://csrc.nist.gov/projects/cryptographic-module-validation-program/certificate/3172 3172], [https://csrc.nist.gov/projects/cryptographic-module-validation-program/certificate/3184 3184])<br />Crypto-J 6.2.5 ([https://csrc.nist.gov/projects/cryptographic-module-validation-program/certificate/3819 #3819], [https://csrc.nist.gov/projects/cryptographic-module-validation-program/certificate/3820 #3820])<br />Crypto-J 6.3 ([https://csrc.nist.gov/projects/cryptographic-module-validation-program/certificate/4696 #4696], [https://csrc.nist.gov/projects/cryptographic-module-validation-program/certificate/4697 #4697])}}
|
|{{yes|Crypto-J 7.0 ([https://csrc.nist.gov/projects/cryptographic-module-validation-program/certificate/4892 4892])}}
|-
| [[cryptlib]]<ref>{{cite web|url=http://www.cs.auckland.ac.nz/~pgut001/cryptlib/faq.html#Q8|archive-url=https://web.archive.org/web/20131011085917/http://www.cs.auckland.ac.nz/~pgut001/cryptlib/faq.html#Q8|url-status=dead|archive-date=11 October 2013|title=cryptlib|date=11 October 2013}}</ref>
|
|
Line 661 ⟶ 657:
| [[GnuTLS]]<ref>{{cite web |title=B.5 Certification |url=https://www.gnutls.org/manual/gnutls.html#Certification |website=GnuTLS 3.7.7 |access-date=26 September 2022}}</ref>
| {{yes|Red Hat Enterprise Linux GnuTLS Cryptographic Module (#2780)}}
|
|
|-
| [[Java Secure Socket Extension|JSSE]]
|
|
Line 673 ⟶ 667:
| [[LibreSSL]]<ref name="OpenBSD5.6"/>
| no support
|
|
Line 679 ⟶ 672:
| [[MatrixSSL]]<ref>{{cite web|url=http://cdn2.hubspot.net/hub/327778/file-618993629-pdf/Matrix+SSL-3.pdf|title=Matrix SSL Toolkit|publisher=}}</ref>
| {{yes|SafeZone FIPS Cryptographic Module: 1.1 (#2389)}}
|
|
|-
| [[Mbed TLS]]<ref>{{cite web|url=https://mbed-tls.readthedocs.io/en/latest/kb/generic/is-mbedtls-fips-certified/|title=Is mbed TLS FIPS certified? - Mbed TLS documentation|website=Mbed TLS documentation}}</ref>
|
|
Line 692 ⟶ 683:
| {{yes|Network Security Services: 3.2.2 (#247)<br />Network Security Services Cryptographic Module: 3.11.4 (#815), 3.12.4 (#1278), 3.12.9.1 (#1837)}}
| {{yes|Netscape Security Module: 1 (#7<ref group="notes">with Sun [[Sparc]] 5 w/ Sun [[Solaris (operating system)|Solaris]] v 2.4SE (ITSEC-rated)</ref>), 1.01 (#47<ref group="notes">with Sun [[Ultra 5/10|Ultra-5]] w/ Sun [[Trusted Solaris]] version 2.5.1 (ITSEC-rated)</ref>)<br />Network Security Services: 3.2.2 (#248<ref group="notes">with [[Solaris (operating system)|Solaris]] v8.0 with [[AdminSuite]] 3.0.1 as specified in UK IT SEC CC Report No. P148 EAL4 on a SUN [[SPARC]] [[Ultra 1|Ultra-1]]</ref>)<br />Network Security Services Cryptographic Module: 3.11.4 (#814<ref group="notes">with these platforms; [[Red Hat Enterprise Linux]] Version 4 Update 1 AS on [[IBM System x|IBM xSeries 336]] with Intel Xeon CPU, [[Trusted Solaris]] 8 4/01 on [[Sun Blade (workstation)|Sun Blade 2500 Workstation]] with [[UltraSPARC IIIi]] CPU</ref>), 3.12.4 (#1279, #1280<ref group="notes">with these platforms; [[Red Hat Enterprise Linux]] v5 running on an [[IBM System x]]3550, [[Red Hat Enterprise Linux]] v5 running on an [[ProLiant|HP ProLiant DL145]], Sun [[Solaris 10]] 5/08 running on a Sun [[Sun Blade (workstation)|SunBlade 2000 workstation]], Sun [[Solaris 10]] 5/08 running on a [[Sun Java Workstation|Sun W2100z workstation]]</ref>)}}
|
|-
Line 698 ⟶ 688:
| {{yes|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)<br />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)}}
|
|
|-
Line 705 ⟶ 694:
|
| {{yes|aws-lc FIPS module<ref>{{cite web|url=https://docs.rs/rustls/0.23.12/rustls/manual/_06_fips/index.html|title=rustls FIPS documentation|accessdate=2024-08-28}} </ref> ([https://csrc.nist.gov/projects/cryptographic-module-validation-program/certificate/4759 #4759])}}
|-
| [[Schannel]]<ref>{{Cite web|url=https://technet.microsoft.com/en-us/library/security/cc750357.aspx#_Microsoft_FIPS_140|title=Microsoft FIPS 140 Validated Cryptographic Modules}}</ref>
| {{yes|Cryptographic modules in Windows NT 4.0, 95, 95, 2000, XP, Server 2003, CE 5, CE 6, Mobile 6.x, Vista, Server 2008, 7, Server 2008 R2, 8, Server 2012, RT, Surface, Phone 8<br />See details on [https://technet.microsoft.com/en-us/library/security/cc750357.aspx#_Microsoft_FIPS_140 Microsoft FIPS 140 Validated Cryptographic Modules]}}
|
|
|-
Line 716 ⟶ 703:
| {{yes|Apple FIPS Cryptographic Module: 1.0 (OS X 10.6, #1514), 1.1 (OS X 10.7, #1701)<br />Apple OS X CoreCrypto Module; CoreCrypto Kernel Module: 3.0 (OS X 10.8, #1964, #1956), 4.0 (OS X 10.9, #2015, #2016)<br />Apple iOS CoreCrypto Module; CoreCrypto Kernel Module: 3.0 (iOS 6, #1963, #1944), 4.0 (iOS 7, #2020, #2021)}}
|
|
|-
Line 723 ⟶ 709:
|
| {{yes|wolfCrypt FIPS Module (#4178)<br />See details on [https://csrc.nist.gov/projects/cryptographic-module-validation-program/certificate/4718 NIST certificate]}}
|-
|-class="sortbottom"
Line 730 ⟶ 715:
! Level 2
! Level 1
|-
! colspan="2"|FIPS 140-1, FIPS 140-2
Line 739 ⟶ 723:
== Key exchange algorithms (certificate-only) ==
This section lists the certificate verification functionality available in the various implementations.
{| class="wikitable sortable sort-under" style="text-align: left; font-size: smaller"
|-
! Implementation
Line 779 ⟶ 763:
| {{yes}}
| {{okay|Yes}}
| {{yes
| {{yes}}
| {{yes|No}}
| {{
| {{yes|No}}
|-
Line 998 ⟶ 982:
== Key exchange algorithms (alternative key-exchanges) ==
{| class="wikitable sortable sort-under" style="text-align: left; font-size: smaller"
|-
! Implementation
Line 1,044 ⟶ 1,028:
| {{yes}}
| {{no}}
| {{
| {{Yes|No}}
| {{Yes|No}}
Line 1,208 ⟶ 1,192:
== Certificate verification methods ==
{| class="wikitable sortable sort-under" style="text-align: left; font-size: smaller"
|-
! Implementation
Line 1,216 ⟶ 1,200:
! [[Online Certificate Status Protocol|OCSP]]<ref>{{cite IETF|rfc=2560}}</ref>
! [[DNS-based Authentication of Named Entities|DANE]] (DNSSEC)<ref>{{cite IETF|rfc=6698}}</ref><ref>{{cite IETF|rfc=7218}}</ref>
! [[Certificate Transparency|CT]]<ref>{{cite IETF |title=Certificate Transparency |rfc=6962 |idlink=Certificate Transparency |last1=Laurie |authorlink1=Ben Laurie |first1=B. |last2=Langley |first2=A. |last3=Kasper |first3=E. |date=June 2013 |publisher=[[Internet Engineering Task Force|IETF]] |access-date=2020-08-31 |issn=2070-1721}}</ref>
|-
Line 1,224 ⟶ 1,207:
| {{yes}}
| {{yes}}
| {{no}}
| {{unknown}}
Line 1,234 ⟶ 1,216:
| {{yes}}
| {{yes}}
| {{unknown}}
|-
Line 1,242 ⟶ 1,223:
| {{yes}}
| {{yes}}
| {{no}}
| {{unknown}}
Line 1,251 ⟶ 1,231:
| {{yes}}
| {{yes}}
| {{no}}
| {{unknown}}
|-
| [[GnuTLS]]
| {{yes}}
| {{yes}}
Line 1,269 ⟶ 1,247:
| {{yes}}
| {{yes}}
| {{no}}
| {{no}}
Line 1,278 ⟶ 1,255:
| {{yes}}
| {{yes}}
| {{no}}
| {{unknown}}
Line 1,287 ⟶ 1,263:
| {{yes}}
| {{yes}}<ref>{{cite web|url=http://www.matrixssl.org/blog/releases/matrixssl_3_8_3|title=MatrixSSL 3.8.3|accessdate=2017-01-18|archive-url=https://web.archive.org/web/20170119052959/http://www.matrixssl.org/blog/releases/matrixssl_3_8_3|archive-date=2017-01-19|url-status=dead}}</ref>
| {{no}}
| {{unknown}}
Line 1,296 ⟶ 1,271:
| {{yes}}
| {{no}}<ref>{{cite web|url=https://tls.mbed.org/tech-updates/blog/mbedtls-2.0-defaults-best-practices|title=mbed TLS 2.0 defaults implement best practices|accessdate=2017-01-18}}</ref>
| {{no}}
| {{unknown}}
Line 1,306 ⟶ 1,280:
| {{yes}}
| {{no}}<ref>{{cite web|url=https://bugzilla.mozilla.org/show_bug.cgi?id=672600|title=Bug 672600 - Use DNSSEC/DANE chain stapled into TLS handshake in certificate chain validation |publisher=Mozilla|accessdate=2014-06-18}}</ref>
| {{unknown}}
|-
Line 1,315 ⟶ 1,288:
| {{yes}}
| {{yes}}
| {{yes}}
|-
Line 1,322 ⟶ 1,294:
| {{yes}}
| {{yes}}
| {{no}}
| {{no}}
Line 1,332 ⟶ 1,303:
| {{no}} <ref>{{Cite web |title=CRL Validation · Issue #3499 · aws/s2n-tls |url=https://github.com/aws/s2n-tls/issues/3499 |access-date=2022-11-01 |website=GitHub |language=en}}</ref>
| {{unknown}} <ref>{{Cite web |title=OCSP digest support for SHA-256 · Issue #2854 · aws/s2n-tls · GitHub |url=https://github.com/aws/s2n-tls/issues/2854 |access-date=2022-11-01 |website=GitHub |language=en}}</ref>
|
| {{unknown}} <ref>{{Cite web |title=[RFC 6962] s2n Client can Validate Signed Certificate Timestamp TLS Extension · Issue #457 · aws/s2n-tls · GitHub |url=https://github.com/aws/s2n-tls/issues/457 |access-date=2022-11-01 |website=GitHub |language=en}}</ref>
Line 1,342 ⟶ 1,312:
| {{yes}}<ref name="TechNet">{{cite web |url=https://technet.microsoft.com/en-us/library/ee619754(WS.10).aspx |title=How Certificate Revocation Works |author=<!--Staff writer(s); no by-line.--> |date=March 16, 2012 |website=[[Microsoft TechNet]] |publisher=[[Microsoft]] |accessdate=July 10, 2013}}</ref>
| {{yes}}<ref name="TechNet" />
| {{no}}
| {{unknown}}
Line 1,351 ⟶ 1,320:
| {{yes}}
| {{yes}}
| {{no}}
| {{unknown}}
Line 1,360 ⟶ 1,328:
| {{yes}}
| {{yes}}
| {{no}}
| {{unknown}}
Line 1,368 ⟶ 1,335:
| {{yes}}
| {{yes}}
| {{no}}
| {{no}}
Line 1,380 ⟶ 1,346:
! OCSP
! DANE (DNSSEC)
! CT
|}
== Encryption algorithms ==
{| class="wikitable sortable sort-under" style="text-align: left; font-size: smaller"
|-
! rowspan="2"|Implementation !! colspan="10"|[[Block cipher]] with [[Block cipher mode of operation|mode of operation]] !! [[Stream cipher]] !! None
Line 1,705 ⟶ 1,670:
=== Obsolete algorithms ===
{| class="wikitable sortable sort-under" style="text-align: left; font-size: smaller"
|-
! rowspan="2"|Implementation !! colspan="4"|[[Block cipher]] with [[Block cipher mode of operation|mode of operation]] !! colspan="2"|[[Stream cipher]]
Line 1,937 ⟶ 1,902:
=== Defined curves in RFC 8446 (for TLS 1.3) and RFC 8422, 7027 (for TLS 1.2 and earlier) ===
{| class="wikitable sortable sort-under" style="text-align: left; font-size: smaller"
|-
! applicable TLS version
Line 2,141 ⟶ 2,106:
! [[ECC Brainpool|brainpoolP384r1]]<br />(27)
! [[ECC Brainpool|brainpoolP512r1]]<br />(28)
|}
=== Deprecated curves in RFC 8422 ===
{| class="wikitable sortable sort-under" style="text-align: left; font-size: smaller"
|-
! Implementation
Line 2,422 ⟶ 2,192:
|-
| [[Java Secure Socket Extension|JSSE]]
| {{yes|Notes}}{{refn|group=lower-alpha|name="JSSEDisableEC"|These elliptic curves were "Disabled by Default" in current JDK families as part of JDK-8236730.<ref>{{cite web |title=Release Note: Weak Named Curves in TLS, CertPath, and Signed JAR Disabled by Default
| {{yes|Notes}}<ref group=lower-alpha name="JSSEDisableEC"/><ref group=lower-alpha name="JSSERemoveEC"/>
| {{yes|Notes}}<ref group=lower-alpha name="JSSEDisableEC"/><ref group=lower-alpha name="JSSERemoveEC"/>
Line 2,617 ⟶ 2,387:
|}
{| class="wikitable sortable sort-under" style="text-align: left; font-size: smaller"
|-
! Implementation
Line 2,831 ⟶ 2,601:
== Data integrity ==
{| class="wikitable sortable sort-under" style="text-align: left; font-size: smaller"
|-
! Implementation
Line 2,838 ⟶ 2,608:
! [[HMAC]]-[[SHA-2|SHA256/384]]
! [[Authenticated encryption|AEAD]]
! [[GOST 28147-89|GOST 28147-89 IMIT]]<br/><ref name=gostlink/>
! [[GOST (hash function)|GOST R 34.11-94]]<br/><ref name=gostlink/>
|-
| [[Botan (programming library)|Botan]]
| {{
| {{okay|Yes}}
| {{okay|Yes}}
| {{yes}}
| {{
| {{
|-
| [[BSAFE]]
| {{
| {{okay|Yes}}
| {{okay|Yes}}
| {{yes}}
| {{
| {{
|-
| [[cryptlib]]
| {{
| {{okay|Yes}}
| {{okay|Yes}}
| {{yes}}
| {{
| {{
|-
| [[GnuTLS]]
| {{
| {{okay|Yes}}
| {{okay|Yes}}
| {{yes}}
| {{
| {{
|-
| [[Java Secure Socket Extension|JSSE]]
Line 2,878 ⟶ 2,648:
| {{okay|Yes}}
| {{yes}}
| {{
| {{
|-
| [[LibreSSL]]
| {{
| {{okay|Yes}}
| {{okay|Yes}}
| {{yes}}
| {{okay|Yes}}<br/><ref name="libressl-2.1.2"/>
| {{okay|Yes}}<br/><ref name="libressl-2.1.2"/>
|-
| [[MatrixSSL]]
| {{
| {{okay|Yes}}
| {{okay|Yes}}
| {{yes}}
| {{
| {{
|-
| [[Mbed TLS]]
| {{
| {{okay|Yes}}
| {{okay|Yes}}
| {{yes}}
| {{
| {{
|-
| [[Network Security Services|NSS]]
| {{
| {{okay|Yes}}
| {{okay|Yes}}
| {{yes}}
| {{
| {{
|-
| [[OpenSSL]]
| {{
| {{okay|Yes}}
| {{okay|Yes}}
| {{yes}}
| {{okay|Yes}}<br/><ref name="OpenSSL-GOST"/>
| {{okay|Yes}}<br/><ref name="OpenSSL-GOST"/>
|-
| [[Rustls]]
| {{
| {{
| {{
| {{yes}}
| {{
| {{
|-
| [[Schannel|Schannel XP/2003, Vista/2008]]
| {{
| {{okay|Yes}}
| {{partial|XP SP3, 2003 SP2 via hotfix}}<br/><ref name="SHA2 and Windows">{{cite web|url=https://techcommunity.microsoft.com/
| {{no}}
| {{
| {{
|-
| [[Schannel|Schannel 7/2008R2, 8/2012, 8.1/2012R2]]
| {{
| {{okay|Yes}}
| {{okay|Yes}}
| {{partial|except ECDHE_RSA}}<br/><ref name="ms14-066" /><ref name="20141111msblog" /><ref name="win8.1aesgcm"/>
| {{
| {{
|-
| [[Schannel|Schannel 10]]
| {{
| {{okay|Yes}}
| {{okay|Yes}}
| {{yes}}<br/><ref name=schannel10pre/>
| {{
| {{
|-
| [[MacOS|Secure Transport]]
| {{
| {{okay|Yes}}
| {{okay|Yes}}
| {{yes}}
| {{
| {{
|-
| [[wolfSSL]]
| {{
| {{okay|Yes}}
| {{okay|Yes}}
| {{yes}}
| {{
| {{
|-
| [[Erlang (programming language)|Erlang]]/OTP SSL application
| {{
| {{okay|Yes}}
| {{okay|Yes}}
| {{yes}}
| {{
| {{
|-
|-class="sortbottom"
Line 2,989 ⟶ 2,759:
== Compression ==
Note the [[CRIME (security exploit)|CRIME security exploit]] takes advantage of TLS compression, so conservative implementations do not enable compression at the TLS level. [[HTTP compression]] is unrelated and unaffected by this exploit, but is exploited by the related [[BREACH (security exploit)|BREACH attack]].
{| class="wikitable sortable sort-under" style="text-align: left; font-size: smaller"
|-
! Implementation
Line 3,047 ⟶ 2,817:
In this section the extensions each implementation supports are listed. Note that the Secure Renegotiation extension is critical for HTTPS client security {{citation needed|date=August 2014}}. TLS clients not implementing it are vulnerable to attacks, irrespective of whether the client implements TLS renegotiation.
{| class="wikitable sortable sort-under" style="text-align: left; font-size: smaller"
|-
! Implementation
Line 3,059 ⟶ 2,829:
! Keying Material Exporter<br /><ref name="sticket">{{cite IETF|rfc=5705}}</ref>
! Maximum Fragment Length<br /><ref name=tlsexts/>
! [[Encrypt-then-MAC]]<br /><ref name=rfc7366/>
! TLS Fallback SCSV<br /><ref name="tlsfallbackscsv">{{cite IETF|rfc=7507}}</ref>
Line 3,076 ⟶ 2,845:
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}<ref name="Botan 1.11.10">{{cite web|url=http://botan.randombit.net/relnotes/1_11_10.html|title=Version 1.11.10, 2014-12-10 — Botan|date=2014-12-10|accessdate=2014-12-14}}</ref>
Line 3,093 ⟶ 2,861:
| {{no}}
| {{yes}}
| {{no}}
| {{no}}
Line 3,110 ⟶ 2,877:
| {{no}}
| {{no}}<ref name="cryptlib-maxfrag">Present, but disabled by default due to lack of use by any implementation.</ref>
| {{yes}}
| {{yes}}
Line 3,127 ⟶ 2,893:
| {{yes}}
| {{yes}}
| {{yes}}<ref name="GnuTLS-3.4.0"/>
| {{yes}}<ref name="GnuTLS-3.4.4">{{cite web|url=http://permalink.gmane.org/gmane.comp.encryption.gpg.gnutls.devel/8267|title=gnutls 3.4.4|accessdate=2015-08-25|archive-url=https://web.archive.org/web/20170717020648/http://permalink.gmane.org/gmane.comp.encryption.gpg.gnutls.devel/8267|archive-date=2017-07-17|url-status=dead}}</ref>
Line 3,144 ⟶ 2,909:
| {{no}}
| {{yes}}
| {{no}}
| {{no}}
Line 3,161 ⟶ 2,925:
| {{yes}}?
| {{no}}
| {{no}}
| {{partial|Server side only}}<ref name="libressl-2.1.4">{{cite web| title = LibreSSL 2.1.4 released| url = https://marc.info/?l=openbsd-announce&m=142543818707898| date = 2015-03-04| accessdate = 2015-03-04}}</ref>
Line 3,178 ⟶ 2,941:
| {{no}}
| {{yes}}
| {{no}}
| {{yes}}<ref name="matrixssl_3.8.3"/>
Line 3,195 ⟶ 2,957:
| {{no}}
| {{yes}}
| {{yes}}<ref name="mbedTLS-1.3.10">{{cite web|url=https://polarssl.org/tech-updates/releases/mbedtls-1.3.10-released|title=mbed TLS 1.3.10 released|date=2015-02-08|access-date=2015-02-09|archive-date=2015-02-09|archive-url=https://web.archive.org/web/20150209180352/https://polarssl.org/tech-updates/releases/mbedtls-1.3.10-released|url-status=dead}}</ref>
| {{yes}}<ref name="mbedTLS-1.3.10"/>
Line 3,212 ⟶ 2,973:
| {{yes}}
| {{no}}
| {{no}}<ref>{{cite web|url=https://bugzilla.mozilla.org/show_bug.cgi?id=972145|title=Bug 972145 - Implement the encrypt-then-MAC TLS extension |publisher=Mozilla|accessdate=2014-11-06}}</ref>
| {{yes}}<ref>{{cite web|url=https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/NSS_3.17.1_release_notes|title=NSS 3.17.1 release notes|accessdate=2014-10-17|archive-date=2019-04-19|archive-url=https://web.archive.org/web/20190419152214/https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/NSS_3.17.1_release_notes|url-status=dead}}</ref>
Line 3,229 ⟶ 2,989:
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}<ref>{{cite web|url=https://openssl-library.org/news/secadv/20141015.txt|title=OpenSSL Security Advisory [15 Oct 2014]|date=2014-10-15}}</ref>
Line 3,246 ⟶ 3,005:
| {{yes}}
| {{no}}
| {{no}}
| {{no}} <ref>rustls does not implement earlier versions that would warrant protection against insecure downgrade</ref>
Line 3,263 ⟶ 3,021:
| {{no}}
| {{no}}
| {{no}}
| {{no}}
Line 3,280 ⟶ 3,037:
| {{no}}
| {{no}}
| {{no}}
| {{no}}
Line 3,297 ⟶ 3,053:
| {{no}}
| {{no}}
| {{no}}
| {{no}}
Line 3,314 ⟶ 3,069:
| {{no}}
| {{no}}
| {{no}}
| {{no}}
Line 3,331 ⟶ 3,085:
| {{no}}
| {{no}}
| {{no}}
| {{no}}
Line 3,348 ⟶ 3,101:
| {{no}}
| {{no}}
| {{no}}
| {{no}}
Line 3,365 ⟶ 3,117:
| {{no}}
| {{yes}}
| {{yes}}<ref name="wolfssl-4.2.0">{{cite web|url=https://www.wolfssl.com/wolfssl-version-4-2-0-now-available/|title=wolfSSL Version 4.2.0 is Now Available!|date=22 October 2019|accessdate=2021-08-13}}</ref>
| {{no}}
| {{yes}}
| {{no}}
| {{yes}}<ref name="wolfssl">{{cite web|url=https://www.wolfssl.com/wolfssl-supports-raw-public-keys/|title=wolfSSL supports Raw Public Keys|date=August 2023 |accessdate=2024-10-25}}</ref>
|-
| Erlang/OTP SSL application
Line 3,382 ⟶ 3,133:
| {{no}}
| {{no}}
| {{no}}
| {{yes}}
Line 3,400 ⟶ 3,150:
! Keying Material Exporter
! Maximum Fragment Length
! Encrypt-then-MAC
! TLS Fallback SCSV
Line 3,410 ⟶ 3,159:
== Assisted cryptography ==
This section lists the known ability of an implementation to take advantage of CPU instruction sets that optimize encryption, or utilize system specific devices that allow access to underlying cryptographic hardware for acceleration or for data separation.
{| class="wikitable sortable sort-under" style="text-align: left; font-size: smaller"
|-
! Implementation
Line 3,417 ⟶ 3,166:
! [[VIA PadLock]]
! [[ARM architecture#ARMv8-A|ARMv8-A]]
! [[Intel SHA extensions|Intel SHA]]
! [[NXP CAAM]]
! [[TPM 2.0]]
! [[NXP SE050]]
! [[Microchip ATECC]]
! [[STMicro STSAFE]]
! [[Maxim MAXQ]]
|-
| [[Botan (programming library)|Botan]]
Line 3,427 ⟶ 3,179:
| {{no}}
| {{yes}}
|
| {{no}}
| {{yes}}<ref>{{cite web | url=https://botan.randombit.net/handbook/api_ref/tpm.html | title=Trusted Platform Module (TPM) — Botan }}</ref>
| {{no}}
| {{no}}
| {{no}}
| {{no}}
|-
|-
| [[BSAFE]] SSL-J {{refn|group=lower-alpha|Pure Java implementations relies on [[Java virtual machine|JVM]] processor optimization capabilities, such as [[OpenJDK]] support for [[AES-NI]]<ref>{{Cite web|url=
| {{okay|Yes}}
| {{okay|Yes}}
| {{no}}
| {{okay|Yes}}
| {{okay|Yes}}
| {{no}}
| {{no}}<ref>{{cite web | url=https://www.dell.com/support/kbdoc/en-my/000204717/comparison-of-bsafe-tls-libraries-micro-edition-suite-vs-ssl-j | title=Comparison of BSAFE TLS libraries: Micro Edition Suite vs SSL-J | Dell Malaysia }}</ref>
| {{no}}
| {{no}}
| {{no}}
| {{no}}
|-
Line 3,449 ⟶ 3,207:
| {{no}}
|
|
| {{yes}}
| {{no}}
| {{no}}
| {{no}}
| {{no}}
|-
| [[Crypto++]]
Line 3,458 ⟶ 3,219:
|
|
| {{yes}}
|
|
| {{no}}
| {{no}}
| {{no}}
| {{no}}
|-
| [[GnuTLS]]
Line 3,468 ⟶ 3,232:
| {{yes}}
| {{yes}}<ref>{{Cite web|url=https://lists.gnupg.org/pipermail/gnutls-devel/2016-October/008194.html|title=[gnutls-devel] gnutls 3.5.5|first=Nikos|last=Mavrogiannopoulos|date=October 9, 2016}}</ref>
| {{yes}}
|
| {{no}}<ref>{{cite web | url=https://www.gnutls.org/manual/html_node/Trusted-Platform-Module.html | title=Trusted Platform Module (GnuTLS 3.8.4) }}</ref>
| {{no}}
| {{no}}
| {{no}}
| {{no}}
|-
| [[Java Secure Socket Extension|JSSE]]
Line 3,481 ⟶ 3,248:
| {{no}}
|
| {{no}}
| {{no}}
| {{no}}
| {{no}}
|-
Line 3,489 ⟶ 3,259:
| {{no}}
|
|
|
| {{no}}
| {{no}}
| {{no}}
| {{no}}
|-
| [[MatrixSSL]]
Line 3,501 ⟶ 3,274:
| {{no}}
|
| {{no}}
| {{no}}
| {{no}}
| {{no}}
|-
Line 3,511 ⟶ 3,287:
| {{no}}
|
| {{Partial}}<ref>{{cite web | url=https://github.com/NXP/plug-and-trust/tree/master?tab=readme-ov-file | title=NXP/Plug-and-trust | website=[[GitHub]] }}</ref>
| {{yes}}<ref>{{cite web | url=https://github.com/ARMmbed/mbed-os-atecc608a/ | title=ARMmbed/Mbed-os-atecc608a | website=[[GitHub]] }}</ref>
| {{no}}
| {{no}}
|-
Line 3,521 ⟶ 3,300:
| {{no}}
|
| {{no}}
| {{no}}
| {{no}}
| {{no}}
|-
| [[OpenSSL]]
| {{yes}}<ref>{{cite web | url=https://habrahabr.ru/post/134725/
| {{yes}}
| {{yes}}
| {{yes}}<ref>{{cite web|url=http://git.openssl.org/gitweb/?p=openssl.git;a=commitdiff;h=ddacb8f27ba4c8a8d51c306c150e1a8703b008f2|title=git.openssl.org Git - openssl.git/commitdiff|website=git.openssl.org}}</ref>
| {{yes}}
| {{Partial}}
| {{Partial}}<ref>{{cite web | url=https://github.com/tpm2-software/tpm2-openssl | title=Tpm2-software/Tpm2-openssl | website=[[GitHub]] }}</ref><ref>{{cite web | url=https://docs.openssl.org/3.0/man7/provider/ | title=Provider - OpenSSL Documentation }}</ref>
| {{Partial}}<ref>{{cite web | url=https://github.com/NXP/plug-and-trust/tree/master?tab=readme-ov-file | title=NXP/Plug-and-trust | website=[[GitHub]] }}</ref>
| {{no}}
| {{Partial}}<ref>{{cite web | url=https://www.st.com/en/embedded-software/stsw-stsa110-ssl.html | title=STSW-STSA110-SSL - STSAFE-A integration within OpenSSL security stack | website=[[STMicroelectronics]]}}</ref>
| {{no}}
|-
| [[Rustls]]
Line 3,538 ⟶ 3,323:
|
| {{yes}}
| {{yes}}
|
|
| {{no}}
| {{no}}
| {{no}}
| {{no}}
|-
| [[Schannel]]
Line 3,551 ⟶ 3,339:
| {{no}}
|
| {{no}}
| {{no}}
| {{no}}
| {{no}}
|-
| [[MacOS|Secure Transport]]
| {{no}}
| {{Yes}}<ref>{{GitHub|https://
| {{no}}
| {{Yes}}
Line 3,561 ⟶ 3,352:
| {{no}}
|
| {{no}}
| {{no}}
| {{no}}
| {{no}}
|-
Line 3,568 ⟶ 3,362:
| {{no}}
| {{yes}}
|
| {{yes}}<ref>{{cite web|url=https://community.nxp.com/t5/i-MX-Processors/CAAM-support-in-wolfSSL/m-p/1013736|title=CAAM support in wolfSSL |date=10 March 2020|publisher=}}</ref>
| {{yes}}<ref>{{cite web|url=https://www.wolfssl.com/products/wolftpm/|title=wolfTPM Portable TPM 2.0 Library}}</ref><ref>{{cite web|url=https://www.wolfssl.com/announcing-wolfssl-tpm-support-for-the-espressif-esp32/|title=Announcing wolfSSL TPM support for the Espressif ESP32|date=20 June 2024|publisher=}}</ref>
| {{yes}}<ref>{{cite web | url=https://www.wolfssl.com/wolfssl-ssl-tls-support-for-nxp-se050/ | title=WolfSSL SSL/TLS Support for NXP SE050 – wolfSSL | date=22 February 2024 }}</ref>
| {{yes}}<ref>{{cite web | url=https://www.wolfssl.com/blog-wolfssl-support-atecc608-crypto-coprocessor/ | title=WolfSSL support for the ATECC608 Crypto Coprocessor – wolfSSL | date=13 October 2021 }}</ref>
| {{yes}}<ref>{{cite web | url=https://www.wolfssl.com/wolfssl-support-stsafe-a100-crypto-coprocessor/ | title=WolfSSL support for STSAFE-A100 crypto coprocessor – wolfSSL | date=20 September 2018 }}</ref>
| {{yes}}<ref>{{cite web | url=https://www.wolfssl.com/support-maxq1065-wolfssl/ | title=Support for MAXQ1065 in wolfSSL – wolfSSL | date=29 November 2022 }}</ref>
|-
|-class="sortbottom"
Line 3,579 ⟶ 3,376:
! VIA PadLock
! ARMv8-A
! Intel SHA
! NXP CAAM
! TPM 2.0
! NXP SE050
! Microchip ATECC
! STMicro STSAFE
! Maxim MAXQ
|}
Line 3,589 ⟶ 3,389:
== System-specific backends ==
This section lists the ability of an implementation to take advantage of the available operating system specific backends, or even the backends provided by another implementation.
{| class="wikitable sortable sort-under" style="text-align: left; font-size: smaller"
|-
! Implementation
!
! af_alg
! [[Cryptographic Service Provider|Windows CSP]]
! CommonCrypto
! [[OpenSSL|OpenSSL engine]]
|-
Line 3,613 ⟶ 3,413:
|-
| [[cryptlib]]
| {{
| {{no}}
| {{no}}
Line 3,670 ⟶ 3,470:
| [[Rustls]]
| {{no}}
| {{yes}} <ref>{{cite web|title=ktls integration for rustls|website=[[GitHub]] |accessdate=2024-08-29|url=https://github.com/rustls/ktls}}</ref>
| {{no}}
| {{no}}
Line 3,713 ⟶ 3,513:
== Cryptographic module/token support ==
{| class="wikitable sortable sort-under" style="text-align: left; font-size: smaller"
|-
! Implementation
Line 3,731 ⟶ 3,531:
|-
| [[cryptlib]]
| {{
| {{yes|[[PKCS 11|PKCS #11]]}}
| User-defined label
Line 3,772 ⟶ 3,572:
| [[Rustls]]
| {{no}}
| {{yes|[[Microsoft CryptoAPI]]}} <ref>{{cite web|url=https://github.com/rustls/rustls-cng|title=Windows CNG bridge for rustls|website=[[GitHub]] |accessdate=2024-08-29}}</ref>
| Custom method
|-
Line 3,798 ⟶ 3,598:
== Code dependencies ==
{| class="wikitable sortable sort-under" style="text-align: left; font-size: smaller"
|-
! Implementation
Line 3,855 ⟶ 3,655:
== Development environment ==
{| class="wikitable sortable sort-under" style="text-align: left; font-size: smaller"
|-
! Implementation
Line 3,885 ⟶ 3,685:
com.rsa.ssl{{cref2|group=dev_env_footnotes|e}}<br />
com.rsa.jsse{{cref2|group=dev_env_footnotes|f}}
| [[Java
| Javadoc, Developer's guide (HTML)
| Included
Line 3,961 ⟶ 3,761:
| [https://docs.rs/rustls/0.23.12/rustls/ API reference] and [https://docs.rs/rustls/0.23.12/rustls/manual/ design manual]
| Two options included (pluggable)
| {{yes}}<ref>{{cite web|url=https://github.com/rustls/rustls-openssl-compat/|title=rustls-openssl compatibility layer|website=[[GitHub]] |accessdate=2024-08-29}}</ref> (subset)
|-
| [[wolfSSL]]
Line 3,990 ⟶ 3,790:
== Portability concerns ==
{| class="wikitable sortable sort-under" style="text-align: left; font-size: smaller"
|-
! Implementation
|