Overview
This document specifies the Authenticator App protocol - a device-bound, passwordless authentication flow that eliminates the browser as a credential surface. In standard PRISM authentication (Protocol: CMK Authentication), the user enters a password into the Secure Web Enclave (SWE). If the browser is compromised, the password could be captured before blinding. The Authenticator App removes this vector: the user authenticates via biometrics on a mobile device, the App executes threshold authentication against the CMK ORK swarm using a hardware-protected Device Key (DVK), and the resulting blind signature is relayed to the SWE through a transient Home ORK channel.
The App and the SWE cross-verify each other: the App checks Browser Key (BRK) signatures and the return URL TLD before proceeding; the SWE verifies the blind signature cryptographically. ORK responses use three-layer onion encryption, ensuring neither the Home ORK relay nor the browser can read the internal state.
The Authenticator App is a user-facing mobile application for identity verification. It must not be confused with Asgard, which is the backend Dealer Library for server-side cryptographic operations - a separate component.
Loading diagram...
Preconditions
On the Authenticator App
| Artifact | Description |
|---|---|
| DVK () | Device private key, protected by biometrics/secure element |
| Device public key | |
knownGBRK[] | List of recognized Browser Key public keys (device memory) |
On the CMK ORKs (per ORK )
| Artifact | Description |
|---|---|
| - per-ORK device verification value | |
| ORK 's shard of the user's CMK | |
| - user's CMK public key | |
| , | ORK long-term private/public keys |
| ORK symmetric key (derived from ORK seed) |
On TideCloak
| Artifact | Description |
|---|---|
| VUID | |
| gCMKAuth | |
| gVVK, gVRK | Vendor public keys; gVRK signed by VVK |
| SignedSettings | VVK-signed vendor configuration |
Setup Phase: Device Key Registration
One-time operation during account creation, password migration, or account recovery. For new Tide users, the App creates a fresh DVK and registers a new CMK identity (no password is ever set). For existing password-based users, the App verifies the user's password one final time, creates and stores the DVK, pairs the device with the existing CMK, and disables password authentication.
Loading diagram...
Each ORK validates the proof of possession, stores alongside the user's CMK shard, and computes . After setup, each ORK can verify the device key without any ORK knowing - the verification is DH-based, using each ORK's own private key with the device's public key.
Phases 1-3: Initialization, Channel, and Cross-Verification
Loading diagram...
Phase 1 - Non-obvious aspects
The
sessKeyProof creates a chain: BRK → VendorSessionKey → session identity → User auth. The sigAppReq proves the request came from the BRK holder where the user signed in. Together they prevent session hijack: a MITM cannot swap session keys without breaking the signature chain.If no BRK exists in localStorage (new browser, cleared cache), the SWE generates one. This triggers an "unfamiliar browser" warning in Phase 3.
Phase 3 - BRK cross-verification
The four checks form an anti-phishing defense. A phishing page cannot extract the legitimate BRK from another origin's localStorage - it must generate a new one. The App detects the unfamiliar key and exposes the fraudulent TLD. Over time, the App accumulates a list of trusted browser keys (the user's work laptop, home desktop), forming a decentralized device registry without any central authority.
After biometric confirmation unlocks the DVK, the App computes - a device-key signature over the session context.
Phase 4: Threshold Authentication from App
Loading diagram...
Onion encryption (3 layers - per ORK )
Each ORK wraps its PreSign response in three encryption layers:
text
┌─────────────────────────────────────────────────────────┐
│ OUTER: ENC_AppAuthᵢ(...) │
│ AppAuthᵢ = mgORKᵢ.DH(DVK) - only the App can peel │
│ │
│ ┌───────────────────────────────────────────────────┐ │
│ │ MIDDLE: ENC_prkECDHᵢ(...) │ │
│ │ prkECDHᵢ = NetworkSessionKey.pub.DH(mSecORKᵢ) │ │
│ │ Transit protection - bound to this session │ │
│ │ │ │
│ │ ┌─────────────────────────────────────────────┐ │ │
│ │ │ INNER: ENC_mAesORKᵢ(AuthRequest) │ │ │
│ │ │ ORK's own symmetric key - self-verification │ │ │
│ │ └─────────────────────────────────────────────┘ │ │
│ └───────────────────────────────────────────────────┘ │
│ │
│ timestampᵢ, extᵢ, userPRISMᵢ (alongside middle layer) │
└─────────────────────────────────────────────────────────┘The outer layer guarantees only the App (holding DVK) can access ORK responses. The middle layer binds to the NetworkSessionKey (transport protection). The inner layer is self-sealed - only the originating ORK can later decrypt it during the Authenticate phase (challenge solution proof).
Non-obvious aspects
Two-phase signing (PreSign → Authenticate): The separation with nonce commitment (ORK caches
gCMKRᵢ indexed by gSessKeyPub) mitigates Wagner birthday attacks on the blind signature scheme. The ORK destroys the cache entry on use, preventing replay.PRISM interpolation derivation chain: The App Lagrange-interpolates the
userPRISMᵢ partials to derive userPRISM, applies voucher-derived deobfuscation (qPub, uDeObf) to recover gUserCMK, then derives CMKmul, VUID, and gCMKAuth. This follows the same CMK authentication pattern specified in Protocol: CMK Authentication.Authenticate wait timing: The Authenticate call waits 5 seconds for the same ORKs that responded to PreSign (not a fresh threshold), since the cached nonce entries exist only on those nodes.
Phases 5-6: Delivery and Completion
The App encrypts all session artifacts (VUID, blind signature , gRmul, AuthToken, ORK routing data,
prkRequest_i values) under gSessKeyPub and relays the SWEEncryptedData through the Home-ORK channel with the negotiated ID. The Home-ORK cannot read the payload.The App updates its BRK list: if the BRK was new, it is added to
knownGBRK[] (evicting the oldest if at capacity); if already known, moved to the top of the LRU cache.The Secure Web Enclave (SWE) decrypts with
The SWE redirects to TideCloak with
sessKey, recovers selfRequestᵢ values by peeling the middle layer (DH(mgORKᵢ, SessKey)), and constructsVendorEncryptedData.The SWE redirects to TideCloak with
VendorEncryptedData.localStorage: The SWE stores the BRK (always, after App authentication). Session metadata (username, sessKey, ORK addresses, expiry) is stored only if
rememberMe is set. TideCloak proceeds with the standard VVK JWT signing flow (Article 5, Protocol: VVK JWT Signing).Algorithms
Notation Reference
| Symbol | Description |
|---|---|
| Generator point on the elliptic curve | |
| DVK / | Device private key (biometric-protected) |
| Device public key | |
| BRK / | Browser Key (persistent, localStorage) |
| Browser Key public point | |
BRK signature: (MATH); BRK.sign(appReq) (LLD) | |
| Device signature: | |
knownGBRK[] | App's list of recognized BRK public keys |
| NetworkSessionKey / | Ephemeral ORK communication key |
NetworkSessionKey public point (= gSessKeyPub) | |
| VendorSessionKey | Ephemeral key for BRK proof signing and App cross-verification |
sessKeyProof | |
| - per-ORK device verification | |
| - transit ECDH key | |
| - partial PRISM contribution | |
| / | Partial / final unblinded authentication signature |
| gCMKAuth | - user's authentication verifier |
| VUID | |
| SWEEncryptedData | Session artifacts encrypted under |
| VendorEncryptedData | Auth artifacts encrypted under |
Actors
| Actor | Description | Trust Assumption |
|---|---|---|
| User | Initiates login via browser, confirms via mobile biometrics. | Physically possesses registered device and passes biometric. |
| Secure Web Enclave (SWE) | Browser JS module. Generates session keys + BRK, opens relay channel, renders QR, receives blind signature. | Operates as untrusted dealer. App cross-verifies via BRK signatures and TLD. |
| Authenticator App | Mobile application. Holds DVK, maintains knownGBRK (encrypted at rest with DVK), enforces biometric gating, executes threshold auth. | Trusted with biometrics (device OS security). DVK protected by secure element. |
| Home ORK | Relay node facilitating the QR-mediated channel. | Untrusted relay. Forwards encrypted messages; cannot decrypt (lacks session keys). |
| CMK ORKs | 20 nodes holding CMK shards. Validate device identity, produce partial blind signatures. | Standard threshold trust ( may collude). Each validates independently. |
| TideCloak | Issues vouchers; receives VendorEncryptedData after completion. | Trustless agent. Cannot observe credentials or blind signature in cleartext. |
Layer Traversal
| Layer | How the 2FA Protocol Engages It |
|---|---|
| Legitimacy | BRK cross-verification establishes browser identity. Biometric gating establishes user presence. VVK-signed settings verification establishes vendor authenticity. |
| Authority | CMK ORKs hold user key shards. DVK-derived AppAuthKey enables per-ORK device verification without exposing the private key. |
| Agency | Primary layer. The App executes threshold authentication (partial blind signatures from CMK ORKs). Forseti governs ORK participation via voucher validation. |
| Settlement | Voucher acquisition from TideCloak. Each ORK validates voucher with "signin" action before participating. See Article 8: The Settlement Layer. |
Security Properties
| Property | Mechanism | Assumption |
|---|---|---|
| Credential-free browser | Password/biometric never enters the browser. SWE receives only the blind signature. | - |
| Device key binding | DVK protected by secure element + biometrics. Per-ORK AppAuthKey verification () confirms device without exposing . | Mobile OS secure element integrity |
| BRK cross-verification | Unfamiliar BRKs trigger user warning. Known BRKs provide device memory (decentralized device registry). | - |
| Anti-phishing | TLD extraction + BRK recognition. Phishing pages generate new BRKs (cannot extract from legitimate origin's localStorage) and expose fraudulent TLDs. | Browser same-origin policy |
| Onion encryption (3 layers) | Outer: AppAuth (device binding). Middle: prkECDH (transit). Inner: mAesORK (self-verification). Home ORK relay and SWE cannot read internal state. | ECDH and AES security |
| Transient channel | Home ORK channel is session-scoped. No persistent state after use. | - |
| Threshold resilience | 14 of 20 CMK ORKs must participate. Standard threshold assumptions. | compromised nodes |
| Two-phase signing | PreSign → Authenticate with nonce commitment (Committed=TRUE). Mitigates Wagner birthday attacks. Cache destroyed on use (replay prevention). | DLP hardness |
| Biometric gating | DVK access requires biometric confirmation. Two factors: device possession + biometric. | Device biometric sensor integrity |
| Cross-verification (mutual) | App verifies SWE (BRK chain, VVK settings, TLD). SWE verifies App (blind signature against gCMKAuth). ORKs verify both (AppAuthKey, Forseti). | - |
Call Summary
| Call | Direction | Purpose |
|---|---|---|
| Initiate channel | SWE → Home ORK | Establish transient relay tunnel |
| QR code | SWE → User screen | Encode HomeORK URI + channel ID |
| getDetails | App → Home ORK → SWE | Retrieve session context, BRK signatures, TLD for cross-verification |
| PreSign/DeviceAuth | App → all CMK ORKs | Initiate threshold auth. ORKs validate device + return onion-encrypted state |
| Authenticate | App → CMK ORKs | Submit blinded challenge. ORKs return partial blind signatures |
| Relay | App → Home ORK → SWE | Deliver SWEEncryptedData (blind signature + routing data) |
| Redirect302 | SWE → TideCloak | Forward VendorEncryptedData to complete OIDC flow |
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.
- Tide Developer Documentation: docs.tidecloak.com
Related Protocol Articles:
- Protocol: Secure Web Enclave - Sibling protocol. The SWE generates session keys, maintains the BRK, renders the QR, and receives the blind signature from the App.
- Protocol: CMK Authentication - The PRISM and double-blind signature mechanics that the App executes in a device-bound context.
- Article 5: Governance Without God Mode - VVK JWT signing flow that executes after this protocol completes.