BYOiD/PROTOCOL

PRISM Password Change

Rotating the PRISM distributed password-verification secret across the ORK swarm without exposing old or new password. CMK untouched. Per-ORK verifiers atomically updated via two-phase commit.

25 min read

Overview

This document specifies the PRISM Password Change ceremony - the protocol for rotating a user's PRISM secret (the distributed cryptographic salt for password verification) without exposing the old password, the new password, or the complete PRISM secret to any single entity. Only the PRISM secret changes. The CMK, gCMK, VUID, gCMKAuth, and swarm membership are entirely untouched.
The protocol requires dual authorization: the user proves knowledge of the current password via the PRISM (Phase 1), and the CMK authorizes the state transition via an Accountable Group Signature (Phases 3/5). The ceremony reuses the Nested Shamir DKG construction from Protocol: Account Creation / KeyGen, scoped to PRISM only (numKeys = 1), with the existing swarm loaded from ORK local storage (mIdORK_ij = null).
Loading diagram...

Preconditions

ConditionDetail
UserPossesses current username, current password, and desired new password.
ORK swarmEach ORK holds a committed record for this uiduid containing: CMKiCMK_i (unchanged), gCMKgCMK (unchanged), PRISMiPRISM_i (to be replaced), PRISMAuthiPRISMAuth_i (to be replaced). Established during Protocol: Account Creation / KeyGen.
NetworkHome ORK reachable. At least tt (14) ORKs in the swarm available.

Protocol Flow

Phase 1: Authentication Preamble (ConvertPass)

Loading diagram...
The ConvertPass call is a partial BYOiD ceremony - the PRISM evaluation and self-request generation from Protocol: CMK Authentication, without the blind signature or JWT issuance. An ORK cannot distinguish this from a standard login preamble.
If the password is wrong, the interpolated gPassPRISM is incorrect, the derived verifiers fail, and encRequest_i decryption produces garbage. The Secure Web Enclave (SWE) cannot proceed.

Phases 2-3: PRISM DKG (UpdateShard + SetPRISM)

Loading diagram...
Key differences from Account Creation DKG: numKeys = 1 (PRISM only, CMK untouched). mIdORK_ij = null (swarm loaded from ORK local storage). Authorization via selfRequest_i (from ConvertPass) rather than reservation token.
Active vs. Passive ORKs: An ORK that participated in ConvertPass and holds a valid selfRequest_i is "active" - it contributes both PRISM shares and a partial group signature. An ORK that came online between Phases 1 and 2 (missing ConvertPass) is "passive" - it contributes PRISM shares to maintain threshold health but sets S_i = null and does not participate in the Accountable Group Signature. The ORKsBitwise array is updated during SetPRISM based on each peer's activeOrigin flag to reflect this distinction.
CMK authorizes the PRISM change. The group signature uses keyAuth = gCMK and each active ORK signs with mSecORK_i + CMK_i, not the PRISM shard. The old password proved identity (Phase 1); the CMK proves the swarm authorized the state transition.

Phase 4: Test Sign-In

The SWE executes a BYOiD SignIn() using the new password against the uncommitted PRISM state. Successful completion proves the new PRISM secret is correctly generated, the new per-ORK verifiers match the new password-PRISM product, and the unchanged CMK still processes blind signatures correctly.
If the test fails, uncommitted state times out and the old password remains in effect.

Phase 5: Commit

