Search code examples
symfonysecurityencryptionpasswordsuser-data

Zero-Acccess Encryption and "Forgot Password" section


I'm currently creating a "Google Docs" alternative using Symfony, but made for privacy. To "certify" the confidentiality of user data, I'm interested in the "Zero-Access" infrastructure.

If I understand correctly, the concept is that the client encrypts/decrypts data with a key based on the password and the server stocks encrypted data. It's better for security and privacy and certify that the website cannot use data for tracking/advertising.
Is it right?

The concept is interesting but I found 2 problems:

  • The "shared Files" can't be decrypted by users other than the owner (or the latest user who modified)
  • I cant make a "Forgot Password" section without deleting all the current user data.

For the first problem, I found a solution: the "userAccess" entity (STR user_id, STR doc_id, INT permission) stock the file key encrypted by the user key, the client can decrypt this key then decrypt/encrypt the file.

For the second problem, I don't have any solution...

Here some questions:

  • Is my "Zero-Access" definition right?

  • Is my answer to the first problem true?

  • Is there any solution to the second problem?


Solution

  • I'll try to answer your questions:

    • I am not familiar with the "Zero-Access" term you are using. However, what you describes looks like End-to-end encryption to me, meaning data are only decrypted on clients.

    • Regarding your first solution, it is indeed how it is usually done in that case. You could be interested in reading what the Signal application does to encrypt chats, in particular the Sesame algorithm (see here)

    • Finally, there is no way to recover encrypted data if the encryption key is lost, so (for instance, firefox resets your data but provides recovery keys. One could guess these keys act like an other password)

    Hope that helps!