Inspiration

WikiLeaks has been responsible for exposing highly sensitive classified media, from the Afghan war diaries to secret documents concerning prisoners in Gauntanamo Bay. Claiming a database of over 100 million documents, security and privacy on WikiLeaks is vital to its reputation. Suffering from DDoS attacks, and heavy server regulation, WikiLeaks has found it increasingly difficult to maintain their infrastructure reliably.

In consequence, we're motivated to explore the possibility of building a secure platform for investigative journalism that is simultaneously reliable and inherently anonymous.

What it does

dWikiLeaks is essentially decentralized WikiLeaks. It provides a secure medium by which whistleblowers can anonymously and securely submit sensitive files to a trusted organization for analysis. This is enabled by a purely peer-to-peer network architecture (no http requests to central authorities) for distributed file storage, end-to-end RSA encryption, and Ethereum.

How we built it/How it works

The typical use case is as follows:

  1. A user wishes to anonymously disclose a highly sensitive document
  2. The file is processed via our web app, encrypted via RSA, split into chunks, and persisted on a distributed peer-to-peer network
  3. A hash referencing the file is obtained, and sent to a smart contract on the Ethereum blockchain for persistence
  4. WikiLeaks, the sole recipient of the file, reconstructs the file based on this hash and securely decrypts its contents via a unique private key

We used truffle.js to streamline our development workflow, from compiling and testing our smart contract to managing its deployments on testrpc. The distributed file storage system is implemented via a front-end IPFS client on Node.js, which does a great deal of the heavy lifting with the peer-to-peer network.

The web app interfaced with the blockchain via Metamask and Ethereum's Web3 library. We managed DOM manipulation and the user interface with React and Redux.

Challenges we ran into

Compared to other hacks we've completed in the past, we found documentation and resources to be quite limited. It was also our first time writing Solidity and smart contracts, both of which are notoriously difficult to debug.

Accomplishments that we're proud of

  1. Finishing the hack in time
  2. Taking our high-level knowledge of these systems and building something that (sort of) works
  3. Having fun meeting new people

What we learned

  1. How to write, deploy and interact with smart contracts
  2. How the blockchain's state transitions work at a deeper level
  3. A wider appreciation for the cryptographic properties of blockchain-based systems

What's next for dWikiLeaks

  1. Looking into alternative protocols for privacy on the blockchain (Zcash has some very cryptographically interesting solutions for anonymity)
  2. Building a channel for secure communication between journalists and sources as part of the platform
  3. Taking this beyond just WikiLeaks, as a potential medium of communication between sources and journalists for any news organization.

Built With

Share this project:

Updates