Lockbox
Lockbox copied to clipboard
Reversible, secure secret storing for your rails model using public/private key encryption and acts_as_lockbox.
Lockbox
Lockbox is a simple rails plugin that let's you use public key crypto to encrypt and decrypt strings. This is just a quick hack, I decided not to go for anything more elaborate because it met the minimum requirements of what I'm building and nothing more. You can always get the latest version of this plugin from Github:
- http://github.com/jamesotron/Lockbox [web url]
- git://github.com/jamesotron/Lockbox.git [clone url]
If you're using Lockbox in production please email me and give me your feedback to [email protected]. Feel free to fork Lockbox on github and or send me patches, I'm always interested in use cases.
Lockbox is released under the Mozilla MPL 1.1, all code is copyright 2009 James Harton.
Example
Use openssl to generate the keys:
openssl genrsa -des3 -out private.pem 2048
Generating RSA private key, 2048 bit long modulus ..................................................................................................................+++ ..........+++ e is 65537 (0x10001) Enter pass phrase for private.pem: Verifying - Enter pass phrase for private.pem:
openssl rsa -in private.pem -out public.pem -outform PEM -pubout
Enter pass phrase for private.pem: writing RSA key
Next, move the private and public key files into $RAILS_ROOT/config/ and configure Lockbox:
mv public.pem private.pem config/ cat <<EOF > config/lockbox.yml development: public_key_path: config/public.pem private_key_path: config/private.pem
testing: public_key_path: vendor/plugins/lockbox/test/public.pem private_key_path: vendor/plugins/lockbox/test/private.pem pass_phrase: test
production: public_key_path: config/public.pem private_key_path: config/private.pem EOF
You might wish to stop your Rails application from running, and display a passphrase entry dialogue if the Lockbox hasn't been unlocked:
class ApplicationController < ActionController::Base
before_filter :unlock_box
def unlock_box if Lockbox.locked? redirect_to :controller => 'unlock', :action => 'prompt' end end
end
You can use lockbox in your model by using the acts_as_lockbox class method:
class User < ActiveRecord::Base
acts_as_lockbox :for => [ :password, :credit_card_number ]
end
Copyright (c) 2009 James Harton, released under the Mozilla Public License version 1.1