This project is a Go implementation of an anonymous identity stack for blockchain systems.
- Protocol
Here we describe the cryptographic protocol that is implemented.
TBD (Group etc.)
The input for this step are the 4 attributes that are certified, namely OU
, Role
, EnrollmentID
and RevocationHandle
(call them
Given these attributes, the CA samples the issuer secret key at random
And then computes
For each attribute
The CA randomly selects
Then the CA randomly selects
It also generates
The issuer public key
where
and the issuer private key is
Given a client
and random elements
and then computes
The credential request sent to the CA is
The CA computes
and checks whether
If so, the CA picks random elements
and computes
The CA returns the credential
The user verifies the credential by computing
If
holds. If so, the user accepts private key
To sign message
And then generates the new signature as follows
The client then generates random elements
and then generates
and for each attribute
The signature
Upon receipt of a signature
If so, it recomputes
and accepts the signature if
This verification also verifies the disclosed subset of attributes.
Differently from a standard signature, a pseudonymous signature does not prove that the pseudonym possesses a user certificate signed by a CA. It only proves that the pseudonym
Then it generates
The signature
Upon receipt of a pseudonymous signature
and accepts the signature if
The enrollment id is one of the cerified attributes (
The pseudonym is computed by sampling
and by generating the pseudonym
Signature generation is similar to the scheme above; in particular, the term
-
the client computes an additional value
$t_4 \leftarrow H_{a_{2}}^{r_{a_{2}}} \cdot H_{r}^{r_{r_{eid}}}$ ; -
the client includes
$(Nym_{eid}, t_4)$ in the challenge computation:$C \leftarrow H(H(t_1||t_2||t_3||t_4||A'||\bar{A}||B'||Nym||Nym_{eid}||h_{CA}||d_0||\ldots||d_3||m)||n)$ (if$d_2$ is included, it should always be set to 0 otherwise the value of the enrollment ID would be revealed); -
the client computes an additional proof
$S_{r_{eid}} \leftarrow r_{r_{eid}} %2B r_{eid} C$ ; -
The signature includes the additional proof
$S_{r_{eid}}$ and pseudonym$Nym_{eid}$ .
Signature verification is the same as above except that
-
verifier computes
$t'_4 \leftarrow \frac{H_{a_{2}}^{S_{a_2}} \cdot H_{r}^{S_{r_{eid}}}}{Nym_{eid}^C}$ ; -
verifier checks if
$C \leftarrow H(H(t'_1||t'_2||t'_3||t'_4||A'||\bar{A}||B'||Nym||Nym_{eid}||h_{CA}||d_0||\ldots||d_3||m)||n)$ .
To Audit NymEid the client reveals pair