With cryptographic applications becoming more and more popular, one thing seems to be lacking: cloud storage. Although there are some applications with encrypted cloud storage, there are few, and they lack features.

Sia, a decentralized cloud storage system managed using blockchain, accomplishes many goals, including being cheaper than traditional cloud storage, but is much too unfriendly to use directly.

CryptBox is a way to take advantage of Sia without going to all the hassle present with running your own Sia node.

What it does

CryptBox is a full file management website.

CryptBox takes your username and password and generates a master key. This master key never leaves your browser, and is used to encrypt and decrypt your files. Only you know this key, so only you can decrypt your files.

Again, ONLY YOU can decrypt your files. We cannot see any of your file or directory names, or file contents.

Also, CryptBox backs up your files to Sia, allowing cheap rates on storage, and remains secure.

How we built it

CryptBox is built with a Next.js frontend. The API server exports a REST API written with Flask and Python.

The new SubtleCrypto API is used to provide cryptography on the frontend.

Challenges we ran into

Managing workflow so that everyone had something to do was challenging. Occasionally, we had to wait to test our code until the other half of the code was properly set up.

Accomplishments that we're proud of

Leading up to the project, we had an idea of what roles each of us would occupy, but it became quickly apparent that these roles would not work out. We transitioned to new roles and continued to work together effectively.

What we learned

36 hours sounds like a lot of time, but it goes by fast.

Asynchronous functions are rather annoying to use.

What's next for CryptBox

CryptBox would greatly benefit from a way to share documents with other users. Unfortunately, this functionality is not easy to implement and we had forgo implementing it because of time constraints.

+ 1 more
Share this project: