There are, simply put, a lack of options out there to securely send files to someone else. No matter where we looked, there would either be a middleman or the solutions would be too difficult for everyday users to understand and trust. For these users, Googling how to share a file securely directs them to centralized services such as Google Drive, Dropbox, and file.io.
With Encrypton, we seeked to create a way to share files that was just as intuitive to use as any centralized alternative, but having it all be decentralized for the added security. Encrypton operates directly between the client and the blockchain; no data is ever sent to any centralized servers. Having an trust-less open source tool with a streamlined user experience was our main goal, and we're proud of what we're able to accomplish!
What it does
Encrypton allows users to login with Metamask and upload a file with IPFS, a decentralized file sharing protocol. The IPFS hash (address) is then encrypted in the client's browser with a key of their choice. They are then required to sign the document using Metamask, and the document/user signature pair is added to a smart contract. We then generate a link that they can share to whoever they want. The recipient is then required to input the correct decryption key and sign the document with their own Metamask. Once those are completed, the recipient can view the original document as well as the other users who signed it.
All the users who have accessed the file can see a list of users who have signed the file, so everyone knows who has access to it and any malicious/unexpected viewers can be detected instantly.
How we built it
The front end is built entirely with React.js. The backend consists of Geth to send requests to the Ethereum blockchain and Embark to connect with the local IPFS daemon and serve the webpage.
Challenges we ran into
Finding a secure way to encrypt the file locally, and wrestling with Embark to get IPFS working.
Accomplishments that we're proud of
Packing it all up into a web app that's easy for anyone to use!