Loading diagram...
The mimDB (Mimir Database - The Fabric's synced repository) AddOrUpdateKeyMAP operation updates the existing record in the TWELVE-MAP directory with the new digest mDigest that encapsulates the updated state of the participating ORKs, new signature S, and new gR. The gCMK and swarm membership mIdORK[1..n] are persisted unchanged. Any ORK that missed the ceremony will detect a digest mismatch and initiate Protocol: Key Healing to retrieve its new PRISM shard from the SafeKeep records.
Loading diagram...

Algorithms

Algorithm 1

Algorithm 2

Algorithm 3

Algorithm 4

Algorithm 5

Notation Reference

SymbolDescription
G\mathcal{G}Generator point on Curve25519 / specialized twisted Edwards BEd255475BEd255475 for double-blind 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)
gBlurPass\text{gBlurPass}, gBlurNewPass\text{gBlurNewPass}Blinded password points
r1r_1, r2r_2Blinding scalars for old and new password respectively
PRISMiPRISM_iORK ii's current PRISM shard (to be replaced)
PRISMiPRISM'_iORK ii's new random PRISM sub-secret contribution
PRISMYiPRISMY_iORK ii's final new PRISM share: σjiP+σiiP\sum \sigma^P_{j \to i} + \sigma^P_{i \to i}
PRISMAuthiPRISMAuth_iORK ii's current per-ORK PRISM verifier
newPRISMAuthinewPRISMAuth_iORK ii's new PRISM verifier: DH(mSecORKi,gNewPRISMAuth)\textsf{DH}(mSecORK_i, gNewPRISMAuth)
gPRISMAuthgPRISMAuthCurrent PRISM authentication base point
gNewPRISMAuthgNewPRISMAuthNew PRISM authentication base point: GH(gNewPasss)\mathcal{G} \cdot H(\text{gNewPass} \cdot s')
CMKiCMK_iORK ii's CMK shard (unchanged throughout)
gCMKgCMKUser's CMK public key (unchanged throughout)
mSecORKimSecORK_i, mgORKimgORK_iORK ii's long-term private/public key
mDigestmDigestCurrent key's Accountable Group Signature digest of participating ORKS, as taken from the Home ORK's TWELVE-MAP response: H(ORKsBitwise  PermissionMessage)H(ORKsBitwise\ \|\ PermissionMessage)
aesKeyiaesKey_iORK ii's symmetric key
AES_ENCa(B)\textsf{AES\_ENC}_{a}(B)AES256 encryption of message BB with key aa
ENCA(B)\textsf{ENC}_{A}(B)X25519-based El-Gamal encryption of message BB with public key AA
DECa(B)\textsf{DEC}_{a}(B)X25519-based El-Gamal decryption of message BB with private key aa
mIdORKimIdORK_iORK ii's public identifier
ECDHijECDH_{ij}Pairwise shared secret between ORKs ii and jj
gSessKeyPubgSessKeyPub (UU)SWE's session public key (non-extractable)
selfRequestiselfRequest_iPer-ORK authorization token from ConvertPass
activeORKactiveORKBoolean: did this ORK participate in ConvertPass?
nn, tt, IISwarm size (20), threshold (14), respondent count
SS, SiS_iAggregate / partial Accountable Group Signature
gRgR, gRigR_iAggregate / partial signature nonce
mDigestmDigestDigest: Current key's Accountable Group Signature digest of participating ORKS, as taken from the Home ORK's TWELVE-MAP response: H(ORKsBitwise  PermissionMessage)H(ORKsBitwise\ \|\ PermissionMessage)
ORKsBitwiseORKsBitwiseBitwise array of ORKs that participated in the original ceremony

Actors and Trust Assumptions

ActorDescriptionTrust Assumption
SWEBrowser cryptographic agent. Orchestrates ConvertPass, UpdateShard, SetPRISM, test sign-in, and Commit. Blinds both passwords.Potentially adversarial. Cannot execute password change without current password (PRISM enforces).
Home ORKEntry point. Provides swarm roster via the TWELVE-MAP lookup.No elevated trust. Public metadata only.
CMK ORKs (n=20n = 20)Hold CMK and PRISM shares (and backup SafeKeep packages). Generate new PRISM sub-secrets, combine shares, derive new verifiers, produce partial group signatures (if active).Up to 13 may collude. Each independently generates random PRISM contribution.
mimDBMimir Database - The Fabric's synced append-only repository. Stores updated key record. Independently verifies Accountable Group Signature.Registry integrity.
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 ConvertPass and DKG calls.
AuthorityPrimary layer for Phases 2-5. New PRISM shares generated, distributed, combined, and stored via Nested Shamir DKG. Old PRISM shares replaced atomically at commit. CMK shares untouched.
AgencyEngaged in Phase 1. The PRISM evaluation (gBlurPassPRISMi\text{gBlurPass} \cdot PRISM_i) is a purpose-specific MPC operation - the PRISM share is used to verify the old password before the Authority Layer replaces it.
SettlementVouchers fund ConvertPass and DKG operations.

Security Properties

PropertyMechanismAssumption
No password exposure (old)Old password blinded as gBlurPass=gPassr11\text{gBlurPass} = \text{gPass} \cdot r_1^{-1}. ORKs evaluate PRISM on blinded point.Blinding scalar randomness
No password exposure (new)New password blinded as gBlurNewPass=gNewPassr21\text{gBlurNewPass} = \text{gNewPass} \cdot r_2^{-1}. ORKs multiply by PRISMiPRISM'_i on blinded point.Blinding scalar randomness
CMK-based authorizationGroup signature uses keyAuth=gCMKkeyAuth = gCMK and CMKiCMK_i shards. Old password proves identity (Phase 1); CMK proves swarm authorization (Phase 3).DLP hardness
PRISM isolation from CMKnumKeys = 1 restricts DKG to PRISM. CMK shard, gCMK, VUID, gCMKAuth structurally unaffected.-
Per-ORK verifier uniquenessnewPRISMAuthi=DH(mSecORKi,gNewPRISMAuth)newPRISMAuth_i = \textsf{DH}(mSecORK_i, gNewPRISMAuth). Bound to ORK's private key. SWE never learns individual values.DLP on Curve25519
ORK learns neither passwordOld: sees gBlurPass\text{gBlurPass} (blinded). New: sees gBlurNewPass\text{gBlurNewPass} (blinded) and gNewPRISMAuthgNewPRISMAuth (one-way hash). Cannot extract passwords or compare old vs. new.DLP. Hash preimage resistance.
Active/passive ORK segregationOnly ORKs that verified old password (ConvertPass) participate in group signature. Passive ORKs contribute shares but not authorization.-
Fraud detectionSchnorr proof verification on each ORK's PRISM contribution before share acceptance. Failure → abort + SLA report.DLP hardness
Two-phase commitUncommitted state held until test sign-in succeeds and aggregate signature verified. Old PRISM remains authoritative until explicit commit. Auto-purge on timeout.-
Threshold security toleranceUp to 13 ORKs may collude without forging authorization or recovering the PRISM secret.Threshold t=14t = 14
Transport-independent securityPairwise ECDH encryption between ORKs. Session ECDH between SWE and each ORK. No reliance on TLS.ECDH + AES security
SafeKeep forward recoveryAbsent ORKs' new PRISM shares encrypted under pairwise ECDH, signed, stored on each ORK's local database. Retrievable via Protocol: Key Healing.AES-256. ORK key integrity.

Call Summary

CallDirectionPurpose
keyLookupSWE → Home ORKRetrieve swarm roster and gCMK
ConvertPassSWE → all nn ORKsPRISM OPRF on blinded old password. Returns triple-encrypted selfRequest tokens.
UpdateShardSWE → II ORKsPRISM DKG round 1. numKeys=1, mIdORKij=null, gBlurNewPass as multiplier, selfRequest_i as auth.
SetPRISMSWE → II ORKsPRISM DKG round 2. Distribute peer shares, aggregate, verify Schnorr proofs, derive new verifiers, produce group signature (active ORKs). Store uncommitted.
SignInSWE → II ORKsTest authentication with new password against uncommitted state.
CommitSWE → II ORKsSubmit aggregate signature. Verify, transition Uncommitted → Committed, write to mimDB.

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: