Key Lifecycle/PROTOCOL

Account Creation / KeyGen

The DKG registration ceremony that establishes a user's CMK and PRISM shards across the ORK swarm via Nested Shamir Secret Sharing - keys born fragmented, with no dealer and no moment of assembly.

35 min read

Overview

This document specifies the Account Creation and Distributed Key Generation (DKG) ceremony - the registration protocol that establishes the preconditions for every subsequent operation in the Tide architecture. The ceremony generates a user's Consumer Master Key (CMK) and PRISM verification secret via Nested Shamir Secret Sharing (Hall, J. L., Hertzog, Y., et al., 2023), distributing them as Shamir shards across a 20-node ORK swarm with a 14-of-20 threshold. There is no trusted dealer. At no point does any entity compute, possess, or transmit the complete CMK or PRISM secret.
The protocol executes in eight phases across two sequential DKG calls (GenShard, SetShard), a test authentication, a vendor IAM registration, and a two-phase commit to the mimDB (Mimir Database - The Fabric's synced repository). The resulting Accountable Group Signature proves correct generation without revealing secret material.
While this article focuses on CMK and PRISM generation during user self-registration, the identical Nested Shamir DKG construction generates VVK and CVK keys. The Authority Layer manages all resulting shards with strict key-type agnosticism.
Loading diagram...

Preconditions

ConditionDetail
UserHas initiated a login/registration request from the vendor application. Provides username, password, and recovery email addresses.
TideCloakPossesses a valid gVVK, a valid VRK (for current payment cycle), and SignedSettings (registration policies, callback URLs, self-registration option, Ragnarok option) signed by gVVK.
FabricSufficient healthy, staked ORK nodes available to form a 20-node swarm. mimDB (Mimir Database - The Fabric's synced repository) registry operational.
ORK nodesEach possesses pre-established private keys aesKey_i, mSecORK_i, and mgORK_i.

Protocol Flow

Phase 0: OIDC Redirect and SWE Initialization

The vendor site requests an OIDC authorization code. TideCloak generates a voucher via VRK and redirects to a preferred Home-ORK, which serves the Secure Web Enclave (SWE). The SWE verifies SignedSettings are signed by gVVK.
The user provides their username and password. The SWE computes uidH(username)\text{uid} \leftarrow H(\text{username}) and generates a non-extractable session key pair (u,U)(u, U) via WebCrypto (extractable: false).

Phase 1: Username Reservation

Loading diagram...
The proximity-based ordering (SHA256-HMAC(mIdORKi,uid),ascending)(\text{SHA256-HMAC}(mIdORK_i, \text{uid}), \text{ascending}) is deterministic and globally consistent. The SWE selects the reservation with the lowest proximity score (most proximate) as the authorization token (auth) for subsequent phases. Reservations are valid for 30 seconds.

Phase 2: Distributed Key Generation - GenShard

Loading diagram...
The SWE sends a single blinded multiplier gBlurPass - the password-derived point obfuscated by a random scalar jj. Each ORK applies (TOPRF) its PRISM sub-secret to this blinded point, enabling the SWE to derive the aggregate PRISM verifier base gPRISMAuth without any ORK learning the password.
Note on identity derivation: The vendor-specific identity (VUID, gCMKAuth) is not derived during key generation. These values are produced during the test round (Phase 4) via the voucher-based identity recovery mechanism specified in Protocol: CMK Authentication. This architectural separation ensures that identity binding is coupled to the authentication ceremony, not to key generation - making the DKG construction purely key-type agnostic.

Phase 3: Distributed Key Generation - SetShard

Loading diagram...
Each ORK's final shards (CMKY, PRISMY) are the sums of all received peer sub-shards plus its own retained sub-shard. The complete CMK and PRISM secrets were never computed by any entity.
For ORKs that did not respond during GenShard, participating ORKs package their intended shards as SafeKeep records - encrypted under the pairwise ECDH key with the absent ORK's public key. These records are written during Commit and enable future shard retrieval via Protocol: Key Healing.

Phase 4: Test round

The SWE executes a full BYOiD authentication ceremony (as specified in Protocol: CMK Authentication) of the uncommitted state records. This serves two purposes:
  1. Functional verification. The PRISM evaluation and double-blind threshold signature prove the DKG output is mathematically sound end-to-end.
  2. Identity derivation. The BYOiD ceremony's voucher-based identity recovery produces gUserCMK - the user's anonymised CMK public key projected through the vendor's identity space. From this, the SWE derives VUID (vendor-specific user identifier) and gCMKAuth (vendor-specific user authentication public key) as specified in the CMK Authentication protocol (Steps 2.2-2.3). These values are required for Phase 6.

Phase 5: Commit

Loading diagram...
The mimDB independently verifies the Accountable Group Signature before accepting the write. Any party can subsequently audit the mimDB to verify that generation was performed correctly by the declared swarm, without access to private key material.
Loading diagram...

Phase 6: IAM Registration

The TideCloak adapter on the vendor's callback URL registers the user with the TideCloak's instance, providing VUID and gCMKAuth derived in Phase 4. TideCloak creates the user profile and assigns default roles. TideCloak forwards the role assignments to the VVK ORK swarm, which validates the user's blind signature, confirms registration policies, and certifies the user by producing a threshold signature over the assignment proof. A resulting PKCE verifies the full chain.

Phase 7: OIDC Completion

The vendor exchanges the code generated in Phase 6 for the final JWT.

Algorithms

Algorithm 1

Algorithm 2

Algorithm 3

Algorithm 4

Notation Reference

SymbolDescription
G\mathcal{G}Generator point on Curve25519 / Edwards25519 twisted Edwards for signatures
AbA \cdot bScalar-point multiplication
H()H(\cdot)SHA-256 unless stated otherwise
DH(a,B)\textsf{DH}(a, B)Diffie-Hellman: BaB \cdot a
H2P()\textsf{H2P}(\cdot)Hash-to-point (Elligator 2 on Curve25519)
uid\text{uid}User identifier: uidH(username)\text{uid} \leftarrow H(\text{username})
CMKiCMK_i, PRISMiPRISM_iORK ii's locally generated random sub-secrets for the DKG
gCMKigCMK_i, gPRISMigPRISM_iORK ii's public key contributions (GCMKi\mathcal{G} \cdot CMK_i, GPRISMi\mathcal{G} \cdot PRISM_i)
σijCMK\sigma^{CMK}_{i \to j}ORK ii's Shamir sub-shard of CMKiCMK_i destined for ORK jj
CMKYiCMKY_i, PRISMYiPRISMY_iORK ii's final combined Shamir shards (sum of all received sub-shards + own)
gCMKgCMK, gPRISMgPRISMAggregate public keys (sum of all contributions). gCMK=GxgCMK = \mathcal{G} \cdot x where xx is the joint CMK
PRISMAuthiPRISMAuth_iPer-ORK PRISM verifier: DH(mSecORKi,gPRISMAuth)\textsf{DH}(mSecORK_i, gPRISMAuth)
mSecORKimSecORK_iORK ii's long-term private key: SHA-512(TideKeyi).last32bytes\textsf{SHA-512}(TideKey_i).\text{last32bytes}
mDigestmDigestCurrent key's Accountable Group Signature digest of participating ORKS, as taken from the Home ORK's TWELVE-MAP response
mgORKimgORK_iORK ii's long-term public key: GmSecORKi\mathcal{G} \cdot mSecORK_i
aesKeyiaesKey_iORK ii's symmetric key: SHA-512(TideKeyi).first32bytes\textsf{SHA-512}(TideKey_i).\text{first32bytes}
ENCA(B)\textsf{ENC}_{A}(B)X25519-based El-Gamal encryption of message BB with public key AA
ECDHijECDH_{ij}Pairwise shared secret: DH(mSecORKi,mgORKj)\textsf{DH}(mSecORK_i, mgORK_j)
AES_DECa(B)\textsf{AES\_DEC}_{a}(B)AES256 decryption of message BB with key aa
gSessKeyPubgSessKeyPubSWE's session public key (non-extractable via WebCrypto)
nnSwarm size (20)
ttThreshold (14)
IICount of ORKs that responded (tInt \leq I \leq n)
gVVKgVVK, gVRKgVRKVendor long-term and ephemeral payment/session public keys
gBlurPassgBlurPassBlinded password point: H2P(H(password))j\textsf{H2P}(H(password)) \cdot j
ORKsBitwiseORKsBitwiseBitwise array of ORKs that participated in the original ceremony
Note: VUID, gCMKAuth, and CMKmul are derived during the test sign-in (Phase 4) via the voucher-based identity recovery mechanism. See Protocol: CMK Authentication, Steps 2.2-2.3.

Actors and Trust Assumptions

ActorDescriptionTrust Assumption
UserProvides username, password, optional recovery emails-
Vendor SiteInitiates OIDC redirectPotentially compromised
Secure Web Enclave (SWE)Browser-based cryptographic agent. Orchestrates ceremony, blinds inputs, routes encrypted shards, aggregates results. SRI-verifiable.Potentially adversarial. Cannot extract key material from ORKs or force valid DKG for a different user.
Home-ORKEntry point. Provides ORK directory, checks username availability.No elevated trust. Public metadata only.
CMK ORKs (swarm, n=20n=20)Independently operated nodes that compute and hold CMK + PRISM shards.Up to 13 may be actively malicious or colluding. Mostly operated by different organizations.
Reservation ORKsTemporarily reserve username (for 30s). Determined by proximity sort.Short-lived reservation authority. Not necessarily in the CMK swarm.
TideCloakVendor IAM server. Creates user, stores VUID + gCMKAuth.Potentially compromised. No private key material.
VVK ORKsSeparate swarm for vendor signing key. Signs user assignment proof.Same as CMK ORKs.
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.

Layer Traversal

LayerHow the Protocol Engages It
LegitimacyECDH session establishment, voucher validation for reservation and GenShard, SRI verification of SWE.
AuthorityNested Shamir DKG: shard generation, splitting, distribution, aggregation. ORKs store CMK and PRISM shards identically - key-type agnostic.
AgencyBlinded multiplication gBlurPassPRISMi\text{gBlurPass} \cdot PRISM_i (purpose-specific MPC). Test sign-in exercises full Agency Layer (PRISM + double-blind signature + voucher-based identity recovery).
SettlementVouchers fund reservation, GenShard, and Commit. During test sign-in, voucher-derived values (Ytag, qPub, uDeObf) enable identity derivation.

Security Properties

PropertyMechanismAssumption
"Born Fragmented" DKGNested Shamir: each ORK generates independent randomness. The joint key x=CMKix = \sum CMK_i is never computed by any entity.Threshold (< 14 compromised)
Fraud detectionEach ORK verifies Zero-Knowledge proofs (GSj=?Rj+H(Rj,Aj,τj)Aj\mathcal{G} \cdot S_j \stackrel{?}{=} R_j + H(R_j, \mathcal{A}_j, \tau_j) \cdot \mathcal{A}_j) against all peers' declared contributions before accepting shards.DLP hardness
Accountable Generation proofComposite group signature over PermissionMessage, verified against gCMK+mgORKigCMK + \sum mgORK_i. Written to mimDB. Auditable by any party.DLP. Registry integrity.
Atomicity (two-phase commit)All ORK state held as Uncommitted until SWE provides aggregate signature and mimDB accepts. Uncommitted state auto-purged after 30 minutes.-
Transport-independent securityPeer shards encrypted via pairwise ECDH. SWE responses encrypted via session keys. No reliance on TLS.Secure RNG for ECDH
Malicious SWE containmentSWE routes encrypted shards but cannot read them (ECDH between ORK pairs). Cannot force generation for arbitrary uid without valid reservation signature.AES-256 strength
Fault toleranceOnly tt (14) ORKs required. SafeKeep records enable absent ORKs to retrieve shards later.-
SafeKeep forward securityRecords encrypted under pairwise ECDH with absent ORK's public key. Signed by originating ORK. mimDB verifies signature before storing.AES-256. ORK key integrity.
Race condition preventionDeterministic proximity sort assigns reservation to 5 closest ORKs. 30-second signed reservations.Uniform hash distribution
Password blindingORKs compute gBlurPassPRISMi\text{gBlurPass} \cdot PRISM_i without learning the password or the unblinded point.Blinding scalar randomness
Identity derivation separationVUID / gCMKAuth derived during authentication (Phase 4), not during DKG. DKG is purely key-type agnostic.Voucher mechanism integrity

Call Summary

CallDirectionPurpose
findReserversSWE → Home-ORKCheck username availability, retrieve proximity-sorted ORK list
requestVouchersSWE → TideCloakObtain authorization vouchers for reservation
reserveUserIDSWE → 5 Reservation ORKsRequest signed, short-lived username reservation
GenCMKShardSWE → all nn ORKsInitiate DKG. Distribute blinded PRISM multiplier. ORKs execute Algorithm 1.
SetCMKShardSWE → II ORKsDistribute encrypted peer shards. ORKs execute Algorithms 2-4. Store Uncommitted.
Convert + AuthenticateSWE → II ORKsTest sign-in: BYOiD ceremony on uncommitted state. Also derives VUID, gCMKAuth.
SignProofTideCloak → VVK ORKsVVK swarm signs user assignment proof
SignJWTTideCloak → VVK ORKsTest JWT generation to verify VVK chain
CommitSWE → II ORKsSubmit aggregate signature. Transition Uncommitted → Committed. mimDB write.
RegisterNewUserVendor → TideCloakRegister VUID and gCMKAuth with vendor IAM

References

  • Hall, J. L., Hertzog, Y., et al. (2023). Manifesting Unobtainable Secrets: Threshold Elliptic Curve Key Generation using Nested Shamir Secret Sharing. arXiv:2309.00915. Presented at AustMS 2021.
  • Wang, F., Hertzog, Y., et al. (2023). Towards Zero Trust Authentication in Critical Industrial Infrastructures with PRISM. ACNS 2023 Workshops, LNCS 13907. Springer, Cham.
  • Tide Developer Documentation: docs.tidecloak.com
Related Protocol Articles: