Anonymous Voucher: Triple-Blinded Micro-Payment

Protocol specification for the triple-blinded anonymous voucher construction: slip-knot obfuscation, combined EdDSA signature, Payer validation, BYOiD integration, and monthly redemption.

25 min read

Overview

This document specifies the cryptographic construction of the Anonymous Voucher - the micro-payment token that gates every ORK operation in the Tide Cybersecurity Fabric. The voucher must simultaneously prove payment authorization to the ORK, prove balance sufficiency to the Payer, hide each actor's identity from non-adjacent parties, bind to a specific action type, and resist replay.
The construction achieves these properties via triple-blinding: three actors apply independent obfuscation layers that intertwine into a verifiable combined signature s=s1+s2s = s1 + s2, allowing the Payer to validate payment without unmasking the transacting entities. The voucher's obfuscated Vendor identity YY' simultaneously serves as the BYOiD authentication tag, fusing settlement and identification into a single protocol round.
Loading diagram...

Notation Reference

SymbolDescription
GGGenerator point on the selected elliptic curve.
AbA \cdot bScalar-point multiplication.
H()\textsf{H}(\cdot)Cryptographic SHA256 hash function.
DH(A,b)H(Ab)\textsf{DH}(A , b) \equiv \textsf{H}(A \cdot b)Diffie-Hellman key exchange function.
vv, V=GvV = G \cdot vVRK key pair. Vendor's ephemeral payment key (rotates monthly).
Y=gVVKY = gVVKVendor's master identity public key.
YY'Triple-obfuscated Vendor identity: YH(v)DH(P,q)modqY \cdot \textsf{H}(v) \cdot \textsf{DH}(P, q) \mod q.
YY''Payer-facing obfuscated VVK: YH(v)Y \cdot \textsf{H}(v).
Y^\hat{Y}User ID obfuscation tag: YH(v)Y' \cdot \textsf{H}(v).
oio_i, OiO_iORK ii's private and public key pair.
pORKipORK_iORK ii's per-operation temporary payment key pair.
ziz_iORK blinding factor: DH(Oi,k)\textsf{DH}(O_i , k).
OiO'_iBlinded ORK identity: OiziO_i \cdot z_i.
kk, K=GkK = G \cdot kSWE's per-operation blinding key pair.
qq, Q=GqQ = G \cdot qVendor's per-voucher-batch nonce key pair.
pp, P=GpP = G \cdot pPayer swarm deobfuscation key pair.
nin_i, NiN_iPayer node ii's signing key pair.
uuPRISM deobfuscation coefficient: H(v)×DH(P,q)×DH(K,q)modq\textsf{H}(v) \times \textsf{DH}(P , q) \times \textsf{DH}(K , q) \mod q.
s1is1_iVendor's partial voucher signature for ORK ii.
s2s2ORK's voucher counter-signature.
ssCombined voucher signature: s1i+s2s1_i + s2.
R1iR1_i, R2R2EdDSA nonce public values (Vendor, ORK).
UIDUID'Obfuscated user ID: Y^uid\hat{Y} \cdot uid.
uidanonuid_{anon}Anonymized user ID (Payer-derived, for MAU licensing).
VENkeyVENkey'Vendor destination key (Payer-derived, for ORK→Vendor encryption).
ProofSign\textsf{ProofSign}Payer's redemption proof signature.
ZZSum of ORK blinding factors (monthly redemption deobfuscation).

Actors

ActorDescriptionTrust Assumption
User Agent (SWE)Acquires ORKs, blinds their public keys, requests vouchers from Vendor, orchestrates ORKs.Verifiable (but untrusted) dealer. Can select routing but cannot manipulate signed vouchers.
TideCloakHolds VRK, generates and signs vouchers, obfuscates own identity.Knows VVK public, lacks private shards. Cannot identify which ORKs receive vouchers.
ORK NodesFinalize vouchers (counter-signature), submit to Payer, execute partial operation if validated.Standard threshold trust. Cannot derive Vendor's identity from voucher.
PayerValidates signatures, enforces balance/licensing, issues RedemptProof, settles monthly.Scrutinized, Tide-operated. Knows V but cannot derive Y.
mimDB"Mimir" Database - Append-only Fabric synced registry. Stores committed records, Accountable Group Signatures, TWELVE-MAP entries.Potentially compromised. All records cryptographically verifiable.
TWELVE-MAPTide Wide Enumerated Ledger of Verifiable Entries - Mapping Authoritative Pointers is the self-verifying directory service on mimDB mapping key identifiers to ORK swarms.Each entry includes a ZK proof attesting to its authenticity against the master registry.

