Key Hierarchy
How do the various cryptographic keys relate to each other?
flowchart TB
subgraph Attestant
ASK{{AttestantSigningKeys}}
AVK[AttestantVerifyingKeys]
end
subgraph Shared["Shared Keys"]
SSEK{{SharedSecretKeys}}
SPK[SharedPublicKeys]
SSIK{{SharedSigningKeys}}
SVK[SharedVerifyingKeys]
end
subgraph Server["Server Node"]
SNSK[ServerNodeSecretKey]
Params[Params]
end
ReachablePeer -->|holds| Shared
Server -->|stores| Shared
subgraph ReachablePeer["Reachable Peer"]
RPSIK[ReachableSigningKeys]
RPVK[ReachableVerifyingKeys]
RPSEK[ReachableSecretKeys]
RPPK[ReachablePublicKeys]
end
Attestant -->|generates| SNSK
Attestant -->|generates| SSEK
Attestant -->|generates| SSIK
SSEK -->|includes public key for| SNSK
ASK -.->|derives| AVK
ASK -->|signs| SSEK
ASK -->|signs| SSIK
ASK -->|signs| Params
ASK -->|signs| RPVK
AVK -->|verifies| RPVK
RPSIK -.->|derives| RPVK
RPSIK -->|signs| RPPK
RPSEK -.->|derives| RPPK
RPVK -->|verifies| RPPK
SSEK -.->|derives| SPK
SSIK -.->|derives| SVK
SVK -->|verifies replies from| ReachablePeer
SPK -->|+ ServerNodeSecretKey, seals MessageVaultId/EnvelopeId to| ReachablePeer
SSEK -->|unseals SealedMessageVaultId/SealedEnvelopeId for| ReachablePeer
flowchart TB
subgraph ReachingUser["Reaching User"]
Pass([Passphrase])
RUSIK[ReachingSigningKeys]
RUVK[ReachingVerifyingKeys]
RUSEK_CURRENT["ReachingSecretKeys (current epoch)"]
RUSEK_PREVIOUS["ReachingSecretKeys (previous epoch)"]
RUPK[ReachingPublicKeys]
end
Pass -->|+ Params.reaching_static_salt, derives| RUSIK
Pass -->|+ Params.reaching_current_epoch_salt, derives| RUSEK_CURRENT
Pass -->|+ Params.reaching_previous_epoch_salt, derives| RUSEK_PREVIOUS
RUSIK -.->|derives| RUVK
RUSEK_CURRENT -.->|derives| RUPK
RUSIK -->|signs| RUPK
RUVK -->|verifies| RUPK
Key Relationships
Trust Chain
AttestantSigningKeysact as the root of trust- Attestant signs
ReachableVerifyingKeysto enroll peers ReachableVerifyingKeyssignReachablePublicKeysSharedVerifyingKeysverify replies from Reachable Peers to Reaching Users
Encryption Keys
| Key | Purpose | Who holds secret |
|---|---|---|
ReachableSecretKeys | Decrypt Envelope/MessageVault addressed to reachable peer | Individual Reachable Peer |
ReachingSecretKeys | Decrypt Envelope/MessageVault addressed to reaching user | Derived from memorized passphrase |
ServerNodeSecretKey/SharedPublicKeys | Seal MessageVaultId/EnvelopeId for reachable peer | Server Node |
SharedSecretKeys | Decrypt SealedEnvelopeId/SealedMessageVaultId sent by server | All Reachable Peers |