Comparison of TLS Implementations

Comparison of TLS Implementations

The Transport Layer Security (TLS) protocol provide the ability to secure communications across networks. There are several TLS implementations which are free and open source software and sometimes choosing between the available implementations can be tough. Below, you will find a side-by-side comparison of several of the most prominent libraries.

All comparison categories use the stable version of each implementation listed in the overview section. The comparison is limited to features that directly relate to the TLS protocol.

Contents

Overview

Implementation Developed By Open Source Software License Copyright Owner Latest Stable Version Release Date Origin Website
axTLS Cameron Rich Yes BSD style licensing Cameron Rich 1.4.3 07/29/2011 Australia http://axtls.sourceforge.net/
cryptlib Peter Gutmann Yes Sleepycat License and commercial license Peter Gutmann 3.4.1 07/27/2011 NZ http://www.cs.auckland.ac.nz/~pgut001/cryptlib/
CyaSSL yaSSL Yes GPLv2 and commercial license yassl.com 1.9.0 03/02/2011 US http://www.yassl.com
GnuTLS GnuTLS project Yes LGPL Free Software Foundation 3.0.5 10/27/2011 EU (Greece and Sweden) http://www.gnutls.org/
MatrixSSL PeerSec Networks No Proprietary PeerSec Networks 3.2.0 06/07/2011 US http://www.matrixssl.org
MatrixSSL-open PeerSec Networks Yes GPLv2 PeerSec Networks 3.2.2 06/07/2011 US http://www.matrixssl.org
NSS Yes LGPL and Mozilla_Public_License NSS contributors 3.12.9 1/12/2011 US http://www.mozilla.org/projects/security/pki/nss/
OpenSSL OpenSSL project Yes OpenSSL / SSLeay dual-license Eric Young, Tim Hudson, Sun, OpenSSL project, and others 0.9.8r / 1.0.0e 09/06/2011 Australia/EU http://openssl.org/
PolarSSL Offspark Yes GPLv2 and commercial license Brainspark B.V. (brainspark.nl) 1.0.0 09/08/2011 EU (Netherlands) http://polarssl.org
SChannel Microsoft No Proprietary Microsoft Inc. Windows 7 10/22/2009 US http://microsoft.com
Security Builder SSL-C Certicom No Proprietary Certicom Corp., A Subsidiary of Research In Motion 5.5.1 2/28/2011 Canada http://www.certicom.com
JSSE Oracle Yes GPLv2 and commercial license Oracle JDK 6, JDK 7 in EA stage 02/03/2011(ea snapshot release) US http://openjdk.java.net/ http://www.java.net/ http://www.java.com/
Implementation Developed By Open Source Software License Copyright Owner Latest Stable Version Release Date Origin Website

Protocol Support

Several versions of the TLS protocol exist. SSL 2.0 is a deprecated protocol, vulnerable to several attacks. SSL 3.0 and TLS 1.0 are its successors without any major known vulnerabilities. TLS 1.1 fixes all the known issues in TLS 1.0, and TLS 1.2 is the latest published version, introducing new features. DTLS 1.0 or Datagram TLS is a modification of TLS 1.1 for a packet-oriented transport layer, where packet loss and packet reordering have to be tolerated.

Note that there are known vulnerabilities in SSL 2.0, SSL 3.0 and TLS 1.0[1] protocols.

Implementation SSL 2.0[2] SSL 3.0 TLS 1.0[3] TLS 1.1[4] TLS 1.2[5] DTLS 1.0[6]
axTLS No[7] No Yes Yes No No
cryptlib No Yes Yes Yes Yes No
CyaSSL No Yes Yes Yes Yes Yes[8]
GnuTLS No[7] Yes Yes Yes Yes Yes
MatrixSSL No Yes Yes Yes Yes Yes
MatrixSSL-open No Yes Yes Yes No No
NSS Yes Yes Yes No No No
OpenSSL Yes Yes Yes No[9] No[9] Yes
PolarSSL No Yes Yes Yes No No
SChannel Yes Yes Yes Yes Yes No
Security Builder SSL-C Yes Yes Yes Yes Yes Yes
JSSE No[7] Yes Yes Yes Yes No
Implementation SSL 2.0 SSL 3.0 TLS 1.0 TLS 1.1 TLS 1.2 DTLS 1.0

CipherSuite Profiles

