Client-Side Encryption

January 21, 2020  |  Cryptography

Servers are handy. Most apps upload our data to a “cloud” so we can stop worrying about losing our devices or keeping our data in sync across our device fleets.

I was thinking about that for quite some time. I’m working on a portfolio tracking app which deals with really sensitive data. Is there a good reason for our target audience to share their financial data with a few strangers running the app server? A lot of people wouldn’t mind, but we’re also responsible for protecting that data, and it’s not simple at all.

Actually, there is no need to share unencrypted user data with a “cloud” to ensure it’s available from any device, as long as it’s encrypted client-side before being sent to the server. You might have heard of services such as ProtonMail or Tresorit, which adopted that model and provide their services without knowing anything about the private data of their users.

That’s really cool, and I hope more services will follow their lead, but there is no free lunch. This model only works if users take proper care of their encryption keys. If you lose your client-side key, the guys running the server won’t be able to recover your data, because it’s kind of the point. That said, I think it’s still an improvement over the status quo.