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