Implementation TLS 1.2 Suite B
axTLS No
cryptlib Yes
CyaSSL No
GnuTLS Yes
NSS No
MatrixSSL No
OpenSSL No
PolarSSL No
SChannel No
Security Builder SSL-C Yes
JSSE No
Implementation TLS 1.2 Suite B

Key Exchange Algorithms (Certificate-only)

Implementation RSA[10] RSA-EXPORT[10] DHE-RSA[10] DHE-DSS[10] ECDH-ECDSA[11] ECDHE-ECDSA[11] ECDH-RSA[11] ECDHE-RSA[11] VKO GOST R 34.10-2001[12][13]
axTLS Yes No No No No No No No No
cryptlib Yes No Yes Yes No Yes No No No
CyaSSL Yes No Yes No No No No No No
GnuTLS Yes Yes Yes Yes No Yes No Yes No
MatrixSSL Yes No Yes No Yes Yes Yes Yes No
MatrixSSL-open Yes No No No No No No No No
NSS Yes Yes Partial[14] Partial[14] Yes Yes No No No
OpenSSL Yes Yes Yes Yes No Yes No Yes Yes
PolarSSL Yes No Yes No No No No No No
SChannel Yes No No Yes No Yes No No No[15]
Security Builder SSL-C Yes Yes Yes Yes Yes Yes Yes Yes No
JSSE Yes Yes Yes Yes Yes Yes No No No[15]
Implementation RSA RSA EXPORT DHE-RSA DHE-DSS ECDH-ECDSA ECDHE-ECDSA ECDH-RSA ECDHE-RSA VKO GOST R 34.10-2001

Key Exchange Algorithms (Alternative key-exchanges)

Implementation DH-ANON[10] SRP[16] SRP-DSS[16] SRP-RSA[16] PSK-RSA[16] PSK[17] DHE-PSK[17] ECDHE-PSK[18] ECDH-ANON[11]
axTLS No No No No No No No No No
cryptlib No No No No No Yes Yes No No
CyaSSL No No No No No Yes No No No
GnuTLS Yes Yes Yes Yes No Yes Yes Yes Yes
MatrixSSL Yes No No No No Yes No No No
MatrixSSL-open No No No No No No No No No
NSS No No No No No No No No No
OpenSSL Yes No No No No Yes No No Yes
PolarSSL No No No No No No No No No
SChannel No No No No No No No No No
Security Builder SSL-C Yes No No No Yes Yes Yes Yes Yes
JSSE Yes No No No No No No No No
Implementation DH-ANON SRP SRP-DSS SRP-RSA PSK-RSA PSK DHE-PSK ECDHE-PSK ECDH-ANON

Encryption Algorithms

Implementation AES-CBC AES-GCM[19] 3DES-CBC DES-CBC[20] RC4-128 RC4-40[21] CAMELLIA-CBC[22] GOST28147-89[12]
axTLS Yes No No No Yes No No No
cryptlib Yes Yes Yes No Yes No No No
CyaSSL Yes No Yes No Yes No No No
GnuTLS Yes Yes Yes No Yes Yes Yes No
MatrixSSL Yes No Yes No Yes No No No
MatrixSSL-open Yes No Yes No Yes No No No
NSS Yes No Yes Yes Yes Yes Yes No
OpenSSL Yes No Yes Yes Yes Yes Yes Yes
PolarSSL Yes No Yes No Yes No No No
SChannel Yes Partial[23] Yes Yes Yes No No No[15]
Security Builder SSL-C Yes Yes Yes Yes Yes Yes No No
JSSE Yes No Yes Yes Yes Yes No No[15]
Implementation AES-CBC AES-GCM 3DES-CBC DES-CBC RC4-128 RC4-40 CAMELLIA-CBC GOST28147-89

CPU-assisted cryptography

This section lists the 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 accelerators.

Implementation /dev/crypto PKCS #11 device Windows CSP Intel AES-NI VIA Padlock
axTLS No No No No No
cryptlib No Yes No No Yes
CyaSSL No No No Yes No
GnuTLS Yes No No Yes Yes
MatrixSSL No No No No No
MatrixSSL-open No No No No No
NSS No No No Yes No
OpenSSL Yes No No Yes Yes
PolarSSL No No No No No
SChannel No No Yes Yes No
Security Builder SSL-C No Yes No No No
JSSE No No No No No
Implementation /dev/crypto PKCS #11 device Windows CSP Intel AES-NI VIA Padlock

