Coconut: Threshold Issuance Selective Disclosure Credentials with Applications to Distributed Ledgers

AbstractCoconut is a novel selective disclosure credential scheme supporting distributed threshold issuance, public and private attributes, re-randomization, and multiple unlinkable selective attribute revelations. Coconut integrates with blockchains to ensure confidentiality, authenticity and availability even when a subset of credential issuing authorities are malicious or offline. We implement and evaluate a generic Coconut smart contract library for Chainspace and Ethereum; and present three applications related to anonymous payments, electronic petitions, and distribution of proxies for censorship resistance. Coconut uses short and computationally efficient credentials, and our evaluation shows that most Coconut cryptographic primitives take just a few milliseconds on average, with verification taking the longest time (10 milliseconds).
Year2018
Link to the paperhttps://arxiv.org/pdf/1802.07344.pdf
Relevance scoreRelevant
Quality score5
LabelsPermissionlessSmart Contracts instead of oracles

About Coconut

Coconut is a selective disclosure credential scheme that supports:

Overview of Coconut

Source: Coconut: Threshold Issuance Selective Disclosure Credentials with Applications to Distributed Ledgers, https://arxiv.org/pdf/1802.07344.pdf
  1. Any Coconut user may send a Coconut request command to a set of Coconut signing authorities; this command specifies a set of public or encrypted private attributes to be certified into the credential.
  1. Each authority answers with an issue command delivering a partial credential.
  1. Any user can collect a threshold number of shares, aggregate them to form a single consolidated credential and re-randomize it.
  1. The user who owns the credentials can then execute the show protocol to selectively disclose attributes or statements about them. The showing protocol is publicly verifiable and may be publicly recorded.

The design Goals of Coconut

  1. Threshold authorities: Only a subset of the authorities is required to issue partial credentials in order to allow the users to generate a consolidated credential. The communication complexity of the request and issue protocol is O(t)\mathcal{O}(t). Where tt is the subset of authorities.
  1. Non-interactivity: The authorities may operate independently of each other, i.e., following a simple key distribution and setup phase, they do not need to synchronize or further coordinate their activities.
  1. Blindness: The authorities issue the credential without learning any additional information about the private attributes included in the credential.
  1. Unlinkability: It is impossible to link multiple showings of the credentials with each other, or the issuing transcript, even if all the authorities collude.
  1. Liveness: Coconut guarantees liveness as long as the threshold number of authorities is honest.
  1. Efficiency: After aggregation and re-randomization, the attribute showing and verification involve only a single consolidated credential, and are therefore O(1)\mathcal{O}(1) in terms of both cryptographic computations and communication of cryptographic material.
  1. Short credentials: Each partial credential and the consolidated credential is composed of exactly two group elements, no matter the number of authorities or the number of attributes embedded in the credentials.

Cryptographic primitives

  1. Zero-knowledge proofs: NIZK{(x,y,):statementsaboutx,y,}NIZK\{(x, y, \dots ) : statements \hspace{0.1cm} about \hspace{0.1cm} x, y, \dots\}
  1. Bilinear-map: Coconut requires groups (G1,G2,GT)(\mathbb{G_1} , \mathbb{G_2} , \mathbb{G_T}) of prime order pp with a bilinear map e:G1×G2GTe : \mathbb{G_1} \times \mathbb{G_2} \rightarrow \mathbb{G_T} satisfying Bilinearity and non-degeneracy properties.
  1. A cryptographically secure hash function H:G1G1H : \mathbb{G_1} \rightarrow \mathbb{G_1}.

Coconut scheme definition

The Coconut Threshold Credential Scheme construction

The Coconut threshold credential scheme allows users to obtain a partial credential σiσ_i on a private or public attribute mm. In a system with nn authorities, a tt-out-of-nn threshold credentials scheme offers great flexibility as the users need to collect only n/2<tnn/2 < t \leq n of these partial credentials in order to recompute the consolidated credential (both tt and nn are scheme parameters).

This algorithm is executed by a trusted third-party or distributed key generation (DKG) scheme.