Preconditions

Vendor-Side: Facility approval VRK key (vv, VV), master Vendor public key (Y=gVVKY = gVVK), H2P(VVK)\textsf{H2P}(VVK), Payer public key (PP).
ORK-Side: ORK private key (oio_i, OiO_i), Payment ORKs keys (pORKipORK_i), user CMK shard (xix_i), user ID (uiduid).
Payer-Side: Cluster deobfuscation key (pp, PP), node signing key (nin_i, NiN_i), facility store ID YY'' tracking: balance, capacity, VRK validity dates, MAU.

Phase 0: Credit Facility Setup

When: During initial vendor onboarding and each monthly VRK rotation.
The Vendor registers a funded facility with the Payer, linking VRK to VVK without exposing the master VVK identity. For the full credit facility setup construction including the semi-blind signature, see Protocol: Vendor Licensing, Algorithm 1.
The Vendor generates a fresh VRK (vv, VV), derives Ytmp=GH(v)Y_{tmp} = G \cdot \textsf{H}(v), signs proofs of possession (vProofvProof, YProofYProof), and registers a provisional credit facility: CreateLicense(V, Y_tmp, YProof, vProof). The Payer creates a credit facility indexed by VV, identified by YtmpY_{tmp}.
During VVK generation, the VVK ORKs produce a semi-blind signature. The Vendor aggregates to derive Y=YH(v)Y'' = Y \cdot \textsf{H}(v) and updates the facility: UpdateLicense(V, Y'', YProof, vProof). The Payer verifies and re-indexes by YY''. The Payer holds Y=YH(v)Y'' = Y \cdot \textsf{H}(v) but cannot recover YY without vv.

Phase 1: Voucher Allocation (Per-Operation)

