We wanted to allow users to upload their videos to IPFS or similar public distributed storage networks, while allowing them to still have control over who can see their videos. Traditional encryption methods such as PGP tend not to work well with large files, so we came up with an alternative encryption scheme which is not based on cryptography at all. Instead, we use Generative Adversarial Networks, specifically CycleGAN, to create a steganographic mask which modifies videos to the extent that an AI cannot recognize them as the original video. These steganographic masks can be thought of as "keys", though they bear no relation to cryptographic keys. It works like so: 1. User generates encrypted version of video and corresponding steganographic mask and uploads video to IPFS or other public distributed storage network. 2. User securely stores steganographic mask on IPFS. The mask can only be accessed by authorized persons. 3. User or another authorized party obtains steganographic mask and downloads publicly available copy of encrypted video. 4. User uses steganographic mask to decrypt video. Our project's name, !PiedPiper, is an homage to HBO Silicon Valley's Pied Piper, which was a fictional startup which enabled the secure storage of large files on a new, decentralized internet.
How It's Made
We built our encryption/decryption system, including the CycleGAN implementation, in Python 3 using PyTorch and NumPy. We built a NodeJS server to store and retrieve video files from Powergate localnet, although it seems to have broken with the latest Powergate API update so we reverted to using pow cli commands. We also have a React+Web3.js frontend for uploading masks in JSON format to IPFS mainnet, based of Austin Griffith's eth-scaffold boilerplate.