Import content from http://ag/23451840

Squashed commit of the following:

commit 00c2b21c8fa9004aa697c01961c46fe0329cffe8
Author: Kevin Graney <kmg@google.com>
Date:   Tue May 9 14:39:03 2023 -0400

    Add TEST_MAPPING

commit ed8ac8d9261350a5387039f36027584491e04745
Author: Kevin Graney <kmg@google.com>
Date:   Tue May 9 10:48:45 2023 -0400

    Depend on private-join-and-compute abseil

commit 1907d032ccf04e256a3900d0db55d56e861f0ba6
Author: Kevin Graney <kmg@google.com>
Date:   Thu May 4 15:48:54 2023 -0400

    Fix METADATA filename typo

commit b77a752a66406082974f12ee3455742337e02f85
Author: Kevin Graney <kmg@google.com>
Date:   Thu May 4 10:24:04 2023 -0400

    Add build rules

commit 132bec1222d439625cf8ae692c03ce518945cba2
Author: Kevin Graney <kmg@google.com>
Date:   Thu May 4 10:24:26 2023 -0400

    Add abseil

commit 410c261bf1629f65651d2b7bc53a188e5dba2211
Author: Kevin Graney <kmg@google.com>
Date:   Tue Apr 25 13:27:39 2023 -0400

    Add metadata files

commit 827d2aa796804f9ed28fc1c35ada56e0c62800be
Author: Karn Seth <karn@google.com>
Date:   Wed Apr 19 11:12:58 2023 -0400

    initial commit

Change-Id: I8f92eeb3857f7e65fdf495e76a4967ae69ed5878
25 files changed
tree: ff80f136457a035fbc9a3df80e00eafcc9ed7b86
  1. act/
  2. .bazelrc
  3. .gitignore
  4. Android.bp
  5. CONTRIBUTING.md
  6. LICENSE
  7. METADATA
  8. MODULE_LICENSE_APACHE2
  9. OWNERS
  10. README.md
  11. TEST_MAPPING
  12. WORKSPACE
README.md

An Implementation of Anonymous Counting Tokens.

An anonymous counting token (ACT) scheme allows Clients to obtain blind signatures or MACs (aka tokens) on messages of their choice, while at the same time enabling Issuers to enforce rate limits on the number of tokens that a client can obtain for each message. Specifically,

  • Blind issuance: The Issuer doesn't see the message for which a token is being requested
  • Unlinkability: When the Client redeems a token, the token cannot be linked to the issuance phase
  • Throttled issuance on identical messages: The Issuer can detect if a particular Client is requesting a token for a previously used message.

This repository implements a variant of the scheme described in [1], which is secure in the random oracle model under the q-DDHI assumption (in a cyclic group) and the DCR assumption. The variant implemented here relaxes the proven soundness guarantee to the non-concurrent setting. It also assumes that the server generates its parameters correctly. Future versions will support server proofs for correct parameter generation.

This implementation also supports batched token issuance. Batched token issuance can have significant performance benefits as compared to individual token issuance.

[1] “Anonymous Counting Tokens.” Fabrice Benhamouda, Mariana Raykova, Karn Seth.

Building/Running Tests

This repository requires Bazel. You can install Bazel by following the instructions for your platform on the Bazel website.

Once you have installed Bazel you can clone this repository and run all tests that are included by navigating into the root folder and running:

bazel test //...

Disclaimer

This is not an officially supported Google product. The code is provided as-is, with no guarantees of correctness or security.