Skip to content

Instantly share code, notes, and snippets.

@OmeGak
Created August 2, 2014 15:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save OmeGak/98c3d42acb4cf7502e2a to your computer and use it in GitHub Desktop.
Save OmeGak/98c3d42acb4cf7502e2a to your computer and use it in GitHub Desktop.
Blindstore CERN Webfest
# Blindstore
> ![](http://i.imgur.com/Yj5qUjm.png)
>
> Blindstore is the first stone for a secure communication protocol.
## Motivation
Snowden's leaks last year disclosed the fragile condition of the privacy on the Internet, having been threatened not only by private companies but also by governments' intelligence agencies.
Since then, quite a few developments have been done in order to mitigate the eavesdropping of private communications. I'd like to talk breafly about two services: Lavabit and Protonmail.
Lavabit, based in the USA, was a service that allowed such communications via email. However, under judicial request, they would be forced to give access to those communications.
Protonmail is another service, founded last year by CERN people, that achieves to provide a similar service. It provides quite a few of nice guaranties that they're taking your privacy seriously, but... Is it enough?
There are still a few problems:
* It's a private company (!!) and the code they are running is not open-source
* You are trusting them, essentially, we also once trusted the don't be evil
* One huge limitation: it's only secure as long as you contact people within ProtonMail
### Private communication: it can't be that hard, right?
It should be fairly simple. Instead letting Gmail or Protonmail to handle our communication, we just want to do it ourselves with an open protocol.
We just need to establish a connection directly between person **A** and person **B** (*peer-to-peer*), and let them communicate securely by encrypting the conversation so nobody but them both can understand it.
What do **A** and **B** need to maintain such communication? Let's say it's **A** initiating the conversation. **A**, having **B**'s identity, would need to know a location where **B** will be available, and his public key.
In the good old days, this would be incredibly easy to achieve thanks to the super useful phonebooks. **A** would just need to check his copy of the phonebook and no evil NSA agent would have a single clue about it.
Well... It's not so easy as the Internet made things a bit more difficult in this regard. Now the Internet Phonebook™ would be outdated every few nanoseconds, as the location of every user changes several times per day. Also, the Internet Phonebook™ is a bit heavier than any server could easily deliver (many gigabytes). Because of this, we can't afford nowadays shipping an updated Internet Phonebook™ on demand.
To walk around this, **A** would need to ask an operator at the central, where the most updated version of the Internet Phonebook™ is stored, to look up **B**'s location. But wait! Now she knows we wanted to talk to **B**! And he could sell us out to the NSA!! Or even worse, he could be a NSA agent himself!!!
That's why we need an oblivious operator. An oblivious operator is an operator who will perform his job as expected, but will have no consciousness of what information he looked up, so not even him or the NSA will know that **A** wanted to contact **B**.
## Blindstore - the oblivious operator
Blindstore is our implementation of a private query storage.
This idea comes from a paper:
[Single-Database Private Information Retrieval from Fully Homomorphic Encryption](http://ieeexplore.ieee.org/xpls/icp.jsp?arnumber=6189348)
* Binary matrix, not a relational database. For now
## The hackathon
Everything we did can be found at the [Blindstore](https://github.com/blindstore) GitHub organization.
The main building pieces of our project:
* libscarab: A C library for homomorphic encryption
* pyscarab wrapper: requirement for blindstore to use libscarab
* blindstore server: stores the data and takes care of returning encrypted query responses
* blindstore client: takes care of encrypting the queries and decrypting the query responses
Extra effort we put in making the software easy to use:
* Documentation for blindstore client
* Some tests for pyscarab already passing in [Travis](https://travis-ci.org/blindstore/pyscarab)
We didn't forget the communication aspects, either:
* [Blindstore logo](http://i.imgur.com/Py0bs01.png)
* [Didactic video](https://www.youtube.com/watch?v=veVxB-VrZjU)
* [Project website](http://blindstore.github.io/)
* Demo website
### Our tools
For hacking:
* Python with Flask for the backend
* Meteor.js for the demo frontend
For collaborating:
* Git and GitHub for code versioning and storage
* Gitter for centralized chat
* Indico for booking meeting rooms
For presenting:
* Slides.com & PowToon
### The team
Alejandro Avilés ([@OmeGak](https://github.com/OmeGak)) - Spain
Benjamin Lipp ([@blipp](https://github.com/blipp)) - Germany
Bogdan Kulynych ([@bogdan-kulynych](https://github.com/bogdan-kulynych)) - Ukraine
Davide Kirchner ([@davidek](https://github.com/davidek)) - Italy
Harry Cutts ([@Fodaro](https://github.com/Fodaro)) - UK
José Molina ([@Moliholy](https://github.com/Moliholy)) - Spain
Michał Jabczyński ([@Eipifi](https://github.com/Eipifi)) - Poland
Tommaso Papini ([@tommy39](https://github.com/tommy39)) - Italy
## References
Logo:
* Inspired on [The Eye of Providence](http://devan-colley.deviantart.com/art/The-Eye-of-Providence-439920143) by Devan-Colley
* Eye designed by Eugen Belyakoff from the Noun Project
Icons:
* Key designed by William J. Salvador from the Noun Project
* Secure Download designed by Michael Rowe from the Noun Project
* Database designed by Shmidt Sergey from the Noun Project
* Plus designed by Evgeniy Kozachenko from the Noun Project
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment