Giter VIP home page Giter VIP logo

private-membership's Introduction

Private Set Membership (PSM)

Problem Statement

Private Set Membership (PSM) is a cryptographic protocol that allows clients to privately query whether the client's identifier is a member of a set of identifiers held by a server in a privacy-preserving manner.

At a high level, PSM provides the following privacy guarantees:

  • The server does not learn the client's queried identifier in the plaintext.
  • The server does not learn whether the client's query results in a membership or non-membership determination.
  • The querying client does not learn any information about the set of identifiers that are stored by the server beyond whether the querying client's identifier is a member or not of the server-held set of identifiers. In other words, the querying client learns the bare minimum amount of information which is only the answer of the membership query.

Dependencies

The Private Set Membership library requires the following dependencies:

  • Abseil for C++ common libraries.

  • Bazel for building the library.

  • BoringSSL for underlying cryptographic operations.

  • GFlag for flags. Needed to use glog.

  • GLog for logging.

  • Google Test for unit testing the library.

  • Protocol Buffers for data serialization.

  • Shell for fully homomorphic encryption.

  • Tink for cryptographic PRNGs.

How to build

In order to run this library, you need to install Bazel, if you don't have it already. [Follow the instructions for your platform on the Bazel website. Make sure you are installing version 4.2.1 or above.] (https://docs.bazel.build/versions/master/install.html)

You also need to install Git, if you don't have it already. Follow the instructions for your platform on the Git website.

Once you've installed Bazel and Git, open a Terminal and clone the repository into a local folder.

Navigate into the private-membership folder you just created, and build the library and dependencies using Bazel. Note, the library must be built using C++17.

cd private-membership
bazel build ... --cxxopt='-std=c++17'

You may also run all tests (recursively) using the following command:

bazel test ... --cxxopt='-std=c++17'

Disclaimers

This is not an officially supported Google product. The software is provided as-is without any guarantees or warranties, express or implied.

private-membership's People

Contributors

guss123 avatar kwlyeo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

private-membership's Issues

Understanding PSM

Hi,

I have a hard time understanding the implementation of PSM here. I don't see where the OPRF of the queries is computed especially since the client has access to the plaintext of the value passed by the server at the end. How would someone adapt the example to use real data instead of arbitrary buckets retrieval ?
Maybe running the basic PSM with a single query would help but there is no example implementation.

Build failure

OS: WSL2 Ubuntu 22.04

Bazel version: 6.3.2

Build command: bazel build ... --cxxopt='-std=c++17'

Failure Message:

INFO: Repository boringssl instantiated at:
  /home/haoche/Repos/private-membership/WORKSPACE:2:32: in <toplevel>
  /home/haoche/Repos/private-membership/build/private_membership_repositories.bzl:45:19: in private_membership_repositories
  /home/haoche/Repos/private-membership/build/boringssl/repo.bzl:24:21: in boringssl_repo
Repository rule http_archive defined at:
  /home/haoche/.cache/bazel/_bazel_haoche/c55304b062b35c895389662cdc6a2d35/external/bazel_tools/tools/build_defs/repo/http.bzl:372:31: in <toplevel>
ERROR: Traceback (most recent call last):
        File "/home/haoche/.cache/bazel/_bazel_haoche/c55304b062b35c895389662cdc6a2d35/external/build_bazel_rules_apple/apple/internal/testing/ios_rules.bzl", line 63, column 71, in <toplevel>
                _ios_internal_ui_test_bundle = rule_factory.create_apple_bundling_rule(
        File "/home/haoche/.cache/bazel/_bazel_haoche/c55304b062b35c895389662cdc6a2d35/external/build_bazel_rules_apple/apple/internal/rule_factory.bzl", line 955, column 55, in _create_apple_bundling_rule
                rule_attrs.append(_common_binary_linking_attrs(rule_descriptor))
        File "/home/haoche/.cache/bazel/_bazel_haoche/c55304b062b35c895389662cdc6a2d35/external/build_bazel_rules_apple/apple/internal/rule_factory.bzl", line 233, column 21, in _common_binary_linking_attrs
                apple_common.objc_proto_aspect,
Error: 'apple_common' value has no field or method 'objc_proto_aspect'
ERROR: /home/haoche/Repos/private-membership/private_membership/rlwe/client/cpp/internal/BUILD:33:11: error loading package '@com_github_google_private_join_and_compute//private_join_and_compute/crypto': at /home/haoche/.cache/bazel/_bazel_haoche/c55304b062b35c895389662cdc6a2d35/external/com_github_grpc_grpc/bazel/grpc_build_system.bzl:29:6: at /home/haoche/.cache/bazel/_bazel_haoche/c55304b062b35c895389662cdc6a2d35/external/build_bazel_rules_apple/apple/ios.bzl:22:5: initialization of module 'apple/internal/testing/ios_rules.bzl' failed and referenced by '//private_membership/rlwe/client/cpp/internal:crypto_utils'
ERROR: Analysis of target '//private_membership/rlwe/client/cpp/internal:crypto_utils' failed; build aborted: Analysis failed
INFO: Elapsed time: 12.192s
INFO: 0 processes.
FAILED: Build did NOT complete successfully (0 packages loaded, 0 targets configured)
    currently loading: @com_github_google_private_join_and_compute//private_join_and_compute/crypto
    Fetching repository @local_config_cc; starting 12s

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.