Overview
PRISM is a Threshold Oblivious Pseudorandom Function (TOPRF) that replaces stored password hashes with a distributed, zero-knowledge, live computation. The password verification function cannot be constructed without real-time interaction with a threshold of independently operated nodes - eliminating the entire attack class of offline brute-force against exfiltrated credential stores.
The construction extends the OPRF primitive formalized in RFC 9497 into a threshold setting across the ORK network. The formal analysis is published in "Towards Zero Trust Authentication in Critical Industrial Infrastructures with PRISM" (Springer, CIMSS2023).
PRISM operates as one of two parallel sub-protocols within the CMK Authentication Ceremony (Protocol: CMK Authentication). Both share the same two API round-trips. This document specifies PRISM in isolation; the ceremony orchestration is described separately.
Loading diagram...
Preconditions
Established during user registration (Protocol: Account Creation / KeyGen).
Per-ORK stored state:
- - Shamir shard of joint PRISM secret . Reconstruction requires shards; individual shards reveal nothing about the password.
- - PRISM verifier, derived from both the ORK's private key and the correct password-PRISM product. Unique per ORK. Rotates on password change. One compromised verifier is useless without the distributed PRISM product.
- - ORK's symmetric key (for self-sealing challenges).
- , - ORK's long-term key pair.
ORK isolation property: ORKs store no metadata about which vendors a user is associated with or how many. The PRISM shards carry no semantic information about their purpose.
Actors & Trust Assumptions
| Actor | Role | Trust Assumption |
|---|---|---|
| Secure Web Enclave | User's browser-side cryptographic agent. Generates , sends obfuscated password, performs interpolation and challenge decryption. | Potentially adversarial. An adversary using a malicious SWE learns meaningless (wrong PRISM product) but not or any individual . Cannot offline attack passwords remotely. Honest user using a malicious SWE can get password phished - SRI is the mitigation for that. |
| CMK ORK Swarm (20 nodes) | Each applies its shard to the obfuscated input. Constructs and verifies challenges. | Malicious ORK learns (obfuscated password point) but not Y. Can't offline attack . Up to 13 may be safely malicious/colluding. Each operated independently. |
| Settlement Layer | Funds each ORK call via one-time voucher. | Provides auxiliary deobfuscation values (, , ). |
Protocol Flow
Convert: SWE → All ORKs
Loading diagram...
The ORK learns nothing about - it applies to the already-obfuscated point . The result is doubly obscured by (SWE) and (this ORK).
The challenge has three nested encryption layers, each serving a distinct security function:
text
┌──────────────────────────────────────────────────────────┐
│ OUTER: AES under v_i (PRISM verifier) │
│ Only the correct password holder can strip this layer │
│ │
│ ┌────────────────────────────────────────────────────┐ │
│ │ MIDDLE: AES under DH(mSecORK_i, U) │ │
│ │ Binds to this browser session │ │
│ │ │ │
│ │ ┌──────────────────────────────────────────────┐ │ │
│ │ │ INNER: AES under aesKey_i │ │ │
│ │ │ Self-sealed - only this ORK can reopen │ │ │
│ │ │ │ │ │
│ │ │ uid, purpose, t_i, ext_i, U │ │ │
│ │ └──────────────────────────────────────────────┘ │ │
│ └────────────────────────────────────────────────────┘ │
│ │
│ t_i, ext_i (timing metadata) │
└──────────────────────────────────────────────────────────┘The expiry window is randomized per-ORK: 1-3 hours if remember-me is set, 30-90 seconds otherwise.
SWE Processing: Threshold Reconstruction
The SWE waits up to 1 second for all or 5 seconds for the first responses, recording participating ORKs in a bitwise array.
The SWE learns but not any individual . No ORK learned . The obfuscator is cleanly removed. If the password was wrong, the derived value is incorrect and all subsequent steps fail.
SWE Processing: Verifier Derivation and Challenge Decryption
By ECDH commutativity: , so when the password is correct. If the password was wrong, , the outer-layer decryption produces garbage, and all subsequent layers fail. The SWE cannot distinguish a wrong password from a corrupted response.
The inner layer (self-sealed under ) remains opaque to the SWE - only the originating ORK can open it.
Authenticate: SWE → Participating ORKs
Loading diagram...
Each ORK retrieves and destroys its cache entry indexed by , then decrypts the self-sealed capsule and verifies uid, session binding, and expiry. A wrong password means the SWE could never have correctly decrypted layers to recover the authentic , so the ORK's verification fails.
Algorithms
Notation Reference
| Symbol | Description |
|---|---|
| Generator point on Curve25519 | |
| Scalar-point multiplication (point , scalar ) | |
| SHA-256 unless stated otherwise | |
| Hash-to-point via Elligator 2 on Curve25519 | |
| Diffie-Hellman: | |
| AES256 encryption of b with key (IV is omitted for simplicity) | |
| AES256 decryption of b with key | |
| User's password | |
| Password-derived curve point: | |
| User identifier: | |
| , | Joint PRISM secret , ORK 's PRISM shard |
| Random obfuscator scalar (SWE-generated) | |
| Obfuscated password point: | |
| ORK 's long-term private key | |
| ORK 's long-term public key: | |
| ORK 's symmetric key | |
| Per-ORK PRISM verifier: | |
| , | Network session public/private key (non-extractable via WebCrypto) |
| Total ORKs in swarm (currently 20) | |
| Threshold (currently 14) | |
| Number of responding ORKs () | |
| Lagrange coefficient for ORK |
Layer Traversal
| Layer | How PRISM Engages It |
|---|---|
| Legitimacy | Voucher validates each Convert call. ECDH between and qualifies the channel. |
| Authority | Each ORK retrieves its PRISM shard - undifferentiated key material, agnostic to purpose. |
| Agency | The TOPRF evaluation () and challenge construction are the purpose-specific operations. |
| Settlement | Voucher funds participation. Returns auxiliary values (, , ) used by the parallel CMK sub-protocol. |
Security Properties
| Property | Mechanism | Assumption |
|---|---|---|
| Password never leaves browser | obfuscated by before transmission; ORKs see only | Obfuscator cryptographically random |
| No party learns the password | PRISM: ORKs apply to obfuscated point; SWE reconstructs but not individual ; ORKs never see | Threshold ( compromised). PRISM security |
| prevents SWE offline attack | SWE reconstructs but because and the SWE doesn't know , offline attack can't be performed | DLP security |
| Per-ORK verifiers prevent offline attack | Each bound to ORK 's private key; rotates on password change; one compromised ORK yields one verifier useless without the PRISM product | DLP hardness on Curve25519. Threshold assumption |
| Offline brute-force inapplicable | Verification function is emergent property of live threshold interaction; cannot be replicated offline; each guess requires network round-trip to nodes | Network rate limiting. Threshold assumption |
| Wrong password indistinguishable | Outer-layer decryption fails silently; SWE cannot determine which layer failed | AES ciphertext indistinguishability |
| Replay resistance | Cache entry indexed by destroyed on use; challenge triple-encrypted and time-bounded | ORK correctly destroys entries |
| Session binding | Middle layer encrypted under ; is non-extractable via WebCrypto | WebCrypto API integrity |
| Mutual password proof | SWE proves knowledge by decrypting challenges; ORKs confirm by verifying self-sealed capsule | Challenge construction integrity |
| 14-of-20 fault tolerance | Any ORKs suffice for PRISM reconstruction | - |
| 13-of-20 security tolerance | Up to ORKs may be actively malicious | Threshold assumption |
Call Summary
| Call | Direction | Payload (PRISM component) | State Change |
|---|---|---|---|
| Convert | SWE → all ORKs | Send: , , , voucher. Receive: , | ORK creates cache entry indexed by |
| Authenticate | SWE → participating ORKs | Send: . Receive: ack or fail | ORK destroys cache entry |
Between calls, the SWE performs all interpolation, verifier derivation, and challenge decryption client-side.
References
- Wang, F., Hertzog, Y., et al. (2023). Towards Zero Trust Authentication in Critical Industrial Infrastructures with PRISM. ACNS 2023 Workshops, LNCS 13907. Springer, Cham.
- RFC 9497 - Oblivious Pseudorandom Functions (OPRFs) Using Prime-Order Groups. IETF, 2023.
- Tide Developer Documentation: docs.tidecloak.com
Related Protocol Articles:
- Protocol: Double-Blind TSS - The companion sub-protocol producing vendor-unlinkable identity tokens.
- Protocol: CMK Authentication - How PRISM and Double-Blind TSS are orchestrated into a 2-round-trip flow.
- Protocol: Account Creation / KeyGen - Registration ceremony establishing PRISM shards and verifiers.