Head of Cryptography Engineering at Tresorit, Péter Budai talks with Kim Carter about End to End Encryption (E2EE), backdoors, the scenarios where E2EE can be and should be used. IM, Voice over IP, Email scenarios, as well as interservice communication scenarios such as securing data in use with full memory encryption, CPU-based key storage, enclaves, cryptographic protocols (Secure multi-party computation and Homomorphic encryption). Péter and Kim discuss encrypting communications between microservices in the Cloud. Which ciphers to avoid and which to use along with how to find the right crypto library for your next software project.
We’re going to discuss IM, Voice, and Email scenarios briefly, then move into Inter-service communication scenarios.
We apply end-to-end encryption to Instant Messaging. Some of these offerings are:
What are your thoughts around these offerings and their ethics?
We’ve got Voice calls with offerings such as:
What are your thoughts around these offerings and their ethics?
Not end-to-end encrypted, unless using GPG/PGP, which is a pain. TLS provides encryption to the server, STARTTLS can provide encryption between the servers.
Google made various announcements from late 2013 through to about March 2014 that they now provide not only mandatory TLS encryption between clients and their servers, but also between their own data centres.
This is good, but it’s not necessarily E2EE, there are transitional seams at each server when the data goes from resting to in-transit. The NSA and GCHQ more than likely have backdoors into Google servers.
I think it’s safe to say, if we want email or any cloud privacy for that matter, we need to take the responsibility ourselves.
As Software Engineers, we’re building complex and distributed systems to run on servers we know very little about (AKA the Cloud), this is untrusted territory.
The system provides both confidentiality and integrity protections of code and data which are encrypted everywhere outside the CPU boundary
This is where a kernel patch provides CPU-only based encryption to defend against cold boot attacks, allowing RAM to be treated as untrusted. Can you tell us a bit about this and whether Software Engineers could be, and should be making use of it in our systems?
(Implementations: TRESOR, Loop-Amnesia)
We touched on Intel Software Guard Extensions (SGX) in the show on Docker Security (#290)
Data in enclaves is encrypted in RAM, but clear text within the CPU and its cache.
Intel introduced the concept of enclaves as part of its SGX, providing a set of new SGX-enabled CPU instructions (18) allowing user-level code to allocate private regions of memory known as enclaves.
Intel has the concept of the symmetrical provisioning key which resides in both the SGX-enabled chip and in Intel servers.
To establish an enclave, the software needs to offer its provisioning key to Intel, and if there’s a match in their database, Intel will issue an attestation key that lets SGX set up the enclave.
The SGX patents disclose in no uncertain terms that the Launch Enclave was introduced to ensure that each enclave’s author has a business relationship with Intel, and implements a software licensing system
Secure multi-party computation (AKA secure computation or privacy-preserving computation), the idea here is to create methods for parties to jointly compute a function over their inputs while keeping those inputs private
Homomorphic encryption allows us to perform computations on ciphertext, the result being the result of the operations as though they had been performed on plaintext but still encrypted
Now that we’ve talked about securing data in use, what are the best options for todays Software Engineers to perform processing on encrypted data?
We touched on what CSPs are doing to encrypt our comms between data centres, services and components in the Cloud Security show with AWS security specialist Scott Piper (#314). It basically comes down to: we don’t really know what they’re doing, so this is the Developer’s responsibility.
Tresorit uses non-convergent crypto to store users data, can you talk a bit about what this means and how this works?