Upload files to "/"
This commit is contained in:
parent
270fe9fbfe
commit
0146c86e98
1 changed files with 192 additions and 0 deletions
192
hub_ownership_recovery_design.md
Normal file
192
hub_ownership_recovery_design.md
Normal file
|
|
@ -0,0 +1,192 @@
|
||||||
|
# Decentralized Hub Ownership and Recovery Design (PKI-Based, No Blockchain)
|
||||||
|
|
||||||
|
## 1. Keys and DIDs (Conceptual Model)
|
||||||
|
|
||||||
|
For each Hub, define three logical components:
|
||||||
|
|
||||||
|
### 1. Hub Owner Key (Kₒ)
|
||||||
|
|
||||||
|
- Long‑term key pair defining the **owner** of the Hub DID.
|
||||||
|
- Private key never leaves the user's devices.
|
||||||
|
- DID example: `did:key:<public-of-Kₒ>`.
|
||||||
|
- Ultimate authority for the Hub.
|
||||||
|
|
||||||
|
### 2. Hub Operational Key (Kₕ)
|
||||||
|
|
||||||
|
- Key pair used by the **server instance** running the Hub.
|
||||||
|
- Private key stored on the Hub backend server.
|
||||||
|
- Granted authority via a signed **delegation certificate** from Kₒ.
|
||||||
|
|
||||||
|
### 3. Recovery Secret / Code (R)
|
||||||
|
|
||||||
|
- High‑entropy secret generated **client-side** (NextJS).
|
||||||
|
- Used to derive Kₒ (e.g., `Kₒ = KDF(R, "hub-owner")`).
|
||||||
|
- Shown **only once**.
|
||||||
|
- **Never stored on any server.**
|
||||||
|
|
||||||
|
### Additional Component: Passport DID (Dᴘ)
|
||||||
|
|
||||||
|
The user's self-sovereign identity. Contains a verifiable claim linking
|
||||||
|
the user to ownership of the Hub DID.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
## 2. Creating a Hub and Binding Ownership to a Passport
|
||||||
|
|
||||||
|
### Step 1: Generate Owner Identity (Client-Side)
|
||||||
|
|
||||||
|
1. Generate random secret `R`.
|
||||||
|
2. Derive owner key pair `Kₒ`.
|
||||||
|
3. Compute Hub DID: `Dᴴ = did:key:<pub(Kₒ)>`.
|
||||||
|
4. Show recovery code R to user for offline storage.
|
||||||
|
|
||||||
|
### Step 2: Create Operational Identity (Server-Side)
|
||||||
|
|
||||||
|
1. Server generates new key pair `Kₕ`.
|
||||||
|
2. Client fetches `pub(Kₕ)` securely.
|
||||||
|
|
||||||
|
### Step 3: Delegate Authority (Client → Server)
|
||||||
|
|
||||||
|
Create a delegation certificate:
|
||||||
|
|
||||||
|
{
|
||||||
|
hubDid: Dᴴ,
|
||||||
|
delegatedTo: pub(Kₕ),
|
||||||
|
privileges: ["serve-hub", "sign-hub-messages"],
|
||||||
|
issuedAt: t₀,
|
||||||
|
expiresAt: t₁
|
||||||
|
}
|
||||||
|
|
||||||
|
Sign the certificate with `Kₒ`, then upload it to the server.
|
||||||
|
|
||||||
|
### Step 4: Bind Hub to Owner's Passport
|
||||||
|
|
||||||
|
Add a verifiable claim:
|
||||||
|
|
||||||
|
``` json
|
||||||
|
{
|
||||||
|
"subject": Dᴘ,
|
||||||
|
"claim": {
|
||||||
|
"type": "HubOwnership",
|
||||||
|
"hubDid": Dᴴ,
|
||||||
|
"role": "owner"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Signed by the Passport key, optionally also by Kₒ.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
## 3. Normal Operation
|
||||||
|
|
||||||
|
When interacting with other Hubs, a Hub sends: - Hub DID (`Dᴴ`) -
|
||||||
|
Delegation certificate (`Kₒ → Kₕ`) - Its operational public key
|
||||||
|
(`pub(Kₕ)`)
|
||||||
|
|
||||||
|
Peers verify: 1. Certificate signature matches `pub(Kₒ)` encoded in
|
||||||
|
`Dᴴ`. 2. Message signatures match `pub(Kₕ)`. 3. Ownership via Passport
|
||||||
|
profile (if desired).
|
||||||
|
|
||||||
|
**Owner = controls Kₒ**\
|
||||||
|
**Server = controls Kₕ (delegated)**
|
||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
## 4. Handling a Server Compromise
|
||||||
|
|
||||||
|
If a hacker takes over the server: - They gain `Kₕ`. - They **do not**
|
||||||
|
have `R` or `Kₒ`.
|
||||||
|
|
||||||
|
The owner must: 1. Launch a new Hub on a new server. 2. Broadcast a
|
||||||
|
signed compromise notice. 3. Prove ownership via signatures from `Kₒ`.
|
||||||
|
|
||||||
|
### 4.1 Reconstructing Kₒ from R (If Needed)
|
||||||
|
|
||||||
|
User enters recovery code R on a safe device: - Derive
|
||||||
|
`Kₒ = KDF(R, "hub-owner")`. - Validate that its DID matches the Hub DID
|
||||||
|
Dᴴ.
|
||||||
|
|
||||||
|
### 4.2 Create New Operational Key (Kₕ′)
|
||||||
|
|
||||||
|
New server generates `Kₕ′`.
|
||||||
|
|
||||||
|
Owner creates a new delegation certificate:
|
||||||
|
|
||||||
|
Kₒ → Kₕ′
|
||||||
|
|
||||||
|
Owner also signs a **revocation** of the old operational key:
|
||||||
|
|
||||||
|
{
|
||||||
|
hubDid: Dᴴ,
|
||||||
|
revokedKey: pub(Kₕ),
|
||||||
|
reason: "Server compromised",
|
||||||
|
revokedAt: t₂
|
||||||
|
}
|
||||||
|
|
||||||
|
### 4.3 Broadcasting the Recovery
|
||||||
|
|
||||||
|
New Hub publishes: - `hubDid: Dᴴ` - new endpoint - new `pub(Kₕ′)` - new
|
||||||
|
delegation certificate - revocation of `pub(Kₕ)` - optional
|
||||||
|
Passport-signed confirmation
|
||||||
|
|
||||||
|
The attacker cannot: - sign new delegations (requires `Kₒ`) - sign
|
||||||
|
revocations (requires `Kₒ`) - change the Hub DID (`pub(Kₒ)`)
|
||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
## 5. Trust Decision Model (No Consensus)
|
||||||
|
|
||||||
|
Each Hub or human owner decides independently what to trust.
|
||||||
|
|
||||||
|
### Typical Validation Rules
|
||||||
|
|
||||||
|
1. Accept only messages signed by an operational key currently
|
||||||
|
delegated by `Kₒ`.
|
||||||
|
2. Respect revocations signed by `Kₒ`.
|
||||||
|
3. Track a local chain of:
|
||||||
|
- delegations\
|
||||||
|
- revocations\
|
||||||
|
- Passport claims
|
||||||
|
|
||||||
|
No global ledger required.
|
||||||
|
|
||||||
|
### Human Decision Layer
|
||||||
|
|
||||||
|
Owners may also use: - Out‑of‑band communication - Social trust - Direct
|
||||||
|
evidence from the Passport DID
|
||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
## 6. Recovery Code Requirements
|
||||||
|
|
||||||
|
The design satisfies your constraints:
|
||||||
|
|
||||||
|
- **Never stored on a server.**
|
||||||
|
- Generated client-side only.
|
||||||
|
- Used only to derive `Kₒ` when recovering ownership.
|
||||||
|
- Never transmitted over the network.
|
||||||
|
- Attackers cannot derive R or Kₒ from any server compromise.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
## 7. Optional Refinements
|
||||||
|
|
||||||
|
- Multi-sig ownership (`Kₒ` split across devices).
|
||||||
|
- Time‑bound delegations.
|
||||||
|
- Owner-signed references to external identities (website, company
|
||||||
|
DID, etc.).
|
||||||
|
- More expressive Passport claims.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
This design provides: - **Hub DID ownership backed by PKI**, no
|
||||||
|
blockchain needed. - **Recovery mechanism based on a secret code (R)**
|
||||||
|
that never touches servers. - **Revocation and redelegation** driven by
|
||||||
|
the owner key (Kₒ). - **Human‑centric trust decisions**, no consensus
|
||||||
|
protocol.
|
||||||
|
|
||||||
|
The attacker cannot permanently hijack a Hub unless they obtain the
|
||||||
|
recovery code.
|
||||||
Loading…
Add table
Reference in a new issue