Thursday, May 1, 2014
Double Encryption, for the Win!
Upon learning about the Heartbleed vulnerability in OpenSSL, my first thoughts were pretty desperate. I basically lost all faith in humanity's ability to write secure software. It's really that bad.
I spent the next couple of hours drowning in the sea of passwords and certificates I would personally need to change...ugh :-/
As of the hangover of that sobering reality arrived, I then started thinking about various systems over the years that I've designed, implemented, or was otherwise responsible for, and how Heartbleed affected those services. Another throbbing headache set in.
I patched DivItUp.com within minutes of Ubuntu releasing an updated OpenSSL package, and re-keyed the SSL certificate as soon as GoDaddy declared that it was safe for re-keying.
Likewise, the Ubuntu entropy service was patched and re-keyed, along with all Ubuntu-related https services by Canonical IT. I pushed an new package of the pollinate client with updated certificate changes to Ubuntu 14.04 LTS (trusty), the same day.
That said, I did enjoy a bit of measured satisfaction, in one controversial design decision that I made in January 2012, when creating Gazzang's zTrustee remote key management system.
All default network communications, between zTrustee clients and servers, are encrypted twice. The outer transport layer network traffic, like any https service, is encrypted using OpenSSL. But the inner payloads are also signed and encrypted using GnuPG.
Hundreds of times, zTrustee and I were questioned or criticized about that design -- by customers, prospects, partners, and probably competitors.
In fact, at one time, there was pressure from a particular customer/partner/prospect, to disable the inner GPG encryption entirely, and have zTrustee rely solely on the transport layer OpenSSL, for performance reasons. Tried as I might, I eventually lost that fight, and we added the "feature" (as a non-default option). That someone might have some re-keying to do...
But even in the face of the Internet-melting Heartbleed vulnerability, I'm absolutely delighted that the inner payloads of zTrustee communications are still protected by GnuPG asymmetric encryption and are NOT vulnerable to Heartbleed style snooping.
In fact, these payloads are some of the very encryption keys that guard YOUR health care and financial data stored in public and private clouds around the world by Global 2000 companies.
Truth be told, the insurance against crypto library vulnerabilities zTrustee bought by using GnuPG and OpenSSL in combination was really the secondary objective.
The primary objective was actually to leverage asymmetric encryption, to both sign AND encrypt all payloads, in order to cryptographically authenticate zTrustee clients, ensure payload integrity, and enforce key revocations. We technically could have used OpenSSL for both layers and even realized a few performance benefits -- OpenSSL is faster than GnuPG in our experience, and can leverage crypto accelerator hardware more easily. But I insisted that the combination of GPG over SSL would buy us protection against vulnerabilities in either protocol, and that was worth any performance cost in a key management product like zTrustee.
In retrospect, this makes me wonder why diverse, backup, redundant encryption, isn't more prevalent in the design of security systems...
Every elevator you have ever used has redundant safety mechanisms. Your car has both seat belts and air bags. Your friendly cashier will double bag your groceries if you ask. And I bet you've tied your shoes with a double knot before.
Your servers have redundant power supplies. Your storage arrays have redundant hard drives. You might even have two monitors. You're might be carrying a laptop, a tablet, and a smart phone.
Moreover, important services on the Internet are often highly available, redundant, fault tolerant or distributed by design.
But the underpinnings of the privacy and integrity of the very Internet itself, is usually protected only once, with transport layer encryption of the traffic in motion.
At this point, can we afford the performance impact of additional layers of security? Or, rather, at this point, can we afford not to use all available protection?
p.s. I use both dm-crypt and eCryptFS on my Ubuntu laptop ;-)