MAC Functions

Implementation AEAD HMAC-MD5 HMAC-SHA-1 HMAC-SHA-256 GOST28147-89-MAC[12] GOST 34.11-94[12]
axTLS No Yes Yes No No No
cryptlib Yes Yes Yes Yes No No
CyaSSL No Yes Yes Yes No No
GnuTLS Yes Yes Yes Yes No No
MatrixSSL No Yes Yes Yes No No
MatrixSSL-open No Yes Yes No No No
NSS No Yes Yes Yes No No
OpenSSL No Yes Yes Yes Yes Yes
PolarSSL No Yes Yes Yes No No
SChannel Yes Yes Yes Yes No[15] No[15]
Security Builder SSL-C Yes Yes Yes Yes No No
JSSE No Yes Yes Yes No[15] No[15]
Implementation AEAD HMAC-MD5 HMAC-SHA-1 HMAC-SHA-256 GOST28147-89-MAC GOST 34.11-94

Compression

Implementation DEFLATE[24]
axTLS No
cryptlib No
CyaSSL Yes
GnuTLS Yes
MatrixSSL No
MatrixSSL-open No
NSS Yes
OpenSSL Yes
PolarSSL No
SChannel No
Security Builder SSL-C Yes
JSSE No
Implementation DEFLATE

Cryptographic module/token support

Implementation Hardware token support Objects identified via
axTLS No
cryptlib PKCS11 User-defined label
CyaSSL No
GnuTLS PKCS11 PKCS #11 URLs[25]
MatrixSSL No
MatrixSSL-open No
NSS PKCS11
OpenSSL PKCS11 (via external module) Custom method
PolarSSL No
SChannel Microsoft CryptoAPI UUID, User-defined label
Security Builder SSL-C PKCS11 (via external module)
JSSE PKCS11 Java_Cryptography_Architecture/
Java_Cryptography_Extension
Implementation Hardware token support Objects identified via

Extensions

In this section the extensions each implementation supports are listed. Note that the Secure Renegotiation extension is critical for HTTPS client security. TLS clients not implementing it are vulnerable to attacks, irrespective of whether the client implements TLS renegotiation.

Implementation Secure
Renegotiation[26]
Server Name
Indication[27]
Certificate Status
Request[27]
OpenPGP[28] Supplemental
Data[29]
Session
Ticket[30]
Keying Material
Exporter[31]
Maximum
Fragment Length[27]
Truncated
HMAC[27]
axTLS No No No No No No No No No
cryptlib Yes Yes No No Yes No No No[32] No
CyaSSL No No No No No No No No No
GnuTLS Yes Yes No Yes Yes Yes Yes Yes No
MatrixSSL Yes No No No No No No No No
MatrixSSL-open Yes No No No No No No No No
NSS Yes Yes No No No Yes No[33] No No
OpenSSL Yes Yes Yes No No? Yes Yes? No No
PolarSSL No Partial[14] No No No No No No No
SChannel Yes Yes Yes No Yes No No No No
Security Builder SSL-C Yes Yes No No No Yes No Yes No
JSSE Yes Partial[14] No No No No No No No
Implementation Secure
Renegotiation
Server Name
Indication
Certificate Status
Request
OpenPGP Supplemental
Data
Session
Ticket
Keying Material
Exporter
Maximum
Fragment Length
Truncated
HMAC

Code Size and Dependencies

