Łukasz Krzywiecki

Department of Fundamentals of Computer Science, Wrocław University of Science and Technology
Contact Teaching Research Activity
Hierarchical Ring Signatures with Hidden Signature Functionality

Functional proof-of-concept for the TrustCom 2025 paper. The blockchain layer is represented as an append-only verifier order; the demo focuses on nodes of the form (m,σ,pkn,Y), where YLN.

DOI Papers D3 dependency tree MCL WASM loading
Repository hierarchy

Click any signature node to expand or collapse dependencies.

Command clickselect Y
Shift clicksigner path
Option clickverify node
Node inspector
Hover a circle to see the node message and its children.
Preparing repository...
Selected signature
Repository
Markdown-style scheme notes + MathML
Scheme specification implemented by this page

The proof-of-concept follows the hierarchical ring signature layer from the TrustCom 2025 paper and the earlier HRS line of work. The browser demo does not emulate a blockchain consensus protocol; it treats the repository as an append-only, verified order of nodes.

Executable MCL model
### 1. Public parameters and state

The scheme is defined over a cyclic group of prime order. In the paper this is written multiplicatively as G=g with public keys pk=gsk . The browser implementation uses MCL additively over G1, where the fixed base point is denoted by P in the notes below.

R = { L, N, S }
  • H denotes the domain-separated random-oracle calls; it is not the repository state.
  • L is the set of certified external public keys.
  • N is the set of node public keys created by previous HRS signatures.
  • S is the append-only set of verified nodes.
  • Each public node is stored as (m,σ,pkn,Y) . Here σ is a compound HRS signature: σ=(s, {(Ri,certi,hi)}pkiY ) . The demo also keeps an administrative signer witness so that the visualization can reveal the hidden path on demand.
### 2. Dependency set and tree condition

A new signature chooses a dependency set YLN . This set may contain certified user keys and previously generated node keys. The tree condition prevents comparable ancestry inside the same ring: one selected predecessor may not already contain another selected predecessor in its history.

T(Y)=1 ¬ pka, pkbY : pka pkb

The demo enforces this rule before adding a node: selected bases may be siblings or independent roots, but one selected base cannot already contain another selected base in its history.

ParGen(1^lambda) system setup
  1. Generate (p,q,g,G) with prime order q, where G=g .
  2. Select domain-separated hash functions modeled as random oracles for Schnorr challenges, HRS challenges, and hidden openings.
  3. Publish the public parameters. The browser version fixes these parameters through MCL WebAssembly over BLS12-381 G1.
KeyGen() ordinary and node keys
  1. Sample skZq .
  2. Compute the public key pk=gsk .
  3. For an HRS node, the freshly generated key pair (skn,pkn) has a special certification role. The secret key skn signs every ring commitment Ri, producing a certificate certi. The public key pkn is then checked by the verifier against all those certificates.
Schnorr.Cert(R_i, skn) certifying each ring commitment
  1. Sample the Schnorr randomness u and compute U=gu .
  2. Set the certified statement to xi=certify||Ri . This statement is the ring commitment produced from the committed randomness of the ring-signature equation.
  3. Hash the statement, Schnorr commitment, and node public key to obtain e=HSchnorr(xi,U,pkn) .
  4. Return the certificate as a Schnorr signature σicert=(U,z) , stored in the node as certi=σicert with z=u+e·skn .
  5. Verification checks gz=U·pkne . Thus the fresh node key certifies that each commitment Ri belongs to the node being created.
NRSign(m, sk_j, Y) hierarchical ring signature and node certification
  1. Create a fresh node key (skn,pkn) . This key pair is not one of the anonymous signer keys in Y; it is the new node key that will certify the ring commitments and become the public key of the newly appended node.
  2. For every non-signer key pkiY , sample ri, set Ri=gri , certify Ri with skn by computing certi=Schnorr.Cert(Ri,skn) , and compute hi=HHRS(m,Ri,certi) .
  3. For the actual signer pkj, sample rj and close the ring equation by defining Rj = grj · ij pki-hi
  4. Certify Rj in the same way, compute hj=HHRS(m,Rj,certj) , and output s= ijri +rj +skj·hj
  5. Store the node (m,σ,pkn,Y) , where σ=(s, {(Ri,certi,hi)}pkiY ) , and append pkn to N. The dependency is deliberately two-way in meaning: skn certifies the randomness commitments Ri, while the accepted HRS equation binds pkn to the message m and to the selected anonymity set Y.
NRVerify(m, sigma, pkn, Y) node verification
  1. Verify every Schnorr certificate certi over the corresponding commitment Ri using pkn. This is the local certification layer inside the node signature.
  2. Recompute every challenge hi=HHRS(m,Ri,certi) . Since certi is hashed into hi, the ring equation binds the new public node key pkn to the ring signature.
  3. Accept exactly when the ring equation holds: gs = pkiY (Ri·pkihi)
