A demo application using the activestorage-horcrux gem to distributed shares of attachments across multiple storage services using Shamir Secret Sharing (via the tss-rb gem). Use it in your storage.yml file. It is not a mirror, but can be named as a storage service.
Compatible with the lockbox gem.
# in storage.yml
disk1:
service: Disk
root: "tmp/disk1"
disk2:
service: Disk
root: "tmp/disk2"
ipfs:
service: Ipfs
api_endpoint: https://ipfs.infura.io:5001
gateway_endpoint: https://cloudflare-ipfs.com
horcrux:
service: Horcrux
shares: 5
threshold: 3
prefix: true
services: [ disk1, ipfs, disk2 ]
After cloning, creating the database, migrating and starting up the server, visit the app root page (typically at http://localhost:3000 in local development or use 'heroku open' when deployed to Heroku). Then, create a new upload. Call it "hw" and attach the helloworld.txt file in the demo subdirectory:
If successful, you will see five keys for five shares prefixed with their storage locations. (HINT: save the deleted keys somewhere for safe keeping!) You will also see the reassembled (and decrypted) attachment contents ("hello world"):
You can edit the keys by clicking 'Edit':
and remove (just delete the form field contents) the last two keys) and click 'Update Upload' leaving three of the five keys:
Since you still have three of five keys (three is the minimum threshold), reassembly (and decryption) will still work:
However, if you edit and remove the 3rd key:
So that only two of the five keys remain:
then there will not be enough shares to reassemble! HINT: edit the keys are replace them with at least three of the five keys to regain access.
You must have postgres available. Works with the lockbox gem and use the LOCKBOX_MASTER_KEY below for development only.
% git clone [email protected]:johncallahan/activestorage-horcrux-example.git
% cd activestorage-horcrux-example
% export LOCKBOX_MASTER_KEY=0000000000000000000000000000000000000000000000000000000000000000
% bundle install
% rake db:create
% rake db:migrate
% rails s
Then visit http://localhost:3000
- Heroku deploy button
- API examples