README.md
1# An Implementation of Anonymous Counting Tokens.
2
3An anonymous counting token (ACT) scheme allows Clients to obtain blind
4signatures or MACs (aka tokens) on messages of their choice, while at the same
5time enabling Issuers to enforce rate limits on the number of tokens that a
6client can obtain for each message. Specifically,
7
8* Blind issuance: The Issuer doesn't see the message for which a token is
9 being requested
10* Unlinkability: When the Client redeems a token, the token cannot be linked
11 to the issuance phase
12* Throttled issuance on identical messages: The Issuer can detect if a
13 particular Client is requesting a token for a previously used message.
14
15This repository implements a variant of the scheme described in [1], which is
16secure in the random oracle model under the q-DDHI assumption (in a cyclic
17group) and the DCR assumption. The variant implemented here relaxes the proven
18soundness guarantee to the non-concurrent setting. It also assumes that the
19server generates its parameters correctly. Future versions will support server
20proofs for correct parameter generation.
21
22This implementation also supports batched token issuance. Batched token issuance
23can have significant performance benefits as compared to individual token
24issuance.
25
26> [[1] "Anonymous Counting Tokens." Fabrice Benhamouda, Mariana Raykova, Karn
27> Seth.](https://eprint.iacr.org/2023/320)
28
29## Building/Running Tests
30
31This repository requires Bazel. You can install Bazel by
32following the instructions for your platform on the
33[Bazel website](https://docs.bazel.build/versions/master/install.html).
34
35Once you have installed Bazel you can clone this repository and run all tests
36that are included by navigating into the root folder and running:
37
38```bash
39bazel test //...
40```
41
42
43## Disclaimer
44
45This is not an officially supported Google product. The code is provided as-is,
46with no guarantees of correctness or security.