diff --git a/docs/index.html b/docs/index.html index 79949d7..654debb 100644 --- a/docs/index.html +++ b/docs/index.html @@ -130,19 +130,6 @@

§ Terminology

blinding factor
@@ -315,8 +302,24 @@

§ Terminolo

AnonCreds are capable of all three features mentioned above.

-
NOTE

Question: Should the items that are AnonCreds data models be included in this?

-
+

§ Cryptographic Notations

+

This specification contains the cryptographic calculations necessary to produce +the data objects exchanged in using Hyperledger AnonCreds, and to verify the various proofs +embedded in those objects. The following is information about the notations used +in displaying the cryptographic calculations:

+

a || b : Denotes the concatenation of octet strings a and b.

+

I \ J : For sets I and J, denotes the difference of the two sets i.e., all the elements of I that do not appear in J, in the same order as they were in I.

+

X[a..b] : Denotes a slice of the array X containing all elements from and including the value at index a until and including the value at index b. Note when this syntax is applied to an octet string, each element in the array X is assumed to be a single byte.

+

range(a, b) : For integers a and b, with a <= b, denotes the ascending ordered list of all integers between a and b inclusive (i.e., the integers i such that a <= i <= b).

+

length(input) : Takes as input either an array or an octet string. If the input is an array, returns the number of elements of the array. If the input is an octet string, returns the number of bytes of the inputted octet string.

+

H(...) : Any hash function.

+

Terms specific to pairing-friendly elliptic curves are:

+

E1, E2 : elliptic curve groups defined over finite fields. This document assumes that E1 has a more compact representation than E2, i.e., because E1 is defined over a smaller field than E2.

+

G1, G2 : subgroups of E1 and E2 (respectively) having prime order r.

+

GT : a subgroup, of prime order r, of the multiplicative group of a field extension.

+

e : G1 x G2 -> GT a non-degenerate bilinear map.

+

r : The prime order of the G1 and G2 subgroups.

+

P1, P2 : points on G1 and G2 respectively. For a pairing-friendly curve, this document denotes operations in E1 and E2 in additive notation, i.e., P + Q denotes point addition and x * P denotes scalar multiplication. Operations in GT are written in multiplicative notation, i.e., a * b is field multiplication.

§ AnonCreds Setup Data Flow

The following sequence diagram summarizes the setup operations performed by a Schema Publisher, the Issuer (one required and one optional) in preparing to issue an AnonCred credential based on provided Schema, and the one setup operation performed by each Holder. On successfully completing the operations, the Issuer is able to issue credentials based on the given Schema to the Holder. The subsections below the diagram detail each of these operations.

@@ -353,7 +356,7 @@

omitted in this
diagram, since
it is not required
for the setup end

-
NOTE

Those with a knowledge of DIDs might expect that in the flow above, the first +

NOTE

Those with a knowledge of DIDs might expect that in the flow above, the first step would be for the issuer to publish a DID. However, in AnonCreds, DIDs are not used in the processing of credentials, and notably, the public keys used in AnonCreds signatures come not from DIDs, but rather from Credential Definition objects. DIDs may be used to identify the entity publishing the @@ -754,7 +757,7 @@

TAILS_FILE are tail[index] = g_dash * (gamma ** index)

-
NOTE

Detailed process for tails file generation:

+
NOTE

Detailed process for tails file generation:

  • Create and open the tails file.
  • To generate a tail point for an attribute located at a specific index, follow the steps.
  • @@ -1182,7 +1185,7 @@

    here.

    A gist of test value pairs can be found here.

    -
    NOTE

    To enable broad interoperability, and to improve the security of AnonCreds by +

    NOTE

    To enable broad interoperability, and to improve the security of AnonCreds by eliminating the risk of malicious holders altering the raw data values in hopes that the verifier will not check the encoding as part of the overall presentation verification, future versions of AnonCreds @@ -1266,7 +1269,7 @@

    Supporting Revocation in a Credential.

Once constructed, the issuer sends the credential to the holder for verification and storage.

-
NOTE

Please note the data attribute “birth_dateint” in the example above. The convention of +

NOTE

Please note the data attribute “birth_dateint” in the example above. The convention of putting a _dateint suffix on a credential attribute name is used to indicate that the field contains a date in the form of an integer, such as “2022.11.21” as the integer “20221121” (the number 20,221,121). By putting the date in that @@ -1749,7 +1752,7 @@

claims from the source credential must be shared. If there is no restrictions item in the presentation request, the holder MAY satisfy the presentation request with self-attested attributes.

-
NOTE

To prevent confusion, the term “attribute” in this section always refers to +

NOTE

To prevent confusion, the term “attribute” in this section always refers to the required_attributes in a presentation request, and the term “claim” is used for the data elements in a verifiable credential.

@@ -1759,7 +1762,7 @@

in the generate non-revocation proofs section of the specification.

-
NOTE

Often in discussions about verifiable presentations, the term “prover” +

NOTE

Often in discussions about verifiable presentations, the term “prover” is used to indicate the participant generating the presentation. Throughout the Hyperledger AnonCreds implementation the term prover is used in the names of methods performed by that participant. However, because in AnonCreds the holder and the prover are always the same entity, we’ll use holder to refer to the participant generating the requested presentation to @@ -2367,7 +2370,7 @@

} } -
NOTE

It is important for all verifiers to understand that the revealed attribute +

NOTE

It is important for all verifiers to understand that the revealed attribute proof (eq_proof described earlier) is a proof on the encoded value, not on the raw value. As such, it is up to the verifier to know the “raw to encoded” algorithm used by the issuer, and to verify that the revealed raw value properly @@ -2507,7 +2510,7 @@

Revocation Registry to use is up to the holder, and their use of the capabilities of the relevant Verifiable Data Registry.

-
NOTE

When Hyperledger Indy is the Verifiable Data Registry for the Revocation Registry Entry, the state is received from Indy ledger as the +

NOTE

When Hyperledger Indy is the Verifiable Data Registry for the Revocation Registry Entry, the state is received from Indy ledger as the “deltas” (state changes) from either the initial state of the Registry or from a previous Revocation Registry Entry. While the older Indy version of AnonCreds used the “deltas” representation directly, the newer AnonCreds version @@ -3079,7 +3082,7 @@

Revocation Registry, as described here.

-
NOTE

The issuer MUST track of the revocation status of all of the +

NOTE

The issuer MUST track of the revocation status of all of the credentials within a RevReg so that it can both calculate the correct accumulator and send to the VDR accurate lists (issued and revoked) of the indices of the credentials whose status has changed since the last RevRegEntry was published. If the list and accumulator published to VDR get out of @@ -3295,7 +3298,11 @@

§Copyright Notice
  • Introduction
  • Requirements, Notation and Conventions
  • -
  • Terminology
  • +
  • Terminology + +
  • AnonCreds Setup Data Flow
    • Schema Publisher: Publish Schema Object
    • diff --git a/spec/requirements_notations_conventions.md b/spec/requirements_notations_conventions.md index 9b8322a..60ef3cb 100644 --- a/spec/requirements_notations_conventions.md +++ b/spec/requirements_notations_conventions.md @@ -5,29 +5,3 @@ NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here. - -`a || b` : Denotes the concatenation of octet strings a and b. - -`I \ J` : For sets I and J, denotes the difference of the two sets i.e., all the elements of I that do not appear in J, in the same order as they were in I. - -`X[a..b]` : Denotes a slice of the array X containing all elements from and including the value at index a until and including the value at index b. Note when this syntax is applied to an octet string, each element in the array X is assumed to be a single byte. - -`range(a, b)` : For integers a and b, with a <= b, denotes the ascending ordered list of all integers between a and b inclusive (i.e., the integers "i" such that a <= i <= b). - -`length(input)` : Takes as input either an array or an octet string. If the input is an array, returns the number of elements of the array. If the input is an octet string, returns the number of bytes of the inputted octet string. - -`H(...)` : Any hash function. - -Terms specific to pairing-friendly elliptic curves are: - -`E1, E2` : elliptic curve groups defined over finite fields. This document assumes that E1 has a more compact representation than E2, i.e., because E1 is defined over a smaller field than E2. - -`G1, G2` : subgroups of E1 and E2 (respectively) having prime order r. - -`GT` : a subgroup, of prime order r, of the multiplicative group of a field extension. - -`e` : G1 x G2 -> GT: a non-degenerate bilinear map. - -`r` : The prime order of the G1 and G2 subgroups. - -`P1, P2` : points on G1 and G2 respectively. For a pairing-friendly curve, this document denotes operations in E1 and E2 in additive notation, i.e., P + Q denotes point addition and x * P denotes scalar multiplication. Operations in GT are written in multiplicative notation, i.e., a * b is field multiplication. \ No newline at end of file diff --git a/spec/terminology.md b/spec/terminology.md index d9f2faf..3c870ac 100644 --- a/spec/terminology.md +++ b/spec/terminology.md @@ -126,6 +126,35 @@ accumulator, such that the updated witness times the private factor of the crede ~ \* use [[ref: predicates]] (see below) for enclosing logical expressions, such as the [[ref: holder]] being older than 18 without disclosing the value. ~ AnonCreds are capable of all three features mentioned above. -:::note -**Question**: Should the items that are AnonCreds data models be included in this? -::: +### Cryptographic Notations + +This specification contains the cryptographic calculations necessary to produce +the data objects exchanged in using Hyperledger AnonCreds, and to verify the various proofs +embedded in those objects. The following is information about the notations used +in displaying the cryptographic calculations: + +`a || b` : Denotes the concatenation of octet strings `a` and `b`. + +`I \ J` : For sets `I` and `J`, denotes the difference of the two sets i.e., all the elements of `I` that do not appear in `J`, in the same order as they were in `I`. + +`X[a..b]` : Denotes a slice of the array `X` containing all elements from and including the value at index `a` until and including the value at index `b`. Note when this syntax is applied to an octet string, each element in the array `X` is assumed to be a single byte. + +`range(a, b)` : For integers `a` and `b`, with `a <= b`, denotes the ascending ordered list of all integers between `a` and `b` inclusive (i.e., the integers `i` such that `a <= i <= b`). + +`length(input)` : Takes as input either an array or an octet string. If the input is an array, returns the number of elements of the array. If the input is an octet string, returns the number of bytes of the inputted octet string. + +`H(...)` : Any hash function. + +Terms specific to pairing-friendly elliptic curves are: + +`E1, E2` : elliptic curve groups defined over finite fields. This document assumes that `E1` has a more compact representation than `E2`, i.e., because `E1` is defined over a smaller field than `E2`. + +`G1, G2` : subgroups of `E1` and `E2` (respectively) having prime order `r`. + +`GT` : a subgroup, of prime order `r`, of the multiplicative group of a field extension. + +`e` : `G1 x G2 -> GT` a non-degenerate bilinear map. + +`r` : The prime order of the `G1` and `G2` subgroups. + +`P1, P2` : points on `G1` and `G2` respectively. For a pairing-friendly curve, this document denotes operations in `E1` and `E2` in additive notation, i.e., `P + Q` denotes point addition and `x * P` denotes scalar multiplication. Operations in `GT` are written in multiplicative notation, i.e., `a * b` is field multiplication.