Implementation Code size Dependencies Optional
dependencies
axTLS 12kLoc libc
CyaSSL 27kLoc libc zlib (compression)
GnuTLS 71 kLoc libc
libnettle (crypto)
gmp (bignum)
zlib (compression)
p11-kit (PKCS #11)
MatrixSSL 22kLoc libc
MatrixSSL-open 18kLoc libc
NSS libc
libnspr4
libsoftokn3
libplc4
libplds4
zlib (compression)
OpenSSL 159 kLoc libc zlib (compression)
PolarSSL 14 kLOC libc
JSSE 37 kLOC

(Framework and Oracle provider)

Java
Implementation Code size Dependencies Optional
dependencies

Development Environment

Implementation Namespace Build Tools API Manual Crypto Back-end OpenSSL Compatibility Layer
axTLS SSL_CTX, SSL Makefile, mconf API Reference (HTML) Included (monolithic) Yes (limited)
cryptlib crypt* makefile, MSVC project workspaces Programmers reference manual (PDF), architecture design manual (PDF) Included (monolithic) No
CyaSSL CyaSSL_*

SSL_*

Autoconf, automake, libtool, MSVC project workspaces, XCode projects API Reference (HTML) Included (monolithic) Yes (about 10% of API)
GnuTLS gnutls_* Autoconf, automake, libtool Manual and API reference (HTML, PDF) External, libnettle Yes (limited)
MatrixSSL matrixSsl_*

ps*

automake, MSVC project workspaces, XCode projects API Reference (PDF) Included (monolithic) No
MatrixSSL-open matrixSsl_*

ps*

automake, MSVC project workspaces, XCode projects API Reference (PDF) Included (monolithic) No
NSS CERT_*

SEC_*
SECKEY_*
NSS_*
PK11_*
SSL_*
...

Makefile Manual (HTML) Included, PKCS#11 based[34] Yes (separate package called nss_compat_ossl[35])
OpenSSL SSL_*

SHA1_*
MD5_*
EVP_*
...

Makefile Man pages Included (monolithic) Not Applicable
PolarSSL ssl_*

sha1_*
md5_*
x509parse_*
...

Makefile, CMake, MSVC project workspaces API Reference + High Level and Module Level Documentation (HTML) Included (monolithic) No
Security Builder SSL-C ssl_* makefile Programmers reference manual (PDF), User Guide (PDF) Included (monolithic) No
JSSE javax.net.ssl Makefile API Reference (HTML) +

Java 7 SE

Java_Cryptography_Architecture/
Java_Cryptography_Extension
Implementation Namespace Build Tools API Manual Crypto Back-end OpenSSL Compatibility Layer

Portability Concerns

Implementation Platform Requirements Network Requirements Thread Safety Random Seed Able to Cross-Compile Supported Operating Systems
axTLS C89 none POSIX threads (optional) /dev/urandom or platform dependent. Yes Generally any POSIX or Windows based platforms.
cryptlib C89 POSIX send() and recv(). API to supply your own replacement Thread-safe. Platform-dependent, including hardware sources Yes AMX, BeOS, ChorusOS, DOS, eCOS, FreeRTOS/OpenRTOS, uItron, MVS, OS/2, PalmOS, QNX Neutrino, RTEMS, Tandem NonStop, ThreadX, uC/OS II, Unix (AIX, FreeBSD, HPUX, Linux, OS X, Solaris, etc.), VDK, VM/CMS, VxWorks, Win16, Win32, Win64, WinCE/PocketPC/etc, XMK)
CyaSSL C89 POSIX send() and recv(). API to supply your own replacement. Thread-safe, needs mutex hooks if PThreads or WinThreads not available, can be turned off Random seed set through TaoCrypt Yes Win32/64, Linux, Mac 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/microitron, Micrium's µC OS, FreeRTOS
GnuTLS C89 POSIX send() and recv(). API to supply your own replacement. Thread-safe, needs custom mutex hooks if neither POSIX nor Windows threads are available. platform dependent Yes Generally any POSIX platforms or Windows, commonly tested platforms include GNU/Linux, Win32/64, Mac OS X, Solaris, OpenWRT, FreeBSD, NetBSD, OpenBSD.
MatrixSSL C89 none Thread-safe platform dependent Yes
MatrixSSL-open C89 none Thread-safe platform dependent Yes
NSS C89, NSPR[36] NSPR[36] PR_Send() and PR_Recv(). API to supply your own replacement. Thread-safe Platform dependent[37] Yes (but cumbersome) AIX, Android, FreeBSD, NetBSD, OpenBSD, BeOS, HP-UX, IRIX, Linux, Mac OS X, OS/2, Solaris, OpenVMS, Amiga DE, Windows, WinCE, Sony PlayStation
OpenSSL C89?  ? Needs mutex callbacks Set through native API Unix, DOS (with djgpp), Windows, OpenVMS, MacOS, NetWare
PolarSSL C89 POSIX read() and write(). API to supply your own replacement. Thread-safe Random seed set through HAVEGE random engine Yes Known to work on: Win32/64, Linux, Mac OS X, Solaris, FreeBSD, NetBSD, OpenBSD, OpenWRT, iPhone (iOS), Xbox
Security Builder SSL-C C89 Must write your own application callbacks for socket I/O Thread-safe under certain documented conditions platform dependent Yes
JSSE Java Java SE network components Thread-safe Depends on java.security.SecureRandom Yes Java based, platform-independent
Implementation Platform Requirements Network Requirements Thread Safety Random Seed Able to Cross-Compile Supported Operating Systems

