
Encrypted diary
A personal diary where every entry is encrypted using the user's password as encryption key.
About Encryption
When a user logs in, an encryption key is created using his password and Password-Based Key Derivation Function 2 (PBKDF2). His data is then encrypted / decrypted using Advanced Encryption Standard (AES).
This means that even if the database were to be compromised, his personal data would be safe as long as his password is. This also mean that if the user forgets his password, his data is lost.
For practical reasons, some data that could be considered personal is not encrypted.
Here's the list of encrypted data:
- Entries Content
- Labels Avatar
And here's what isn't - and why:
- User Email Address - For login
- Entries Title - For Entry search
- Labels Names - For Entry / Label search
- Entries Date - For Entry search
Self Host
You may self host this project.
TODO : --> explain dk compose, .env, ovh / postgresql
Features
- Short-lived session. Maximum 1h and auto log out on session end.
- Virtual Keyboard to enter password and prevent key logging.
- Two Factors Authentication with Time-based One Time Password (TOTP)
- Entry edition using Markdown format with live preview.
- Labels to categorize each entry, find entries by theme and act as a preview of an entry content
Road map
Disordered
- Additional 2FA Methods
- 2FA Recovery codes
- Entries Media
- Entry search
- Read only user for demo purposes
Contributing
Feedback
If you have a feature request, found a bug, or just want to give your opinion about this project, please open a Github issue ! I'd love to hear your feedback.
Dev
todo Explain steps to set up dev server
Resources
https://core.telegram.org/techfaq#q-how-does-end-to-end-encryption-work-in-mtproto