From my reading so far, it sounds like ZeroKit's stores the private keys? Am I mistaken? Because if so, this is definitely not end-to-end encryption because ZeroKit is a middleman that can be attacked to gain access to keys.<p>Edit: It says ZeroKit doesn't have access to the password, so asking for clarification here - is ZeroKit running entirely on the client then? Or do passwords ever get sent to the server (even if they are not stored or are session encrypted)? If that is true, why does one need to make a ZeroKit API call? Edit again: Quote from the article "which enables you to log in a ZeroKit user on the server", perhaps cool that they have this option, but that is a huge red flag to me that there is a server side attack vector.<p>Full disclosure: I work on a competing system that has uses real end-to-end encryption. It works like this:<p>- First, PBKDF2 extend a user's password into a proof of work.<p>- Use that proof of work to AES encrypt/decrypt an ECDSA private key.<p>- Now use that private key AES encrypt/decrypt private data, or a public key of a trusted user to encrypt/decrypt private messages.<p>Note: The user authenticates strictly against their device, the password is never sent to any servers. Same with the private key, it can only be derived from a local process PBKDF2 extending the password (to prevent brute force attacks) and decrypting the private key with the proof of work. The private key is never shared or known by any middleman servers.<p>To read more about how this works, see a working prototype demo, and watch our 1 minute animated explainers on cryptography, check out this link: <a href="https://github.com/amark/gun/wiki/auth" rel="nofollow">https://github.com/amark/gun/wiki/auth</a> (Note: All our code is MIT/ZLIB/Apache2 and open for auditing).