A privacy-preserving app for comparing last-known locations of coronavirus patients
NOTE: This repo serves as a demo for the work being done by the Private Set Intersection team here at OpenMined. You can find their repos here:
We are no longer pursuing a production use-case with this application. Instead we've decided to contribute to another project: https://github.com/corona-trace
/covidalert
- React Native App for end-users/dashboard
- Create React App with Firebase cloud functions for an API and admin dashboard/designs
- All the related design files/package
- A small NPM package with three functions. One is for turning GPS coordinates into a sectorKey and gridTensor, and two others for allowing us to stringify and parse BitInts in JSON.We have support for the following languages:
We are open to any pull requests to add support for other languages!
app
to workThe dashboard and package directories mostly speak for themselves. To get the app to run, run the following lines:
yarn install
to install dependenciesreact-native link
to add assets (fonts and images) to packagescd ios && pod install && cd ../
yarn start
for hot reloadingyarn ios
/ Android: yarn android
For anyone wanting to know how we’re currently performing set intersection on the Covid Alert app… this is the description of how the system works. We’re looking to improvements on this process, specifically related to key generation and private set intersection in either Paillier HME or SEAL.
We’re trying to work on improving key generation speed for iOS and Android using React Native. There’s two places where we’re currently using Paillier HME: on the device to generate keys, encrypt the grid tensor, and then decrypt the result AND on the Node.js serverless function where the actual computation takes place. Here’s the workflow:
That’s the whole workflow from A->Z. Here’s a link to each of the main files involved in this work...
Many people have worked on this application within the OpenMined community, many of which do not show up in the commit history. Here's a brief list (in alphabetical order):