NRASign / NRAVerify hidden signature functionality
  1. For a selected non-signer component k, replace the random value by a deterministic opening derived from a hidden message and context: rk = Hopen ( Hm(m˜k) || Hc(c˜k) )
  2. The hidden message m˜k is a secondary payload carried by a non-signer component of the ring. It can be a short statement, a reference to an external fact, or even an already produced external signature. In the last case the HRS node acts as a public carrier for a hidden signature channel, while the visible HRS signature remains an ordinary node signature on m.
  3. Stealth comes from the replacement of ordinary non-signer randomness by a hash-derived scalar. With H modeled as a random oracle, the value rk=Hopen(Hm(m˜k)||Hc(c˜k)) is computationally indistinguishable from a fresh random scalar in Zq. Thus the public commitment Rk=grk looks like an ordinary random commitment unless the verifier already knows both the hidden message and the salt.
  4. The salt c˜k is not cosmetic. It gives the hidden input enough entropy and prevents practical hash-inversion or dictionary attempts against short hidden messages.
  5. The public node still verifies as an ordinary HRS node, so the extra payload is not visible to ordinary verifiers.
  6. In this page, the salt field represents the hidden context, and the scalar opening is produced by hiddenOpeningScalar applied to the mathematical pair (m˜,c˜) and implemented as Hopen(Hm(m˜)||Hc(c˜)) with explicit domain separation.
  7. A hidden verifier accepts the extra message after checking that Rk=grk is one of the certified ring commitments. Public NRVerify does not need the hidden message.
### 3. Exact equation executed in the browser

MCL exposes elliptic-curve groups additively. Therefore the code computes the additive form of the paper equation:

s·P = pkiY (Ri+hi·PKi)

The map is direct: gaa·P ; a public key pki becomes the MCL point PKi; products become sums; inverse exponents become scalar negation. This avoids using Y both for the ring set and for an individual public-key point.

### 4. How the interface maps to the construction
  • leaf.secretKey and leaf.publicKey model certified keys from L.
  • record.nodeSecretKey and record.nodePublicKey model fresh HRS node keys (skn,pkn) whose public keys are added to N. In the demo, the node secret remains controlled by the same signer/owner who used the signing key. It may be stored, or derived deterministically, for example as sknHkey(skowneridn) .
  • record.dependencies is the selected ring set Y.
  • record.signature.ring stores the certified commitments (Ri,certi,hi) . In code, certi appears as entry.certificate and is a Schnorr certificate under the fresh node key pkn.
  • record.signerKeyId is an administrative witness used only by the simulator; it identifies which secret key was used and therefore which signer/owner color is shown. It is not serialized into the public HRS signature or the public digest.
  • verifyNodeSignature(record) checks the public Schnorr certificates and additive HRS equation.
  • verifyHiddenPayloads(record) checks the optional hidden openings, while verifyRepository() also checks the tree condition, public digest chain, dependency order, and Y entries.
### 5. Reading the tree as a repository

White dashed leaves are certified public keys from L. Red nodes are HRS signatures whose public node keys have been appended to N. Expanding a node reveals the selected dependency set Y; collapsing it hides already verified history in the same way an on-chain verifier may rely on previously accepted repository nodes.

The essential point is that a later signature can use earlier signatures as bases. This creates a hierarchical order: older signatures certify roots for later signatures, and the append-only order gives the structure a timestamp-like interpretation without showing which selected key was the actual signer.

Verified references used by this specification

Sources: papers.html, the local DBLP export, and the bibliography of the TrustCom 2025 HRS manuscript.

  • Łukasz Krzywiecki, Witold Karaś, Adam Niezgoda, Karol Niczyj. Hierarchical Ring Signatures with Hidden Signature Functionality over Blockchain Infrastructure. TrustCom 2025: 2010-2015. DOI: 10.1109/Trustcom66490.2025.00233.
  • Łukasz Krzywiecki, Mirosław Kutyłowski, Rafał Rothenberger, Bartosz Drzazga. Hierarchical Ring Signatures Immune to Randomness Injection Attacks. CSCML 2021: 171-186. DOI: 10.1007/978-3-030-78086-9_13.
  • Łukasz Krzywiecki, Malgorzata Sulkowska, Filip Zagórski. Hierarchical Ring Signatures Revisited - Unconditionally and Perfectly Anonymous Schnorr Version. SPACE 2015: 329-346. DOI: 10.1007/978-3-319-24126-5_19.
  • Łukasz Krzywiecki, Mirosław Kutyłowski, Anna Lauks. Hierarchical Ring Signatures. Slides presented at Western European Workshop on Research in Cryptology, 2009.
  • Marek Klonowski, Łukasz Krzywiecki, Mirosław Kutyłowski, Anna Lauks. Step-Out Ring Signatures. MFCS 2008: 431-442. DOI: 10.1007/978-3-540-85238-4_35.
  • Ronald L. Rivest, Adi Shamir, Yael Tauman. How to Leak a Secret. ASIACRYPT 2001: 552-565.
  • Javier Herranz, Germán Sáez. Forking Lemmas for Ring Signature Schemes. INDOCRYPT 2003: 266-279. DOI: 10.1007/978-3-540-24582-7_20.
  • Claus-Peter Schnorr. Efficient Signature Generation by Smart Cards. Journal of Cryptology 4: 161-174, 1991.