Skip to content

Commit 974eb2a

Browse files
committed
Cite CFRG sigma-protocols and Fiat-Shamir drafts as alignment references
The composite layer shares their shapes — commit/challenge/response phases, labeled prefix-free single-squeeze transcript — but is not an instantiation: AND composition is out of their scope, challenge derivation stays in the BBS hash_to_scalar family (one derivation path), and only P-256 is normative. Recorded in the draft (informative references), README, and REFERENCES.md.
1 parent 0785692 commit 974eb2a

4 files changed

Lines changed: 87 additions & 0 deletions

File tree

README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,14 @@ The standards boundary is intentional:
7575

7676
The draft is a reviewable description of the construction, not a standards-track proposal. It
7777
covers the composite presentation and predicate layers and summarizes the JSON-LD integration.
78+
It is structurally aligned with CFRG's emerging sigma-protocol work
79+
([draft-irtf-cfrg-sigma-protocols](https://datatracker.ietf.org/doc/draft-irtf-cfrg-sigma-protocols/),
80+
[draft-irtf-cfrg-fiat-shamir](https://datatracker.ietf.org/doc/draft-irtf-cfrg-fiat-shamir/)) —
81+
the same commit/challenge/response phases and the same labeled, single-squeeze transcript
82+
discipline — and cites both as informative references. It is not an instantiation of them:
83+
AND composition of statements is explicitly out of scope of those drafts, and challenge
84+
derivation stays in the BBS `hash_to_scalar` family so the BBS and composite layers share one
85+
derivation path.
7886

7987
## Getting started
8088

docs/REFERENCES.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,23 @@ convenience, not authoritative.
2121
`draft-irtf-cfrg-bbs-signatures` (currently -10) plus tooling. The base scheme our blind
2222
extension sits on. Also ships fixtures.
2323

24+
### `draft-irtf-cfrg-sigma-protocols` + `draft-irtf-cfrg-fiat-shamir` — alignment, not adoption
25+
CFRG's generic sigma-protocol framework and its Fiat-Shamir companion, both Informational -02
26+
(March 2026). Cited as informative references in `draft-credkit-composite-proofs`. We match
27+
their shapes: the split-phase proof API is their `prover_commit`/`prover_response`
28+
decomposition, and our transcript enforces the same labeled prefix-free absorption /
29+
one-squeeze discipline the FS draft mandates.
30+
31+
**Do not adopt their bytes.** Three hard blockers, re-verified July 2026: (1) AND composition —
32+
our entire composite layer — is explicitly out of scope of sigma-protocols ("NOT described in
33+
this specification"); (2) the FS draft mandates a Keccak/SHAKE duplex sponge with mod-p
34+
challenge reduction, a different derivation family than BBS `hash_to_scalar` — adopting it in
35+
the composite layer while the BBS layer keeps `hash_to_scalar` for fixture conformance would be
36+
the two-path Fiat-Shamir fork FINDINGS §11 refuses; (3) only P-256 is normative (BLS12-381
37+
appears in test-vector names only), and pairing equations / GT commitments are outside its
38+
linear-map scope. Re-check if the drafts grow BLS12-381 ciphersuites and composition — that
39+
would be the moment to re-align the transcript.
40+
2441
### `w3c/vc-di-bbs` — the W3C cryptosuite (structure donor, not a compliance target)
2542
[Data Integrity BBS Cryptosuites v1.0](https://www.w3.org/TR/vc-di-bbs/), **Candidate
2643
Recommendation Draft, 7 April 2026** — no longer the 2023 WD the incumbent stack implements.

docs/draft-credkit-composite-proofs.html

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1631,6 +1631,27 @@ <h3 id="name-relationship-to-existing-sp">
16311631
generation algorithm's per-message Schnorr blindings so an outer protocol can reuse them. Both
16321632
are described precisely in <a href="#divergences-from-ietf-bbs" class="auto internal xref">Section 3</a>. Everything else in that layer is the
16331633
IETF construction as written.<a href="#section-1.2-3" class="pilcrow"></a></p>
1634+
<p id="section-1.2-4">Two adjacent CFRG efforts deserve precise situating. <span>[<a href="#I-D.irtf-cfrg-sigma-protocols" class="cite xref">I-D.irtf-cfrg-sigma-protocols</a>]</span>
1635+
standardizes interactive sigma protocols proving knowledge of preimages of linear maps in
1636+
prime-order groups, and <span>[<a href="#I-D.irtf-cfrg-fiat-shamir" class="cite xref">I-D.irtf-cfrg-fiat-shamir</a>]</span> standardizes their non-interactive form
1637+
via a duplex-sponge transcript. This document is structurally aligned with both: each statement
1638+
is proven in the same commit/challenge/response phases (the split-phase interface of
1639+
<a href="#reachable-schnorr-blindings-and-split-phase-proof-generation" class="auto internal xref">Section 3.2</a> is that draft's
1640+
<code>prover_commit</code>/<code>prover_response</code> decomposition), and the transcript of
1641+
<a href="#the-merged-fiat-shamir-transcript" class="auto internal xref">Section 4</a> enforces the same discipline — labeled prefix-free
1642+
absorption, protocol and ciphersuite binding, and exactly one challenge per transcript. This
1643+
document is not, however, an instantiation of either draft, for three reasons. First, AND
1644+
composition of statements under one challenge — the mechanism this document exists to describe —
1645+
is explicitly out of scope of <span>[<a href="#I-D.irtf-cfrg-sigma-protocols" class="cite xref">I-D.irtf-cfrg-sigma-protocols</a>]</span>. Second, challenge derivation
1646+
here stays in the BBS <code>hash_to_scalar</code> family rather than adopting the Keccak duplex sponge of
1647+
<span>[<a href="#I-D.irtf-cfrg-fiat-shamir" class="cite xref">I-D.irtf-cfrg-fiat-shamir</a>]</span>: the BBS layer must derive challenges with <code>hash_to_scalar</code> to
1648+
conform to <span>[<a href="#I-D.irtf-cfrg-bbs-signatures" class="cite xref">I-D.irtf-cfrg-bbs-signatures</a>]</span>, and running a second derivation primitive in the
1649+
composite layer would be exactly the two-path Fiat-Shamir fork that <a href="#one-challenge" class="auto internal xref">Section 4.5</a> exists to
1650+
prevent. Third, <span>[<a href="#I-D.irtf-cfrg-sigma-protocols" class="cite xref">I-D.irtf-cfrg-sigma-protocols</a>]</span> currently defines only P-256 normatively, and
1651+
neither the BBS pairing verification equation nor the <code>GT</code>-valued predicate commitments of
1652+
<a href="#predicates-over-hidden-messages" class="auto internal xref">Section 6</a> fall within its linear-map scope. Should those drafts mature
1653+
to cover BLS12-381 and statement composition, re-aligning this layer's transcript with them is a
1654+
natural future revision.<a href="#section-1.2-4" class="pilcrow"></a></p>
16341655
</section>
16351656
</div>
16361657
<div id="terminology">
@@ -1889,6 +1910,11 @@ <h2 id="name-the-merged-fiat-shamir-tran">
18891910
place where an ad-hoc <code>H(a || b || c)</code> concatenation would let a malicious Prover shift octets
18901911
between fields and forge a proof over a different statement that hashes identically — the
18911912
"Frozen Heart" bug class <span>[<a href="#FrozenHeart" class="cite xref">FrozenHeart</a>]</span>. The rules below exist to make that impossible.<a href="#section-4-1" class="pilcrow"></a></p>
1913+
<p id="section-4-2">The construction follows the same transcript discipline as <span>[<a href="#I-D.irtf-cfrg-fiat-shamir" class="cite xref">I-D.irtf-cfrg-fiat-shamir</a>]</span>
1914+
labeled prefix-free absorption, initial protocol binding, one squeeze — but derives the
1915+
challenge with the BBS <code>hash_to_scalar</code> rather than that draft's Keccak duplex sponge, keeping a
1916+
single challenge-derivation primitive across the BBS and composite layers (see
1917+
<a href="#relationship-to-existing-specifications" class="auto internal xref">Section 1.2</a>).<a href="#section-4-2" class="pilcrow"></a></p>
18921918
<div id="absorption">
18931919
<section id="section-4.1">
18941920
<h3 id="name-absorption">
@@ -2597,6 +2623,14 @@ <h3 id="name-informative-references">
25972623
<dd>
25982624
<span class="refAuthor">Trail of Bits</span>, <span class="refTitle">"The Frozen Heart vulnerability in Fiat-Shamir implementations"</span>, <time datetime="2022" class="refDate">2022</time>, <span>&lt;<a href="https://blog.trailofbits.com/2022/04/13/part-1-coordinated-disclosure-of-vulnerabilities-affecting-girault-bulletproofs-and-plonk/">https://blog.trailofbits.com/2022/04/13/part-1-coordinated-disclosure-of-vulnerabilities-affecting-girault-bulletproofs-and-plonk/</a>&gt;</span>. </dd>
25992625
<dd class="break"></dd>
2626+
<dt id="I-D.irtf-cfrg-fiat-shamir">[I-D.irtf-cfrg-fiat-shamir]</dt>
2627+
<dd>
2628+
<span class="refAuthor">Orrù, M.</span>, <span class="refTitle">"Fiat-Shamir Transformation"</span>, <span class="refContent">Work in Progress</span>, <span class="seriesInfo">Internet-Draft, draft-irtf-cfrg-fiat-shamir-02</span>, <time datetime="2026-03-02" class="refDate">2 March 2026</time>, <span>&lt;<a href="https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-fiat-shamir-02">https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-fiat-shamir-02</a>&gt;</span>. </dd>
2629+
<dd class="break"></dd>
2630+
<dt id="I-D.irtf-cfrg-sigma-protocols">[I-D.irtf-cfrg-sigma-protocols]</dt>
2631+
<dd>
2632+
<span class="refAuthor">Orrù, M.</span> and <span class="refAuthor">C. Yun</span>, <span class="refTitle">"Interactive Sigma Proofs"</span>, <span class="refContent">Work in Progress</span>, <span class="seriesInfo">Internet-Draft, draft-irtf-cfrg-sigma-protocols-02</span>, <time datetime="2026-03-02" class="refDate">2 March 2026</time>, <span>&lt;<a href="https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-sigma-protocols-02">https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-sigma-protocols-02</a>&gt;</span>. </dd>
2633+
<dd class="break"></dd>
26002634
<dt id="RFC2119">[RFC2119]</dt>
26012635
<dd>
26022636
<span class="refAuthor">Bradner, S.</span>, <span class="refTitle">"Key words for use in RFCs to Indicate Requirement Levels"</span>, <span class="seriesInfo">BCP 14</span>, <span class="seriesInfo">RFC 2119</span>, <span class="seriesInfo">DOI 10.17487/RFC2119</span>, <time datetime="1997-03" class="refDate">March 1997</time>, <span>&lt;<a href="https://www.rfc-editor.org/info/rfc2119">https://www.rfc-editor.org/info/rfc2119</a>&gt;</span>. </dd>

docs/draft-credkit-composite-proofs.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,28 @@ generation algorithm's per-message Schnorr blindings so an outer protocol can re
118118
are described precisely in (#divergences-from-ietf-bbs). Everything else in that layer is the
119119
IETF construction as written.
120120

121+
Two adjacent CFRG efforts deserve precise situating. [@?I-D.irtf-cfrg-sigma-protocols]
122+
standardizes interactive sigma protocols proving knowledge of preimages of linear maps in
123+
prime-order groups, and [@?I-D.irtf-cfrg-fiat-shamir] standardizes their non-interactive form
124+
via a duplex-sponge transcript. This document is structurally aligned with both: each statement
125+
is proven in the same commit/challenge/response phases (the split-phase interface of
126+
(#reachable-schnorr-blindings-and-split-phase-proof-generation) is that draft's
127+
`prover_commit`/`prover_response` decomposition), and the transcript of
128+
(#the-merged-fiat-shamir-transcript) enforces the same discipline — labeled prefix-free
129+
absorption, protocol and ciphersuite binding, and exactly one challenge per transcript. This
130+
document is not, however, an instantiation of either draft, for three reasons. First, AND
131+
composition of statements under one challenge — the mechanism this document exists to describe —
132+
is explicitly out of scope of [@?I-D.irtf-cfrg-sigma-protocols]. Second, challenge derivation
133+
here stays in the BBS `hash_to_scalar` family rather than adopting the Keccak duplex sponge of
134+
[@?I-D.irtf-cfrg-fiat-shamir]: the BBS layer must derive challenges with `hash_to_scalar` to
135+
conform to [@!I-D.irtf-cfrg-bbs-signatures], and running a second derivation primitive in the
136+
composite layer would be exactly the two-path Fiat-Shamir fork that (#one-challenge) exists to
137+
prevent. Third, [@?I-D.irtf-cfrg-sigma-protocols] currently defines only P-256 normatively, and
138+
neither the BBS pairing verification equation nor the `GT`-valued predicate commitments of
139+
(#predicates-over-hidden-messages) fall within its linear-map scope. Should those drafts mature
140+
to cover BLS12-381 and statement composition, re-aligning this layer's transcript with them is a
141+
natural future revision.
142+
121143
## Terminology
122144

123145
Holder, Issuer, Verifier, Prover, and the BBS operation names (`Sign`, `Commit`, `BlindSign`,
@@ -300,6 +322,12 @@ place where an ad-hoc `H(a || b || c)` concatenation would let a malicious Prove
300322
between fields and forge a proof over a different statement that hashes identically — the
301323
"Frozen Heart" bug class [@FrozenHeart]. The rules below exist to make that impossible.
302324

325+
The construction follows the same transcript discipline as [@?I-D.irtf-cfrg-fiat-shamir]
326+
labeled prefix-free absorption, initial protocol binding, one squeeze — but derives the
327+
challenge with the BBS `hash_to_scalar` rather than that draft's Keccak duplex sponge, keeping a
328+
single challenge-derivation primitive across the BBS and composite layers (see
329+
(#relationship-to-existing-specifications)).
330+
303331
## Absorption
304332

305333
The transcript accumulates labeled, length-framed entries. Absorbing a labeled value appends:

0 commit comments

Comments
 (0)