When: Every authentication, decryption, or signing request.
Loading diagram...
Step 1.1 - SWE Blinds ORK Identities (Blind 1). The Secure Web Enclave (SWE) generates ephemeral kk, K=GkK = G \cdot k and computes per-ORKiORK_i blinding: zi=DH(Oi,k)z_i = \textsf{DH}(O_i , k), Oi=OiziO'_i = O_i \cdot z_i. Transmits (O1..n,"action",K)(O'_{1..n}, \text{"action"}, K) to the Vendor.
Step 1.2 - Vendor Generates Vouchers (Blind 2). The Vendor executes Algorithm 1, returning (s11..n,R11..n,Y,Q,P,u,Y^)(s1_{1..n}, R1_{1..n}, Y', Q, P, u, \hat{Y}).
Step 1.3 - SWE Verifies and Distributes. The SWE recovers the Vendor's public key: Y=YDH(Q,k)u1Y = Y' \cdot \textsf{DH}(Q , k) \cdot u^{-1} and asserts it matches the expected gVVKgVVK. Routes the per-ORK voucher.
Step 1.4 - ORK Finalizes Voucher (Blind 3). The ORK recomputes zi=DH(K,oi)z_i = \textsf{DH}(K , o_i) (note: KoiOikK \cdot o_i \equiv O_i \cdot k), derives O=OiziO' = O_i \cdot z_i, computes its counter-signature s2s2, and forms s=s1i+s2s = s1_i + s2. The ORK obfuscates the user ID: UID=Y^uidUID' = \hat{Y} \cdot uid.
Step 1.5 - ORK Contacts Payer. The ORK queries the decentralized repository for the Payer cluster address via findPayer(P), receives ClusterPayersList[1..n], and calls ValidateVoucher on one Payer node from that cluster with: (s,R1,R2,Y,Q,O,UID,"action")(s, R1, R2, Y', Q, O', UID', \text{"action"}).

Phase 2: Payer Validation

Loading diagram...
The Payer executes Algorithm 2 (deobfuscation and verification), then:
Licensing check. The Payer derives an anonymized user ID: uidanon=H(UID(DH(Q,p))1)uid_{anon} = \textsf{H}(UID' \cdot (\textsf{DH}(Q , p))^{-1}), which expands to H(YH(v)H(v)uid)\textsf{H}(Y \cdot \textsf{H}(v) \cdot \textsf{H}(v) \cdot uid). This value is unique per user per vendor, changes each billing cycle (incorporates rotating vv), and is unlinkable to the actual uiduid. If the MAU count exceeds the Vendor's licensed limits, the voucher is rejected.
Redemption proof. Upon passing all checks: ProofSign=SIGNni(timestamp,"action",O)\textsf{ProofSign} = \textsf{SIGN}_{n_i}(timestamp, \text{"action"}, O'). The Payer also derives VENkey=ODH(Q,DH(V,p))VENkey' = O' \cdot \textsf{DH}(Q , \textsf{DH}(V , p)) for ORK→Vendor encryption. Returns (Proof,VENkey)(\textsf{Proof}, VENkey') to the ORK.
Storage. The Payer stores the validation indexed by digest (SubIndex: action, timestamp, key) and updates the balance indexed by venPub. The ORK stores the validation indexed by digest (SubIndex: payerPublic, action) with RedemptProof, voucher fields, and zObfz_{Obf}.

Phase 3: BYOiD Integration

The voucher protocol integrates with BYOiD authentication (Protocol: CMK Authentication) to establish the user's secret contextual identity (that is used to calculate the user identity in the context of this specific vendor) at zero additional latency. A user secret contextual identity value is a cross between the Vendor secret key and the user's master secret key: G(VVK)(CVK)G \cdot \text(VVK) \cdot \text(CVK). The triple-obfuscated Vendor identity YY' generated in Phase 1 is the PRISM authentication tag (YtagYtag).
At the ORK: prismIDi=YxiYxiH(v)DH(P,q)prismID_i = Y' \cdot x_i \equiv Y \cdot x_i \cdot \textsf{H}(v) \cdot \textsf{DH}(P , q)
At the SWE (Algorithm 3): The SWE interpolates the partial responses, multiplies by DH(Q,k)\textsf{DH}(Q , k), and divides by uu: prismAUTH=(i=1tprismIDi)DH(Q,k)u1YxprismAUTH = \left(\sum_{i=1}^{t} prismID_i\right) \cdot \textsf{DH}(Q , k) \cdot u^{-1} \equiv Y \cdot x
The obfuscation factors cancel: DH(Q,k)/(DH(v)×DH(P,q)×DH(K,q))\textsf{DH}(Q , k) / (\textsf{DH}(v) \times \textsf{DH}(P , q) \times \textsf{DH}(K , q)) simplifies because DH(Q,k)=DH(K,q)\textsf{DH}(Q , k) = \textsf{DH}(K , q), yielding YxY \cdot x - the user's master CMK public key multiplied by the VVK.

Phase 3b: BlindSig Flow (Non-PRISM Operations)

For threshold operations that produce a result for the Vendor (e.g., decryption, signing), the ORK encrypts the output using the Payer-derived VENkeyVENkey'.
At the ORK: The ORK derives the symmetric encryption key by removing its own blinding from VENkeyVENkey': VENKey=DH(VENkey,(oizi)1)H(GDH(Q,DH(P,v)))VENKey = \textsf{DH}\left(VENkey' , (o_i \cdot z_i)^{-1}\right) \equiv \textsf{H}\left(G \cdot \textsf{DH}(Q , \textsf{DH}(P , v))\right)
The ORK encrypts: encBlindMsgi=blindSigi×VENKeyencBlindMsg_i = blindSig_i \times VENKey.
At the SWE: The SWE interpolates: encBlindMsg=encBlindMsgiencBlindMsg = \sum encBlindMsg_i, unblinds, and forwards (encMsg,Q)(encMsg, Q) to the Vendor.
At the Vendor: The Vendor independently derives the same key: VENKey=H(GDH(Q,DH(P,v)))VENKey = \textsf{H}(G \cdot \textsf{DH}(Q , \textsf{DH}(P , v))) and decrypts: blindSig=encMsg×VENKey1blindSig = encMsg \times VENKey^{-1}.
The ORK never learns the Vendor's identity. The Vendor never learns the ORK's identity. Both independently derive the same symmetric key through the Payer's public key PP.

Phase 4: Monthly Bulk Redemption

ORKs accumulate RedemptProofs and settle in monthly bulk batches.
Step 4.1 - ORK Aggregation. Each ORK aggregates its validated vouchers hierarchically: by Payer cluster, then by action type, then by individual validation. It computes Z=ziZ = \sum z_i (the sum of all blinding factors for the period). For each aggregated record, it signs the payment instruction with the voucher private key: payInstAuth=voucherPrivateKey.sign(redemption.key,paymentDest)payInstAuth = voucherPrivateKey.\textsf{sign}(redemption.key, paymentDest). It transmits (redemptionAgg,paymentDest,payInstAuth,Z)(redemptionAgg, paymentDest, payInstAuth, Z) to the relevant Payer cluster.
Step 4.2 - Payer Verification and Settlement. The Payer executes six verification checks:
  1. Verify all vouchers signed by an approved Payer cluster member.
  2. Verify no voucher older than 3 months.
  3. Match each voucher's digest to recorded validations.
  4. Verify each voucher's payment is assigned to exactly one payment instruction.
  5. Deobfuscate the ORK identity: O=(Oi)×Z1O = (\sum O'_i) \times Z^{-1}.
  6. Verify: VerifySIGNNi(ProofSign1..j,timestamp1..j,"action"1..j,O)\textsf{VerifySIGN}_{N_i}(ProofSign_{1..j}, timestamp_{1..j}, \text{"action"}_{1..j}, O).
The Payer returns ApprovedDigestList[], DisputedDigestList[], and a payment confirmation report. It processes the incentivisation settlement, syncs the cluster, and culls matched records.
Step 4.3 - Dispute Resolution. For disputed vouchers, the ORK resubmits the full chain: (voucherFinal[],RedemptContent[],RedemptProof[])(voucherFinal[], RedemptContent[], RedemptProof[]). The Payer evaluates: check for duplicates, identify rogue ORK, identify rogue VRK/Vendor, identify rogue Payer. If all checks are exhausted, escalation to a human operator occurs. The Payer sends reports and any excess bill to the Vendor (TideCloak).
Step 4.4 - Purging. The ORK purges paid voucher records. The Payer archives settled ledgers.

Algorithms

Privacy and Threat Analysis

Privacy Properties

PropertyMechanism
Vendor → ORK UnlinkabilityBlind 1: SWE applies zi=DH(Oi,k)z_i = \textsf{DH}(O_i , k). Vendor sees OiO'_i, cannot derive OiO_i without kk.
ORK → Vendor UnlinkabilityBlind 2: Vendor obfuscates with Y=YH(v)DH(P,q)Y' = Y \cdot \textsf{H}(v) \cdot \textsf{DH}(P , q). ORK sees YY', cannot derive YY.
Payer → VVK IsolationPayer recovers Y=YH(v)Y'' = Y \cdot \textsf{H}(v). Without vv, cannot derive YY.
User ID AnonymizationBlind 3: ORK computes UID=Y^uidUID' = \hat{Y} \cdot uid. Payer derives uidanonuid_{anon}: unique per user per vendor, unlinkable to uiduid.
Cross-Cycle Unlinkabilityuidanonuid_{anon} incorporates rotating vv. Changes completely each billing cycle.
Post-Generation Immutabilitys1is1_i locks voucher parameters. SWE routes but cannot forge (lacks vv).
Non-ReplayabilityUnique nonces (R1,R2)(R1, R2) per voucher. Payer indexes R1 digest, rejects duplicates.

Known Threats and Mitigations

Threat VectorImpactMitigation
Vendor + SWE collusion - map user CMK ID to Vendor user IDLowSWE SRI verification and rehoming (Article 7).
Vendor + SWE collusion - map users to specific ORK nodesLowSWE SRI verification of blinding algorithms.
ORK + Payer collusion - trace User → Vendor → ORK → Payer flowLowPayer nodes exclusively operated by Tide Foundation.
ORK + Payer collusion - unobfuscate Vendor master IDLowRequires deep infrastructure-level collusion.
Malicious Payer node - approve unfunded operations, accrue debtHighPayer nodes are permissioned, Tide-operated only.
Malicious Payer node - map obfuscated ORK IPs to VendorsMediumPayer operation heavily audited.
Vendor + User + ORK + Payer collusion - inflate billing to defraud honest ORKVery HighRequires four-party collusion; mitigated by dispute resolution and forensic logging.
Vendor + Payer collusion - map Vendor traffic to ORK nodesLowPayer nodes highly scrutinized.

Layer Traversal

LayerHow This Protocol Engages It
LegitimacyPayer validates VRK dates and balance. Facility linkage to VVK via semi-blind signature.
AuthorityVVK signs VRK during onboarding. VRK signs each voucher.
AgencyVoucher gates every Agency Layer operation. ORKs execute only after Payer validation. PRISM tag derived from voucher obfuscation.
SettlementPrimary layer. Credit Facility management, voucher allocation, real-time validation, monthly redemption.

Security Properties

PropertyMechanismAssumption
Triple-blindingThree independent obfuscation layers (ORK identity, Vendor identity, User ID), each peelable only by intended recipient.DH security, hash collision resistance.
Signature bindingCombined s=s1+s2s = s1 + s2 binds Vendor and ORK signatures to identical YY', OO', and action via joint hash term.EdDSA unforgeability.
Slip-knot deobfuscationPayer peels one layer (YYY' \to Y'') without accessing other blinds.Payer key security.
Non-replayabilityDigest-indexed uniqueness at Payer.Payer database integrity.
Balance enforcementPer-VRK credit tracking. Negative balance → rejection.Payer database integrity.
Licensing enforcementAnonymized MAU counting per YY''. Exceeded license → rejection.-
PRISM fusionYY' is simultaneously the PRISM YtagYtag. Zero additional protocol rounds.-
Cross-cycle unlinkabilityVRK rotation changes YY'' and uidanonuid_{anon} per billing cycle.VRK rotation integrity.
BlindSig channelORK and Vendor independently derive VENKeyVENKey via Payer public key. Neither learns the other's identity.DH security.

Call Summary

CallDirectionPhasePurpose
CreateLicenseVendor → Payer0Register provisional credit facility with VRK.
UpdateLicenseVendor → Payer0Update facility identity to YY'' after VVK generation.
GetVouchersSWE → Vendor1Request funded vouchers with blinded ORK keys (BlurPORKi, ActionRequest, BlurerK).
VoucherResponseVendor → SWE1Return voucherPacks[], QPub, PayerPub, YHat, UDeObf.
VoucherRequestSWE → ORK1Distribute per-ORK VoucherPack with QPub, PayerPublic, BlurerK, YHat.
findPayerORK → mimDB1Locate Payer cluster for validation.
ValidateVoucherORK → Payer (one from cluster)1-2Submit voucherFinal + QPub for validation.
redemptContent, redemptProof, obfgVVKPayer → ORK2Return validation data, Payer signature, and VENkeyVENkey'.
prismID_iORK → SWE3Return PRISM partial (authentication flow).
encBlindMsg_iORK → SWE3bReturn encrypted result (BlindSig flow).
redemptionAggORK → Payer4Monthly bulk settlement request.

References

Related Protocol Articles: