A collection of algorithms that can do join between two parties while preserving the privacy of keys on which the join happens

Overview

Private-ID

Private-ID is a collection of algorithms to match records between two parties, while preserving the privacy of these records. We present two algorithms to do this---one of which does an outer join between parties and another does a inner join and then generates additive shares that can then be input to a Multi Party Compute system like CrypTen. Please refer to our paper for more details.

Build

Private-ID is implemented in Rust to take advantage of the languages security features and to leverage the encryption libraries that we depend on. It should compile with the nightly Rust toolchain.

The following should build and run the unit tests for the building blocks used by the protocols

  • cargo build, cargo test

Each protocol involves two parties and they have to be run in its own shell environment. We call one party Company and another party Partner.

Private-ID

This protocol maps the email addresses from both parties to a single ID spine, so that same e-mail addresses map to the same key.

To run Company

env RUST_LOG=info cargo run --bin private-id-server -- \
--host 0.0.0.0:10009 \
--input etc/example/email_company.csv \
--stdout \
--tls-dir etc/example/dummy_certs

To run Partner

env RUST_LOG=info cargo run --bin private-id-client -- \
--company localhost:10009 \
--input etc/example/email_partner.csv \
--stdout \
--tls-dir etc/example/dummy_certs

PS3I

This protocol does an inner join based on email addresses as keys and then generates additive share of a feature associated with that email address. The shares are generated in the designated output files as 64 bit numbers

To run Company

env RUST_LOG=info cargo run --bin cross-psi-server -- \
--host 0.0.0.0:10010 \
--input etc/example/input_company.csv \
--output etc/example/output_company.csv \
--no-tls

To run Partner

env RUST_LOG=info cargo run --bin cross-psi-client -- \
--company localhost:10010 \
--input etc/example/input_partner.csv \
--output etc/example/output_partner.csv \
--no-tls

PS3I XOR

This protocol does an inner join based on email addresses as keys and then generates XOR share of a feature associated with that email address. The shares are generated in the designated output files as 64 bit numbers

To run Company

env RUST_LOG=info cargo run --bin cross-psi-xor-server -- \
--host 0.0.0.0:10010 \
--input etc/example/input_company.csv \
--output etc/example/output_company.csv \
--no-tls

To run Partner

env RUST_LOG=info cargo run --bin cross-psi-xor-client -- \
--company localhost:10010 \
--input etc/example/input_partner.csv \
--output etc/example/output_partner.csv \
--no-tls

Private Join and Compute

This is an implementation of Google's Private Join and Compute protocol, that does a inner join based on email addresses and computes a sum of the corresponding feature for the Partner.

env RUST_LOG=info cargo run --bin pjc-client -- \
--company localhost:10011 \
--input etc/example/pjc_partner.csv \
--stdout \
--tls-dir etc/example/dummy_certs
env RUST_LOG=info cargo run --bin pjc-server -- \
--host 0.0.0.0:10011 \
--input etc/example/pjc_company.csv \
--stdout \
--tls-dir etc/example/dummy_certs

SUMID

This is an implmentation of 2-party version of Secure Universal ID protocol. This can work on multiple keys. In the current implementation, the merger party also assumes the role of one data party and the sharer party assumes the role of all the other data parties. The data parties are the .csv files show below

To run merger

env RUST_LOG=info cargo run --bin suid-create-server -- \
        --host 0.0.0.0:10010 \
        --input etc/example/suid/Example1/DataParty2_input.csv \
        --stdout \
        --tls-dir etc/example/dummy_certs

To run merger

env RUST_LOG=info cargo run --bin suid-create-client -- \
     --merger localhost:10010 \
     --input etc/example/suid/Example1/DataParty1_input.csv \
     --input etc/example/suid/Example1/DataParty3_input.csv \
     --stdout \
     --tls-dir etc/example/dummy_certs

The output will be ElGamal encrypted Universal IDs assigned to each entry in the .csv file

License

Private-ID is Apache 2.0 licensed, as found in the LICENSE file

Comments
  • Fails to compile because `zeroize` cannot be found

    Fails to compile because `zeroize` cannot be found

    (ins)gorel:temp$ git clone https://github.com/facebookresearch/private-id
    Cloning into 'private-id'...
    remote: Enumerating objects: 184, done.
    remote: Counting objects: 100% (184/184), done.
    remote: Compressing objects: 100% (121/121), done.
    remote: Total 184 (delta 68), reused 168 (delta 58), pack-reused 0
    Receiving objects: 100% (184/184), 88.02 KiB | 1.47 MiB/s, done.
    Resolving deltas: 100% (68/68), done.
    (ins)gorel:temp$ cd private-id/
    (ins)gorel:private-id$ cargo build --release
        Updating crates.io index
        Updating git repository `https://github.com/dalek-cryptography/curve25519-dalek.git`
        Updating git repository `https://github.com/KZen-networks/rust-paillier`
        Updating git repository `https://github.com/KZen-networks/curv`
        Updating git repository `https://github.com/KZen-networks/rust-gmp`
    error: failed to select a version for the requirement `zeroize = "^0.10"`
    candidate versions found which didn't match: 1.3.0, 1.2.0, 1.1.1, ...
    location searched: crates.io index
    required by package `curv v0.2.3 (https://github.com/KZen-networks/curv?tag=v0.2.3#d6c575b5)`
        ... which is depended on by `paillier v0.3.4 (https://github.com/KZen-networks/rust-paillier?tag=v0.3.4#564352cb)`
        ... which is depended on by `crypto v0.1.0 (/home/gorel/temp/private-id/crypto)`
        ... which is depended on by `protocol v0.1.0 (/home/gorel/temp/private-id/protocol)`
        ... which is depended on by `protocol-rpc v0.1.0 (/home/gorel/temp/private-id/protocol-rpc)`
    
    opened by gorel 8
  • Changes to support a wasm32 target (abstract RNG, parallelism, timers)

    Changes to support a wasm32 target (abstract RNG, parallelism, timers)

    Types of changes

    • [x] Bug fix (non-breaking change which fixes an issue)
    • [x] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to change)
    • [ ] Docs change / refactoring / dependency upgrade

    Motivation and Context / Related issue

    WebAssembly (wasm32) can now compile directly from the rust code in this repository. And, with the help of the appropriate JavaScript wrappers, the Private-ID algorithm can be run in any web browsers that supports WebAssembly.

    • Rust rand_core::OsRng is not supported in WebAssembly. An abstracted version is used instead and impliments the trait rand_core::RngCore required by ECCipher.

    • A web browser can only do multithreading through web workers. Unfortunately Rust's Rayon library doesn't translate to wasm32, so we fall back to ECRistrettoSequential when compiling for the web.

    • Rust's default timing library fails in the browser, so we conditionally ignore it during compilation. JavaScript can hook the protocol stages and time natively if needed (see private-id-web).

    How Has This Been Tested (if it applies)

    The original test suite passes without warnings/errors. The new functionality is tested externally at https://github.com/nthparty/private-id-web, because the system-level examples still behave exactly the same, they just happen to compile from code that can now also be compiled to WebAssembly. There are a few new functions to load and dump records to and from JSON formatted strings, but I don't believe these need their own tests beyond the end-to-end tests in the private-id-web repository which depend on them.

    Checklist

    • [x] The documentation is up-to-date with the changes I made.
    • [x] I have read the CONTRIBUTING document and completed the CLA (see CONTRIBUTING).
    • [x] All tests passed, and additional code has been covered with new tests.
    CLA Signed 
    opened by wyatt-howe 6
  • Add run_id to PID binaries.

    Add run_id to PID binaries.

    Summary:

    Context

    For Centralized Logging, we will use a unique run_id to identify a PL/PA run, this run_id will be generated on the partner side and will be consumed by publisher side during instance creation. This run_id will be included in all the multiple ENT instances involved in the run and will also be shared with all the backend components (thrift, PCS, PCA binaries). Design Doc https://docs.google.com/document/d/1vZNOq8GUT1D_7-MjSh2yNpUKVEsvpsYeFx1PjceyelQ/edit?usp=sharing RunID Format RunId will be in UUID format. Ex - 2621fda2-0eca-11ed-861d-0242ac120002

    This diff

    Add run_id to PID binaries.

    Differential Revision: D38726020

    CLA Signed fb-exported 
    opened by ajinkya-ghonge 4
  • Make PID protocol metric output path configurable

    Make PID protocol metric output path configurable

    Types of changes

    • [ ] Bug fix (non-breaking change which fixes an issue)
    • [ x] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to change)
    • [ ] Docs change / refactoring / dependency upgrade

    Motivation and Context / Related issue

    This PR makes the metric output path specifiable while keeping the default metric output path the same. We can provide --metric-path to specify the location of the metric output file.

    How Has This Been Tested (if it applies)

    The following test was run locally with and without the newly added option --metric-path and the creation of the output metric file was confirmed.

    Checklist

    • [ x] The documentation is up-to-date with the changes I made.
    • [ x] I have read the CONTRIBUTING document and completed the CLA (see CONTRIBUTING).
    • [ ] All tests passed, and additional code has been covered with new tests.
    CLA Signed 
    opened by reazulhoque 4
  • Add unit tests for calculate_set_diff and set_encrypted_company

    Add unit tests for calculate_set_diff and set_encrypted_company

    Summary:

    What

    • Use automock to mock tests.
    • Mockall provides tools to create mock versions of almost any trait or struct. They can be used in unit tests as a stand-in for the real object.
    • The ways to mock
      1. Add #[automock] to the trait
      2. In your test, instantiate the mock struct with its new or default method.
      3. Set expectations on the mock struct. Each expectation can have required argument matchers, a required call count, and a required position in a Sequence. Each expectation must also have a return value.
      4. Supply the mock object to the code that youโ€™re testing. It will return the preprogrammed return values supplied in the previous step. Any accesses contrary to your expectations will cause a panic.

    Why

    • need to improve code coverage

    Reviewed By: wenqingren

    Differential Revision: D39338935

    CLA Signed fb-exported 
    opened by jiancao-yajc 3
  • Add unit test for save_id_map()

    Add unit test for save_id_map()

    Summary:

    What

    • Add unit tests for save_id_map funcion on partner side.
    • save_id_map function is called after the create_id_map().
    • Add create_key function to create fixed keys for testing.
    • create_id_map function both use partner.private_keys.1 to encrypt.
    • self_permutation also needs to be fixed when we test create_id_map().
    • Create a temp file and pass the path to save_id_map() and check the string in the file is correct or not.

    Why

    • need to improve code coverage

    Differential Revision: D39142927

    CLA Signed fb-exported 
    opened by jiancao-yajc 3
  • Add unit tests for encrypt and create_id_map funcion on partner side

    Add unit tests for encrypt and create_id_map funcion on partner side

    Summary:

    What

    • Add unit tests for encrypt and create_id_map funcion on partner side
    • Add create_key function to create fixed keys for testing.
    • encrypt and create_id_map function both use partner.private_keys.1 to encrypt.
    • self_permutation also needs to be fixed when we test create_id_map()

    Why

    • need to improve code coverage

    Differential Revision: D39127178

    CLA Signed fb-exported 
    opened by jiancao-yajc 3
  • Add unit test for load_data(), get_size() and ermute_hash_to_bytes() in private_id_multi_key

    Add unit test for load_data(), get_size() and ermute_hash_to_bytes() in private_id_multi_key

    Summary:

    What is this stack?

    To improve PID rust code coverage from 50% to 75%, add unit tests for protocol private_id_multi_key.

    Differential Revision: D38766385

    CLA Signed fb-exported 
    opened by jiancao-yajc 3
  • auto generate key_cert dir and remove dummy_cert

    auto generate key_cert dir and remove dummy_cert

    Types of changes

    • [ ] Bug fix (non-breaking change which fixes an issue)
    • [x] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to change)
    • [ ] Docs change / refactoring / dependency upgrade

    Motivation and Context / Related issue

    auto generate key_cert dir and remove dummy_cert This script first gets the directory path of the script then make a dummy_certs directory in that directory path. Then the script changed directory to the created dir path and generates certificates.

    How Has This Been Tested (if it applies)

    cargo build

    run server and client test Screen Shot 2022-06-13 at 9 09 37 PM Screen Shot 2022-06-13 at 9 09 22 PM

    Checklist

    • [x] The documentation is up-to-date with the changes I made.
    • [x] I have read the CONTRIBUTING document and completed the CLA (see CONTRIBUTING).
    • [x] All tests passed, and additional code has been covered with new tests.
    CLA Signed 
    opened by jiancao-yajc 3
  • fix issue but haven't renamed or  change step 16

    fix issue but haven't renamed or change step 16

    Types of changes

    • [x] Bug fix (non-breaking change which fixes an issue)
    • [ ] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to change)
    • [ ] Docs change / refactoring / dependency upgrade

    Motivation and Context / Related issue

    How Has This Been Tested (if it applies)

    Checklist

    • [ ] The documentation is up-to-date with the changes I made.
    • [ ] I have read the CONTRIBUTING document and completed the CLA (see CONTRIBUTING).
    • [ ] All tests passed, and additional code has been covered with new tests.
    CLA Signed 
    opened by danielmasny 3
  • Build fails

    Build fails

    Building this fails with this error:

    Any ideas about what's causing this?

    error[E0277]: the trait bound `BigInt: From<&[u8]>` is not satisfied
      --> crypto/src/he.rs:48:9
       |
    48 |         BigInt::from(&*buf) >> (nun_bytes * BYTE - bit_size)
       |         ^^^^^^^^^^^^ the trait `From<&[u8]>` is not implemented for `BigInt`
       |
       = help: the following implementations were found:
                 <BigInt as From<RawCiphertext<'b>>>
                 <BigInt as From<RawPlaintext<'b>>>
                 <BigInt as From<i32>>
                 <BigInt as From<u32>>
                 <BigInt as From<u64>>
       = note: required by `std::convert::From::from`
    
    error[E0599]: no method named `mod_floor` found for reference `&BigInt` in the current scope
      --> crypto/src/he.rs:52:12
       |
    52 |         (a.mod_floor(modulus) + b.mod_floor(modulus)).mod_floor(modulus)
       |            ^^^^^^^^^ method not found in `&BigInt`
       |
       = help: items from traits can only be used if the trait is in scope
       = note: the following trait is implemented but not in scope; perhaps add a `use` for it:
               `use num_integer::Integer;`
    
    error[E0599]: no method named `mod_floor` found for reference `&BigInt` in the current scope
      --> crypto/src/he.rs:52:35
       |
    52 |         (a.mod_floor(modulus) + b.mod_floor(modulus)).mod_floor(modulus)
       |                                   ^^^^^^^^^ method not found in `&BigInt`
       |
       = help: items from traits can only be used if the trait is in scope
       = note: the following trait is implemented but not in scope; perhaps add a `use` for it:
               `use num_integer::Integer;`
    
    error[E0599]: no method named `mod_floor` found for reference `&BigInt` in the current scope
      --> crypto/src/he.rs:56:24
       |
    56 |         let sub_op = a.mod_floor(modulus) - b.mod_floor(modulus) + modulus;
       |                        ^^^^^^^^^ method not found in `&BigInt`
       |
       = help: items from traits can only be used if the trait is in scope
       = note: the following trait is implemented but not in scope; perhaps add a `use` for it:
               `use num_integer::Integer;`
    
    error[E0599]: no method named `mod_floor` found for reference `&BigInt` in the current scope
      --> crypto/src/he.rs:56:47
       |
    56 |         let sub_op = a.mod_floor(modulus) - b.mod_floor(modulus) + modulus;
       |                                               ^^^^^^^^^ method not found in `&BigInt`
       |
       = help: items from traits can only be used if the trait is in scope
       = note: the following trait is implemented but not in scope; perhaps add a `use` for it:
               `use num_integer::Integer;`
    
    error[E0599]: no function or associated item named `one` found for struct `BigInt` in the current scope
       --> crypto/src/he.rs:146:31
        |
    146 |         let max_val = BigInt::one() << (PAILLIER_PUBLIC_KEY_SIZE / 2);
        |                               ^^^ function or associated item not found in `BigInt`
        |
        = help: items from traits can only be used if the trait is in scope
        = note: the following trait is implemented but not in scope; perhaps add a `use` for it:
                `use num_traits::identities::One;`
    
    error[E0599]: no method named `mod_floor` found for reference `&BigInt` in the current scope
       --> crypto/src/he.rs:151:38
        |
    151 |                 raw_ptext.0.as_ref().mod_floor(&max_val)
        |                                      ^^^^^^^^^ method not found in `&BigInt`
        |
        = help: items from traits can only be used if the trait is in scope
        = note: the following trait is implemented but not in scope; perhaps add a `use` for it:
                `use num_integer::Integer;`
    
    error[E0599]: no function or associated item named `one` found for struct `BigInt` in the current scope
       --> crypto/src/he.rs:157:31
        |
    157 |         let max_val = BigInt::one() << (PAILLIER_PUBLIC_KEY_SIZE / 2);
        |                               ^^^ function or associated item not found in `BigInt`
        |
        = help: items from traits can only be used if the trait is in scope
        = note: the following trait is implemented but not in scope; perhaps add a `use` for it:
                `use num_traits::identities::One;`
    
    error[E0599]: no method named `mod_floor` found for reference `&BigInt` in the current scope
       --> crypto/src/he.rs:163:51
        |
    163 |                 let val = RawPlaintext::from(kv.1.mod_floor(&max_val));
        |                                                   ^^^^^^^^^ method not found in `&BigInt`
        |
        = help: items from traits can only be used if the trait is in scope
        = note: the following trait is implemented but not in scope; perhaps add a `use` for it:
                `use num_integer::Integer;`
    
    error[E0599]: no function or associated item named `one` found for struct `BigInt` in the current scope
       --> crypto/src/he.rs:203:39
        |
    203 |                 let max_val = BigInt::one() << (PAILLIER_PUBLIC_KEY_SIZE / 2);
        |                                       ^^^ function or associated item not found in `BigInt`
        |
        = help: items from traits can only be used if the trait is in scope
        = note: the following trait is implemented but not in scope; perhaps add a `use` for it:
                `use num_traits::identities::One;`
    
    error[E0599]: no method named `mod_floor` found for struct `BigInt` in the current scope
       --> crypto/src/he.rs:204:60
        |
    204 |                 let neg_rhs = RawPlaintext::from(rhs.neg().mod_floor(&max_val));
        |                                                            ^^^^^^^^^ method not found in `BigInt`
        |
        = help: items from traits can only be used if the trait is in scope
        = note: the following trait is implemented but not in scope; perhaps add a `use` for it:
                `use num_integer::Integer;`
    
    error[E0599]: no method named `mod_floor` found for struct `BigInt` in the current scope
       --> crypto/src/he.rs:227:22
        |
    227 |                     .mod_floor(&(BigInt::one() << (PAILLIER_PUBLIC_KEY_SIZE / 2)))
        |                      ^^^^^^^^^ method not found in `BigInt`
        |
        = help: items from traits can only be used if the trait is in scope
        = note: the following trait is implemented but not in scope; perhaps add a `use` for it:
                `use num_integer::Integer;`
    
    error[E0599]: no function or associated item named `one` found for struct `BigInt` in the current scope
       --> crypto/src/he.rs:227:42
        |
    227 |                     .mod_floor(&(BigInt::one() << (PAILLIER_PUBLIC_KEY_SIZE / 2)))
        |                                          ^^^ function or associated item not found in `BigInt`
        |
        = help: items from traits can only be used if the trait is in scope
        = note: the following trait is implemented but not in scope; perhaps add a `use` for it:
                `use num_traits::identities::One;`
    
    error: aborting due to 13 previous errors
    
    Some errors have detailed explanations: E0277, E0599.
    For more information about an error, try `rustc --explain E0277`.
    error: could not compile `crypto`
    
    To learn more, run the command again with --verbose.
    
    opened by apogiatzis 3
  • Delegated Private Matching for Compute with Secure Shuffling (DSPMC)

    Delegated Private Matching for Compute with Secure Shuffling (DSPMC)

    Types of changes

    • [ ] Bug fix (non-breaking change which fixes an issue)
    • [x] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to change)
    • [ ] Docs change / refactoring / dependency upgrade

    Motivation and Context / Related issue

    Extending DPMC to Delegated Private Matching for Compute with Secure Shuffling (DSPMC) which supports multiple partners with the help of two helpers/delegate servers.

    • Company has a csv with identifiers (e.g., etc/example/dspmc/Ex0_company.csv).
    • Partner has a csv with identifiers (e.g., etc/example/dspmc/Ex0_partner_1.csv) and a csv with features (e.g., etc/example/dspmc/Ex0_partner_1_features.csv).

    How Has This Been Tested (if it applies)

    Test are located in etc/example/dspmc.

    Checklist

    • [x] The documentation is up-to-date with the changes I made.
    • [x] I have read the CONTRIBUTING document and completed the CLA (see CONTRIBUTING).
    • [ ] All tests passed, and additional code has been covered with new tests.
    CLA Signed 
    opened by jimouris 2
  • Add unit test for tls and streaming

    Add unit test for tls and streaming

    Summary:

    What

    • Add unit test for tls. Use rcgen to create the cert and pem and run from_dir()
    • Add unit test for send_data. Just send the payload and see whether it can finish or not

    Why

    • need to improve code coverage

    Differential Revision: D40660872

    CLA Signed fb-exported 
    opened by jiancao-yajc 2
  • Fix PID versioning

    Fix PID versioning

    Summary:

    Summary

    We had an issue where the versioning library continually was creating the v0.0.1 version. The documentation here explains the fix: https://github.com/PaulHatch/semantic-version#important-note-regarding-the-checkout-action

    Reviewed By: gorel

    Differential Revision: D40489711

    CLA Signed fb-exported 
    opened by musebc 1
  • Delegated Private Matching for Compute (DPMC)

    Delegated Private Matching for Compute (DPMC)

    Types of changes

    • [ ] Bug fix (non-breaking change which fixes an issue)
    • [x] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to change)
    • [ ] Docs change / refactoring / dependency upgrade

    Motivation and Context / Related issue

    Extending multi-key Private-ID to Delegated Private Matching for Compute (DPMC) which supports multiple partners with the help of a helper/delegate server.

    • Company has a csv with identifiers (e.g., etc/example/dpmc/Ex0_company.csv).
    • Partner has a csv with identifiers (e.g., etc/example/dpmc/Ex0_partner_1.csv) and a csv with features (e.g., etc/example/dpmc/Ex0_partner_1_features.csv).

    How Has This Been Tested (if it applies)

    Test are located in etc/example/dpmc.

    Checklist

    • [x] The documentation is up-to-date with the changes I made.
    • [x] I have read the CONTRIBUTING document and completed the CLA (see CONTRIBUTING).
    • [ ] All tests passed, and additional code has been covered with new tests.
    CLA Signed 
    opened by jimouris 2
  • Editorial changes in README

    Editorial changes in README

    Types of changes

    • [ ] Bug fix (non-breaking change which fixes an issue)
    • [ ] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to change)
    • [x] Docs change / refactoring / dependency upgrade

    Motivation and Context / Related issue

    Mostly editorial changes in README and add citations to Private-ID and Multi-Key Private-ID papers.

    How Has This Been Tested (if it applies)

    N/A

    Checklist

    • [x] The documentation is up-to-date with the changes I made.
    • [x] I have read the CONTRIBUTING document and completed the CLA (see CONTRIBUTING).
    • [ ] All tests passed, and additional code has been covered with new tests.
    CLA Signed 
    opened by jimouris 2
  • Update README.md

    Update README.md

    fix output file name in example

    Types of changes

    • [ ] Bug fix (non-breaking change which fixes an issue)
    • [ ] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to change)
    • [x] Docs change / refactoring / dependency upgrade

    Motivation and Context / Related issue

    How Has This Been Tested (if it applies)

    Checklist

    • [x] The documentation is up-to-date with the changes I made.
    • [x] I have read the CONTRIBUTING document and completed the CLA (see CONTRIBUTING).
    • [ ] All tests passed, and additional code has been covered with new tests.
    CLA Signed 
    opened by ondrejik 3
Releases(v0.0.8)
Owner
Meta Research
Meta Research
Bitcoin Push Notification Service (BPNS) allows you to receive notifications of Bitcoin transactions of your non-custodial wallets on a provider of your choice, all while respecting your privacy

Bitcoin Push Notification Service (BPNS) Description Bitcoin Push Notification Service (BPNS) allows you to receive notifications of Bitcoin transacti

BPNS 1 May 2, 2022
Open-source tool to enforce privacy & security best-practices on Windows and macOS, because privacy is sexy ๐Ÿ‘๐Ÿ†

privacy-sexy Open-source tool to enforce privacy & security best-practices on Windows and MacOs, because privacy is sexy ?? ?? privacy-sexy is a data-

Subconscious Compute 3 Oct 20, 2022
Parity-Bridge โ€” Bridge between any two ethereum-based networks

Deprecated Bridges This repo is deprecated. Originally it contained the ETH <> ETH-PoA bridge (see tumski tag). Later it was repurposed for ETH-PoA <>

Parity Technologies 314 Nov 25, 2022
Opendp - The core library of differential privacy algorithms powering the OpenDP Project.

OpenDP The OpenDP Library is a modular collection of statistical algorithms that adhere to the definition of differential privacy. It can be used to b

OpenDP 176 Dec 27, 2022
Collection of stream cipher algorithms

RustCrypto: stream ciphers Collection of stream cipher algorithms written in pure Rust. โš ๏ธ Security Warning: Hazmat! Crates in this repository do not

Rust Crypto 186 Dec 14, 2022
Collection of block cipher algorithms written in pure Rust

RustCrypto: block ciphers Collection of block ciphers and block modes written in pure Rust. Warnings Currently only the aes crate provides constant-ti

Rust Crypto 506 Jan 3, 2023
A general solution for commonly used crypt in rust, collection of cryptography-related traits and algorithms.

Crypto-rs A general solution for commonly used crypt in rust, collection of cryptography-related traits and algorithms. This is a Rust implementation

houseme 4 Nov 28, 2022
This is a Order-preserving encryption (OPE) lib inspired by cryptdb's ope implementation.

Ope in rust This is an Order-preserving encryption (OPE) lib inspired by cryptdb's ope implementation. It is a pure rust implementation, no c dependen

Sentclose 8 Jul 19, 2023
CLI tool written in Rust which can be used to generate hashes

rustgenhash rustgenhash is a tool to generate hashes on the commandline from stdio. It can be used to generate single or multiple hashes for usage in

Volker Schwaberow 11 Dec 29, 2022
ARYA Network is a polkadot/substrate based chain for Non-fungible Token platform on which we can own sell and buy the NFT's on polkadot network.

