Hi all,
I have been hacking this weekend and got a prototype for client side encryption via a chrome plugin ready. Disclaimer:
I do not take any responsibility for the security of this extension or any data loss due to bugs or mishandling of passwords.
The extension is NOT production ready and has still to be through-roughly tested.
How it works:
It hijacks the XHR communication between the dynalist client and the dynalist server. All outgoing items are encrypted, all incoming items are decrypted.
What is still missing
Quick Dynalist support
Support for bookmarks / document names
Support for shared documents
Support for dates in google calendar
⌠something else?
The code is open-source and I would appreciate if a security expert could have a look
Are you clicking the extension while being on dynalist.io ? Then after typing the password and selecting âset passwordâ the page should refresh. Are you on the latest brave browser?
If it doesnât refresh please open View > Developer > Javascript Console and send me the errors.
DevTools failed to load SourceMap: Could not load content for chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/sourcemaps/contentscript.js.map: HTTP error: status code 404, net::ERR_UNKNOWN_URL_SCHEME
DevTools failed to load SourceMap: Could not load content for chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/sourcemaps/inpage.js.map: HTTP error: status code 404, net::ERR_UNKNOWN_URL_SCHEME
DevTools failed to load SourceMap: Could not load content for https://dynalist.io/assets/js/ext/jquery.min.js.map: HTTP error: status code 404, net::ERR_HTTP_RESPONSE_CODE_FAILURE
DevTools failed to load SourceMap: Could not load content for https://dynalist.io/assets/libs/raven.min.js.map: HTTP error: status code 404, net::ERR_HTTP_RESPONSE_CODE_FAILURE
DevTools failed to load SourceMap: Could not load content for https://dynalist.io/assets/js/ext/ext.min.js.map: HTTP error: status code 404, net::ERR_HTTP_RESPONSE_CODE_FAILURE
DevTools failed to load SourceMap: Could not load content for https://dynalist.io/assets/css/theme_scifi.css.map: HTTP error: status code 404, net::ERR_HTTP_RESPONSE_CODE_FAILURE
DevTools failed to load SourceMap: Could not load content for https://dynalist.io/assets/css/app.css.map: HTTP error: status code 404, net::ERR_HTTP_RESPONSE_CODE_FAILURE
DevTools failed to load SourceMap: Could not load content for https://dynalist.io/assets/css/print.css.map: HTTP error: status code 404, net::ERR_HTTP_RESPONSE_CODE_FAILURE
DevTools failed to load SourceMap: Could not load content for https://dynalist.io/assets/js/main.min.js.map: HTTP error: status code 404, net::ERR_HTTP_RESPONSE_CODE_FAILURE
Great!
I was thinking about alternative icons to denote encrypted items, which one do you prefer and think people are less likely to use in their dynalist already:
Yes thatâs fair, I will add UI elements to notify the user about the password being saved.
Also I will add a status element to the Dynalist UI saying âClient-side Encryption Enabledâ or similar.
Also to be clear: The password is never saved in plain text.
I derive a symmetric key form it which is stored securely using a key storage which only allows for encryption & decryption within the page. An attacker could not extract the key even if it could insert malicious javascript code into the dynalist webpage (which is extremely difficult over https in the first place, but say if you had installed a malicious extension).
Though it could decrypt the documents on the page using the key of course.
@Louis_Kirsch
Tested with success. Here are my input though I think you might have already captured them in your todo list.
password input with confirmation
allow password reset/change
change bullet shape to indicate Encryption status (eg from circle to diamond)
any change (intentional/accidental deletion or insertion) made to existing encryption code string (while extension is inactive) leads to permanent â Could not decryptâ
I guess with password change you refer to re-encryption of all data with the new password? This will be tricky to do with the current system â I have to think about how to do this.
What do you mean by password reset?
Same here, sounds great but will need a lot more meddling with the Dynalist code which could turn out to be tricky. Maybe @Shida has ideas how to do this easily.
Yes thatâs right and I donât think I can do anything about this because as you said â the plugin is off. What you can do though if you encounter âcould not decryptâ is go into your version history and undo the accidental change.
Yes. Say I decided to change password to a stronger one, I was hoping the extension performs updating all existing encrypted text prior to password change, to match the latest password.
Itâs tricky because in order to make it secure I would have to copy all your documents in order to discard the version history. In principle I could do that using the API - but it will be a bit of work.
The little lock icons are a bit hacky right now though (basically using css rules) and I think it might slow down the client too much.
Maybe I can try to dig into the core Dynalist code to make it more efficient, otherwise I might have to remove them again. EDIT: I think I found a more performant way of doing it.