References

  1. ^ Bard attack
  2. ^ SSLv2 is insecure
  3. ^ RFC 2246
  4. ^ RFC 4346
  5. ^ RFC 5246
  6. ^ RFC 4347
  7. ^ a b c SSLv2 client hello is supported
  8. ^ CyaSSL's DTLS support is labeled as "This is only for testing purposes at this time. Rebroadcast and reordering aren't fully implemented at this time but will be for the next release."
  9. ^ a b planned for version 1.0.1 www.openssl.org/news/changelog.html
  10. ^ a b c d e RFC 5246
  11. ^ a b c d e RFC 4492
  12. ^ RFC 4357
  13. ^ a b c d Client side only
  14. ^ a b c d e f g h Extensions to support this functionality might be available.
  15. ^ a b c d RFC 5054
  16. ^ a b RFC 4279
  17. ^ RFC 5489
  18. ^ RFC 5288
  19. ^ DES is insecure
  20. ^ 40-bit encryption is insecure
  21. ^ RFC 5932
  22. ^ Support is erratic, in many cases SChannel will simply drop the connection if a suite with this algorithm is specified.
  23. ^ RFC 3749
  24. ^ PKCS #11 URLs is a way to refer to objects stored in PKCS #11 tokens
  25. ^ RFC 5746
  26. ^ a b c d RFC 4366
  27. ^ RFC 6091
  28. ^ RFC 4680
  29. ^ RFC 5077
  30. ^ RFC 5705
  31. ^ Present but disabled by default due to lack of use by any implementation.
  32. ^ Patch is available
  33. ^ On the fly replaceable/augmentable.
  34. ^ http://fedoraproject.org/wiki/Nss_compat_ossl
  35. ^ a b Netscape Portable Runtime (NSPR)
  36. ^ For Unix/Linux it uses /dev/urandom if available, for Windows it uses CAPI. For all platforms it gets data from clock, and tries to open system files. NSS has a set of platform dependent functions is uses to determine randomness.

External links


Wikimedia Foundation. 2010.

Игры ⚽ Нужна курсовая?

Look at other dictionaries:

  • Comparison of remote desktop software — This page is a comparison of remote desktop software available for various platforms. Contents 1 Remote desktop software 1.1 General information 1.2 Operating system support 1.3 Featu …   Wikipedia

  • Network Security Services — Developer(s) AOL, Red Hat, Sun Microsystems, Oracle Corporation, Google and others Stable release 3.12.8 / September 23, 2010; 13 months ago (2010 09 23) …   Wikipedia

  • CyaSSL — Developer(s) Todd Ouska Stable release 1.9.0 / March 2011 Development status Active Written in C language Op …   Wikipedia

  • cryptlib — Developer(s) Peter Gutmann Initial release 1995 (1995) Stable release 3.4.1 / July 27, 2011; 3 months ago (2011 07 27) …   Wikipedia

  • MatrixSSL — Developer(s) PeerSec Networks Written in C Operating system Multi platform Type Security library …   Wikipedia

  • OpenSSL — Developer(s) The OpenSSL Project Stable release 1.0.0e  (6 September 2011; 2 months ago (2011 09 06)[ …   Wikipedia

  • Internet Relay Chat — IRC redirects here. For other uses, see IRC (disambiguation). For IRC channels dedicated to Wikipedia, see Wikipedia:IRC Internet Relay Chat (IRC) is a protocol for real time Internet text messaging (chat) or synchronous conferencing.[1] It is… …   Wikipedia

  • Simple Mail Transfer Protocol — This article is about the Internet standard for electronic mail transmission. For the email delivery company, see SMTP (company). Internet protocol suite Application layer …   Wikipedia

  • Opera (web browser) — Opera Opera 11.51 displaying Wikipedia on Windows 7. Developer(s …   Wikipedia

  • Presto (layout engine) — Presto Developer(s) Opera Software ASA Stable release 2.9.168 / 28 June 2011; 4 months ago ( …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”