Git Product home page Git Product logo

apir-code's Introduction

Authenticated PIR

WARNING: This software is not production-ready and it might contain security vulnerabilities.

This code accompanies the paper "Verifiable private information retrieval" by Simone Colombo, Kirill Nikitin, Henry Corrigan-Gibbs, David J. Wu and Bryan Ford, to appear at USENIX Security 2023.

This repository contains the code for multi-server and single-server authenticated-PIR schemes and the code for the proof of concept application Keyd, a privacy-preserving PGP public keys directory based on multi-server authenticated PIR.

Overview

The code in this repository is organizes as follows:

  • lib/client: clients for all the authenticated and unauthenticated PIR schemes.
  • lib/database: databases for all the authenticated and unauthenticated PIR schemes, except the database for the Keyd PGP key.
  • lib/ecc: error correcting code (ECC) for the single-server authenticated-PIR scheme based on integrity authentication; currently, we implement a simple repetition code.
  • lib/field: field for the multi-server scheme for complex queries.
  • lib/fss: function-secret-sharing scheme.
  • lib/matrix: matrix operations for the single-server authenticated-PIR scheme that relies on the LWE assumption.
  • lib/merkle: Merkle tree implementation.
  • lib/monitor: CPU monitoring and benchmarking tools.
  • lib/pgp: utilities to create the PGP key-server database for Keyd.
  • lib/proto: gRPC protocol files for deployment.
  • lib/query: queries for the multi-server authenticated scheme for complex queries, i.e., available privately-computed statistics.
  • lib/server: servers for all the authenticated and unauthenticated PIR schemes.
  • lib/utils: various utilities.
  • cmd/: clients for Keyd, both local Go clients and the web front end.
  • data/: data, i.e., PGP keys, for Keyd.
  • scripts/: various useful scripts.

The dump of the SKS PGP key directory can be downloaded here. The sks* file must be placed in the data/sks folder.

Setup

To run the code in this repository install Go (tested with Go 1.17.5 and 1.19.5) and a C compiler (tested with GCC 9.4.0).

To reproduce the evaluation results, install GNU Make, Python 3, Fabric, NumPy and Matplotlib.

We obtain our evaluation results on machines equipped with two Intel Xeon E5-2680 v3 (Haswell) CPUs, each with 12 cores, 24 threads, and operating at 2.5 GHz. Each machine has 256 GB of RAM, and runs Ubuntu 20.04 and Go 1.17.5. However, the code runs on any machine equipped with the softwares listed above.

If the machine do not support one or more of the -march=native, -msse4.1, -maes, -mavx2 or -mavx C compiler flags, it is possible to remove the appropriate flags from lib/matrix/matrix128.go and lib/matrix/matrix.go. Any flag modification is likely to negatively impact performance.

Correctness tests

To run all basic correctness tests, execute go test This command prints performance measurements to stdout. The entire test suite takes about 6 minutes to run and it should terminate with a PASS, indicating that all tests have passed.

The branch sid enables to run the tests using less physical machines than the servers used by the different experiments. We decided not to merge this branch into the main branch because multi-server (authenticated) PIR schemes need non-colluding, i.e., different, servers for security.

Citation

@inproceedings{colombo23authenticated,
  author    = {Simone Colombo and Kirill Nikitin and Henry Corrigan-Gibbs and David J. Wu and Bryan Ford},
  title     = {Authenticated private information retrieval},
  booktitle = {USENIX Security},
  year      = {2023}
}

apir-code's People

Contributors

dependabot[bot] avatar henrycg avatar jbsv avatar nikirill avatar nkcr avatar pierluca avatar si-co avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

apir-code's Issues

Please provide clearer build instructions.

Hi.

The README does not provide many build instructions.

The make run_server command builds the server executable just fine in cmd/grpc/server. But the go run command in that Makefile target fails because "id", "files" and "scheme" are not set, and I do not know to what I should attempt to set them.

I tried running server manually. I got:

[Server -1] 2023/10/06 17:30:25 could not load the server config file: toml decoding: open config.toml: no such file or directory

This is terse. I have no example of such a config.toml file handy.

Please provide an easier pathway to having that code up and running.

The link to the databased seems expired

When I opened the link, it shows

File not found
The specified document has not been found on the server.

Hope that you can kindly make it available again. Thanks!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.