li=[j=1,jit(0j)][j=1,jit(ij)]1l_i = \left[\prod_{j = 1, j\neq i}^t (0-j)\right]\left[\prod_{j = 1, j\neq i}^t (i-j)\right]^{-1}
Source: Coconut: Threshold Issuance Selective Disclosure Credentials with Applications to Distributed Ledgers, https://arxiv.org/pdf/1802.07344.pdf

Implementation

Source: Coconut: Threshold Issuance Selective Disclosure Credentials with Applications to Distributed Ledgers, https://arxiv.org/pdf/1802.07344.pdf

The smart contract has four functions, (Create, Request, Issue, Verify), as illustrated in the above Figure.

  1. First, a set of authorities call the Create function to initialize a Coconut instance defining the contract info; i.e., their verification key, the number of authorities, and the threshold parameter.
  1. The initiator smart contract can specify a callback contract that needs to be executed by the user in order to request credentials; e.g., this callback can be used for authentication.
  1. Any user can request a credential through the Request function by executing the specified callback contract and providing the public (clear texts) and private attributes to include in the credentials.
  1. Each signing authority monitors the blockchain at all times, looking for credential requests. If the request appears on the blockchain (i.e., a transaction is executed), it means that the callback has been correctly executed.
  1. Each authority issues a partial credential on the specified attributes by calling the Issue procedure.
  1. In this implementation, all partial credentials are in the blockchain; however, these can also be provided to the user off-chain. Users collect a threshold number of partial credentials and aggregate them to form a full credential.
  1. Then, the users locally randomize the credential. The last function of the Coconut library contract is Verify which allows the blockchain —and anyone else— to check the validity of a given credential.

Limitation: It is not efficient for the authorities to continuously monitor the blockchain.

Applications

  1. Coin Tumbler
  1. Privacy-preserving petition
  1. Censorship-resistant distribution of proxies

Privacy-preserving petition

Authors consider the scenario where several authorities managing the country CC wish to issue some long-term credentials to its citizens to enable any third party to organize a privacy-preserving petition. There are three parties in this system:

  1. A set of signing authorities representing CC
  1. The citizens of CC
  1. A petition initiator
Source: Coconut: Threshold Issuance Selective Disclosure Credentials with Applications to Distributed Ledgers, https://arxiv.org/pdf/1802.07344.pdf

The signing authorities create an instance of the Coconut smart contract as described in the implementation section.

  1. The citizen provides a proof of identity to the authorities.
  1. The authorities check the citizen’s identity and issue a blind and long-term signature on her private key kk. This signature, which the citizen needs to obtain only once, acts as her long-term credential to sign any petition.
  1. Any third party can create a petition by creating a new instance of the petition contract and become the “owner” of the petition.
    1. The petition instance specifies an identifier gsG1g_s \in \mathbb{G_1} unique to the petition
    1. gsg_s is unlinkable to the other points of the scheme, as well as the verification key of the authorities issuing the credentials and any application-specific parameters (e.g., the options and current votes).
    1. This identifier can be generated through a hash function FpG1:H(s)=gssFpF_p \rightarrow \mathbb{G_1}:H(s) = g_s | s \in F_p .
  1. In order to sign a petition,
    1. The citizens compute a value ζ=gsk\zeta = g_s^k , kk is the attribute used in the credential issuance.
    1. They then adapt the zero-knowledge proof of the ProveCred algorithm of construction to show that ζ\zeta is built from the same attribute kk in the credential.
    1. The petition contract checks the proofs and the credentials and checks that the signature is fresh by verifying that ζ\zeta is not part of a spent list.
    1. If all the checks pass, it adds the citizens’ signatures to a list of records and adds ζ\zeta to the spent list to prevent a citizen from signing the same petition multiple times (prevent double spending).

Remarks

  1. Threshold issuance of credentials through smart contracts and the scheme also supports blindness, unlinkability, and aggregability.
  1. On-chain verification of the credentials by two elliptic curve pairings checks.
  1. Limitations:
    • Implementing the Coconut smart contract library on Ethereum is expensive as Ethereum does not provide pre-compiled contracts for elliptic curve arithmetic in G2G_2.
    • Adding and removing authorities implies to re-run the key generation algorithm for the threshold signature scheme.

References

  1. Coconut: Threshold Issuance Selective Disclosure Credentials with Applications to Distributed Ledgers, https://arxiv.org/pdf/1802.07344.pdf.