Swordfish is an experiment in building a group-optimized password management app. It is currently very alpha. Browse all the issues to see what features are planned.
Storing passwords on a server might seem like filling a lake in Alaska with honey and expecting to keep bears out. I don't think it's like that. Why?
Even if an attacker gets access to your server or database, all secure items are encrypted client side. The server has no idea what it is storing and no way of decrypting it.
When you sign up, a RSA public/private keypair is generated in your browser. All sensitive data is encrypted with your private key, which is password-protected and never transferred to the server. No sensitive data is ever transmitted over the wire unless it is encrypted with secrets only available on the client.
- Why passwords have never been weaker—and crackers have never been stronger - A great article about password cracking techniques and the implications for choosing strong passwords.
- JavaScript Cryptography Considered Harmful - A thoughtful critique of JavaScript encryption, discussed in #28.
- A JavaScript Implementation of TLS - The background of Forge, the encryption library used by Swordfish.
- Web Cryptography API - A draft W3C proposal for a JavaScript cryptography API. If all goes well, this will eventually replace Forge for all of the cryptography in Swordfish.
- Megabad: A quick look at the state of Mega’s encryption - Mega essentially uses the same approach as Swordfish: RSA keys for each user, coupled with a randomly generated key for AES encryption of each item.
Use the bootstrap
script to get the environment set up.
script/bootstrap
Now you will need to run the database migrations before you run the server.
bundle exec rake db:create db:migrate
Finally you can start the application.
script/rails s
Running the tests requries PhantomJS. If you're on Mac OS X you can use homebrew to install this for you.
brew install phantomjs
If you hack on Swordfish and end up adding or editing features you will want to run the tests.
bundle exec rake
Want to join the core team?