TLS 1.2 Support in CyaSSL

The CyaSSL embedded SSL library has had support for TLS 1.2 since version 1.1.0 in September of 2009 (over a year and a half ago).  We realize that many people don’t know the difference between TLS 1.1 and TLS 1.2, and we wanted to give some quick highlights on the differences between these two protocol versions.

As stated in the TLS 1.1 and 1.2 protocol definitions (RFC 4346, RFC 5246), “The primary goal of the TLS protocol is to provide privacy and data integrity between two communicating applications.”  TLS 1.2 is an improvement to the TLS 1.1 standard, but how exactly do they differ?  What was changed in TLS 1.2 to warrant a new version of the protocol?

Listed below are the changes made in version 1.2 of the TLS protocol.  TLS 1.2 support is slowly making it’s way into existing projects.  CyaSSL fully supports SSL 3.0, TLS 1.0, TLS 1.1, and TLS 1.2.

  1. A. TLS 1.2

This protocol was defined in RFC 5246 in August of 2008.  Based on TLS 1.1, TLS 1.2 contains improved flexibility. One of the primary goals of the TLS 1.2 revision was to remove the protocol’s dependency on the MD5 and SHA-1 digest algorithms.  The major differences include:

  1. The MD5/SHA-1 combination in the pseudorandom function (PRF) was replaced with cipher-suite-specified PRFs.

  2. The MD5/SHA-1 combination in the digitally-signed element was replaced with a single hash.  Signed elements include a field explicitly specifying the hash algorithm used.

  3. There was substantial cleanup to the client’s and server’s ability to specify which hash and signature algorithms they will accept.

  4. Addition of support for authenticated encryption with additional data modes.

  5. TLS Extensions definition and AES Cipher Suites were merged in.

  6. Tighter checking of EncryptedPreMasterSecret version numbers.

  7. Many of the requirements were tightened

  8. Verify_data length depends on the cipher suite

  9. Description of Bleichenbacher/Dlima attack defenses cleaned up.

  10. Alerts must be sent in many cases

  11. After a certificate_request, if no certificates are available, clients now MUST send an empty certificate list.

  12. TLS_RSA_WITH_AES_128_CBC_SHA is now the mandatory to implement cipher suite.

  13. Added HMAC-SHA256 cipher suites.

  14. Removed IDEA and DES cipher suites.  They are now deprecated.

To read more about TLS 1.2, you can find the specification (RFC 5246), here:  http://tools.ietf.org/html/rfc5246.

B.  Goals of the TLS Protocol

  1. Cryptographic security: TLS should be used to establish a secure connection between two parties.

  2. Interoperability: Independent programmers should be able to develop applications utilizing TLS that can successfully exchange cryptographic parameters without knowledge of one another’s code.

  3. Extensibility: TLS seeks to provide a framework into which new public key and bulk encryption methods can be incorporated as necessary.  This will also accomplish two sub-goals: preventing the need to create a new protocol (and risking the introduction of possible new weaknesses) and avoiding the need to implement an entire new security library.

  4. Relative efficiency: Cryptographic operations tend to be highly CPU intensive, particularly public key operations.  For this reason, the TLS protocol has incorporated an optional session caching scheme to reduce the number of connections that need to be established from scratch.  Additionally, care has been taken to reduce network activity.

Resources:

If you would like to read more about SSL or TLS, here are several resources that might be helpful:

TLS – Wikipedia (http://en.wikipedia.org/wiki/Transport_Layer_Security)

TLS 1.0 (RFC 0000):  http://tools.ietf.org/html/rfc2246

TLS 1.1 (RFC 0000):  http://tools.ietf.org/html/rfc4346

TLS 1.2 (RFC 0000):  http://tools.ietf.org/html/rfc5246

As always, if you have any questions or would like more information about the CyaSSL embedded SSL library or the yaSSL Embedded Web Server, please contact info@yassl.com.