A closer look at end-to-end encryption
End-to-end encryption became very prominent with it's implementation in WhatsApp and other messengers following suite. These changes dramatically increased the interest in this concept, but some questions still remain:
- How does it work?
- Is it secure?
- How can I check E2EE in my favorite messenger or cloud-service?
We will try our best to help you answer these questions (and some more ;)
When you send a file or message to a communcation system like WhatsApp or Dropbox your data traverses several phases of processing:
Phase 1: Data in transit
Your data is send from your device to the backend server of the system. This covers all different use-cases like from your mobile device (iOS, Android, etc.), from your browser, from your desktop app, etc.
TLS termination proxy
This part is absolutely critical for the overall security of communication systems like cloud storage services or messengers: Data coming from a secure TLS connection is decrypted, process on the backend server (metadata extracted, user-information processed, etc.) and then passed on the Phase 2. During the TLS Termination data is available in cleartext to the processing server.
Phase 2: Data at rest
After your data is processed and categorized, it is stored to be able to access more efficiently when you need it. To increase data protection most services provide data encryption at rest (see for exampleAmazon S3, etc.)
Let's sum it up: Phase 1 protects your data over the wire but there is the problem with TLS termination proxies.Phase 2 protects your data stored in whatever backend (database, amazon s3, etc.) but the problem already might occure in TLS termination. So a holistic security concept protects data in all phases.
End-to-end encryption enters the stage. Let's illustrate the different phases:
- Data is encrypted at the user side
- Encrypted data passes Phase 1 (with additional TLS protection which theoretically is not necessary in a strong E2EE system)
- The TLS connection is terminated by the TLS Termination proxy. Data is passed on the backend server to be processed.
- Data is still encrypted. The backend server is not able to process the information in the user's message or file.
- Data is encrypted and stored. Comparable to phase 1 encryption in phase 2 is again kind of redundant in a strong E2EE system.
Challenges in E2EE systems
Strong E2EE are quite hard to implement as they introduce several challenges:
Key exchangeUsers need to securely exchange their cryptographic keys to be able to decrypt their messages or files. Whereas the concepts of secure key exchange methods like Diffie Hellman key exchange are quite mature and already out there, it is still cumbersome to implement correctly in new systems.
PerformanceEncrypting and decrypting data consumes much CPU power and results in slow user experiences (especially on older mobile devices).
Lack of features like fulltext searchAs a consequence of E2EE potential eavesdroppers cannot read, process or structure the data. Whereas this is exactly what the user wants, this also prevents service providers like cloud-storing services, communication services etc. to structure the data in that way that it is easily accessible for the user.
Check availability of E2EE
But how do you check if your favorite communication system (messenger, cloud-storage service, etc.) is using E2EE? This is extremely hard to answer. One indication might be the service itself:
Do you need to connect via QR-code scans? This indicates to a secure key exchange from different devices and might lead to a proper E2EE system.
Is the crucial part of the encryption implementation available as open-source? This is the ultimate check to see, if E2EE is implemented correctly. For most people this is quite hard to check, but there might be blogs that already took a closer look.
We took a closer look at some services:
- WhatsApp introduced E2EE some time ago and seems to implement it properly.
- Tresorit provides strong E2EE support - but it does not provide open-source access so it finally remains unclear.
E2EE is great but complicated to implement. The number of services already providing E2EE or at least are working on a proper implementation is clearly on the rise. But it still boils down to the user: To make the best use of E2EE you have to decide for yourself which data might be sensible and which is ok to share over not-so-secure channels.