ARYA Network ARYA Network is a polkadot/substrate based chain for Non-fungible Token platform on which we can own sell and buy the NFT's on polkadot n

Pankaj Chaudhary 6 Dec 20, 2022
An experimental fork of a16z's Helios Ethereum client which can run its network traffic over the Nym mixnet

Helios (Nym mixnet fork) Helios is a fully trustless, efficient, and portable Ethereum light client written in Rust. This fork of Helios includes nasc

Nym 4 Mar 3, 2023
Two-party and multi-party ECDSA protocols based on class group with Rust

CG-MPC-ECDSA This project aims to implement two-party and multi-party ECDSA protocols based on class group with Rust. It currently includes schemes de

LatticeX Foundation 16 Mar 17, 2022
Plutonium is a two-device chat application that utilises WebSockets and a X25519 ECDH Key Exchange

Plutonium is a two-device chat application that utilises WebSockets and a X25519 ECDH Key Exchange, in addition to AES-256 to securely communicate between the two clients.

brxken 0 Jul 29, 2022
zkSync: trustless scaling and privacy engine for Ethereum

zkSync: scaling and privacy engine for Ethereum zkSync is a scaling and privacy engine for Ethereum. Its current functionality scope includes low gas

Matter Labs 1.9k Jan 1, 2023
Nym provides strong network-level privacy against sophisticated end-to-end attackers, and anonymous transactions using blinded, re-randomizable, decentralized credentials.

The Nym Privacy Platform The platform is composed of multiple Rust crates. Top-level executable binary crates include: nym-mixnode - shuffles Sphinx p

Nym 653 Dec 26, 2022
Onlyfans-type web service based on TOR with maximum privacy features.

onionfans Onlyfans-type web service based on TOR with maximum privacy features. Features "Vanishing" single-use feed CDN links Landing page No JavaScr

Dowland Aiello 8 Sep 14, 2022
Safeguard your financial privacy with zero-knowledge proofs.

Spinner The Spinner project (https://spinner.cash) takes a privacy first approach to protect users crypto assets. It is a layer-2 protocol built on th

Spinner 21 Dec 28, 2022
Privacy-first delay tolerant network protocol

?? Liminality ?? Liminality is a unique protocol for wireless communication in fluid and dynamic environments. The protocol takes its name from the li

Ellen Poe 10 Oct 11, 2023
use your GitHub SSH keys to authenticate to sshd

aeneid If you squint, GitHub is basically a free, zero-ops IdP that provides SSH public keys. Let's use it to authenticate to OpenSSH! What / How? The

Nikhil Jha 21 Dec 6, 2022