SafeJournal is written from the ground up for security and peace of mind. This is a personal project made to satisfy a few key goals that no other platform was providing.
- Data must be under your control
- No unencrypted data can ever be stored
- Encryption must be non-proprietary and reversable
- Software must be open source
- Encrypted images must be possible
This project meets these goal by providing a single html file with inline JavaScript. This file can be placed anywhere - your own server, computer, or even phone.
- A new entry is created using the safejournal.html file, and only exists in your current browser tab as a javascript variable
- The journal does not auto-save, you must export it and replace your old copy to save your entries.
- When you export, a unique password is used to AES encrypt all entries
- A simple text file with only encrypted data will be downloaded locally. You may save this anywhere - an encrypted disk, on Google Drive or your own ftp server... it's up to you.
- On returning to SafeJournal, you'll use that encrypted file and your password to unlock and edit your journal again.
{"ct":"c0xfta9OTtSrk+CzkyeJRTOqc1+camNxwmvzGoMSeifEWhsvK1M2MQCXS39tvugwOw/mwHfK8GpWNgF/CzQFBw9coyUsPe0C0uDPDYMRADj6tAjMAuDjBVLJlBtzfkQ3ox0+YsXWMj7nqgW3Io5lbpNFSJTWg1sxsR5Rdka6SGw=","iv":"671ec7444733279541ba08fba58f18ae","s":"807bca9dd9bad8c7"}
Where CT is encrypted data, IV is initialization vector, and S is the salt.
CryptoJS for encryption
DefiantJS for templating and data modeling
Skeleton CSS
FileSaver.js for ease of downloading
moment for JavaScript date formatting
cryptojs-aes-php as proof of concept for decrypting in another language
Trumbowyg rich text editing with inline images
Please feel free to weigh in! This is a personal project in its infant stages, pull requests are welcome.
This project is built using gulp to create a single inline html file that holds all html, css and js from the app folder. If you're unfamiliar with gulp, you'll want to look that up and become familiar with the basics of a package managers and build system
Requirements
- Start a Fork of this project on your own GitHub profile
- Gulp installed globally on your system
- Clone the project, and open a terminal in the new project folder
- Run
npm install gulp
- Run
npm install
- To build, use
gulp inlinesource
- Commit your work, push to your forked repo and then start a pull request. I'll get to it as soon as possible!
No system is completely secure, this is a best-effort project that weights security heavily in the balance against ease-of-use. To be completely secure, this file and the encrypted data should be stored on an air-gapped computer. If using on a personal computer, things like trojans, keyloggers, and people behind you can compromise the unencrypted data.