What is sometimes called Zero Knowledge, sometimes end to end encryption occurs when a server only processes ciphered data (at least for sensitive data) with a result where a compromise of this server does not threat the confidentiality of the data.
In this model :
- the data are deciphered at the client side (web browser, smartphone app, …)
- the data are always encrypted before to be sent to the server
- the cipher key is never transmitted to the server
Some examples of existing architectures like this are privatebin, cryptpad, signal app, protonmail (not sure)
This kind of architecture is interesting because even if a hostile third party (government, hacker, …) tries to take over the main server, the users’data remain unviolated as the key is never known by the server.
The counterpart is that when a user lost the key, the data are lost for ever (or until the next AES breakdown).
So this model is not perfect yet.
My question is : is there a way to ensure the client side code authenticity to avoid executing malicious code sent by a compromised server ?
The last time I talk with a dev at cryptpad, he told me about code signing for website. They tried to dig the idea of publish open source client side code, sign it somewhere and make the browser checks that the signature is the same as the one associated with the auditable open source code.
Is someone knowing something about that ?
This question came to my mind because, today, many people talk about Zero Trust for the Cloud based architectures.
I’m not sure to have the same definition of Zero Trust but I’m quite chocked to never see anywhere a little concern about the fact that, currently, no Cloud based architecture can be resilient to AWS compromise (or AWS becoming hostile). Something I feel more like "zero trust except amazon"…
Zero knowledge could be a solution but not a complete one until the client side is still exposed.