The problem Orange Life solves
Orange life is a secure and convenient records management system.
Your medical records are in your hands π. No single entity, except you, controls the records you upload.
Whenever a hospital π₯ needs access to your records, you can choose to give them access and revoke access once they do not require it.
Highlights of Orange Life:
- β¨ Convenience: you do NOT need a blockchain wallet, metamask or any other tool to use Orange Life. All you need to do is remember a friendly mnemonic in case you need to recover your wallet. Uploading a record is as easy as selecting the file and clicking a button. Granting and revoking access is easy too.
- QR Codes make it easy to allow family members and hospitals to access your records.
- π Security: Your records are encrypted using state-of-the-art cryptographic methods so that only you and the people you have given access to, have the records.
- You only need to remember a simple mnemonic and a password of your choice.
- π Decentralized: Your records are not controlled by a hospital, insurance company or anyone else. The blockchain network along with a custom decentralized network handle only the metadata or parts of the encrypted record.
- π Traceable: Any access granted or revoked is registered on the blockchain. This prevents unauthorized access and keeps a log of all events.
More details can be found on the βΉοΈ website.
We make use of the following technologies:
- π¨ Polygon Network: for fast transactions on the blockchain. We also made use of the GSN nodes deployed on the network.
- πΈοΈ The Graph: to efficiently query our blockchain data over GraphQL
- π NuCypher: forms the backbone of our encryption system. We make use of Umbral Proxy Re-Encryption (PRE)
- π½ IPFS: for decentralized storage. We use a private IPFS network to improve performance as well as provide some degree of privacy
Challenges we ran into
- Traditional Ethererum-related JavaScript packages such as Web3.js were not supported with Typescript and WebPack 5.
- We solved this by re-writing our app in Angular 11
- Encryption in such a way that others can be given access to a particular record and then revoked, without having to duplicate the data or encrypt it several times
- We used NuCypher's Umbral Proxy Re-Encryption (PRE) to solve this. It was a perfect fit for our problem.
- Users should not need to have a blockchain wallet or cryptocurrencies to store or retrieve their documents
- We solved this by using The Gas Station Network (GSN), specifically OpenGSN's GSNv2
- NuCypher did not yet have a JavaScript/TypeScript library to interact with it from a frontend
- We used the
umbral-pre
JS bindings of the WASM compiled Rust implementation of Umbral Proxy Re-Encryption. Then we made a custom implementation of Ursulas API to re-encrypt the keys.