Skip to content

Stuart meets Satoshi: key rotation

The three sequences have the same start and the same end. Only the announcement is different. For the details, see Update and Deactivate, Beacons, and Resolve.

Stuart signs the Beacon Signal alone. Stuart waits for 6 confirmations before the next update. Stuart can also publish the update on CAS instead of the Sidecar Data.

---
title: Key rotation with a Singleton Beacon
config:
  sequence:
    actorMargin: 20
    width: 110
---

%% Before: Satoshi trusts the keys of Stuart at version N.

sequenceDiagram
    autonumber
    actor Stu as Stuart
    participant BTC as Bitcoin
    actor Sat as Satoshi

    Stu->>Stu: BTCR2 Update: add the new key.<br/>Sign it with the old key.
    Stu->>BTC: Beacon Signal:<br/>hash of the update
    BTC-->>Stu: 6 confirmations
    Stu->>Sat: Message signed with the new key,<br/>did, Sidecar Data
    Sat->>BTC: Resolve the DID
    BTC-->>Sat: Beacon Signal
    Sat->>Sat: Check the update against<br/>the hash. Apply it.
    Sat->>Sat: Verify the message.<br/>Trust the new key.

Source: key-rotation-singleton-beacon.mmd

The cohort sees which DIDs have an update. The Beacon Signal needs the signatures of all n participants, or of k participants if the cohort has a k-of-n fallback. See n-of-n and k-of-n signatures.

---
title: Key rotation with a CAS Beacon
config:
  sequence:
    actorMargin: 20
    width: 110
---

%% Before: Satoshi trusts the keys of Stuart at version N.
%% Stuart is a participant of an Aggregation Cohort with n participants.

sequenceDiagram
    autonumber
    actor Stu as Stuart
    participant AS as Aggregation<br/>Service
    participant BTC as Bitcoin
    actor Sat as Satoshi

    Stu->>Stu: BTCR2 Update: add the new key.<br/>Sign it with the old key.
    Stu->>AS: did, hash of the update
    AS->>Stu: CAS Announcement
    Stu->>Stu: Check the entry<br/>of the DID
    Stu->>AS: Signature<br/>(all n, or k of n)
    AS->>BTC: Beacon Signal: hash of<br/>the CAS Announcement
    Stu->>Sat: Message signed with the new key,<br/>did, Sidecar Data
    Sat->>BTC: Resolve the DID
    Sat->>Sat: Find the DID in the CAS<br/>Announcement. Apply the update.
    Sat->>Sat: Verify the message.<br/>Trust the new key.

Source: key-rotation-cas-beacon.mmd

The Aggregation Service sees only hashes. The leaf value hides if Stuart has an update (SMT leaf values). Satoshi gets the SMT Proofs only from the Sidecar Data.

---
title: Key rotation with an SMT Beacon
config:
  sequence:
    actorMargin: 20
    width: 110
---

%% Before: Satoshi trusts the keys of Stuart at version N.
%% Stuart is a participant of an Aggregation Cohort with n participants.

sequenceDiagram
    autonumber
    actor Stu as Stuart
    participant AS as Aggregation<br/>Service
    participant BTC as Bitcoin
    actor Sat as Satoshi

    Stu->>Stu: BTCR2 Update: add the new key.<br/>Sign it with the old key.
    Stu->>AS: Leaf value at hash(did)
    AS->>Stu: SMT Proof
    Stu->>Stu: Check the SMT Proof
    Stu->>AS: Signature<br/>(all n, or k of n)
    AS->>BTC: Beacon Signal:<br/>SMT root
    Stu->>Sat: Message signed with the new key,<br/>did, Sidecar Data
    Sat->>BTC: Resolve the DID
    Sat->>Sat: Check the SMT Proof.<br/>Apply the update.
    Sat->>Sat: Verify the message.<br/>Trust the new key.

Source: key-rotation-smt-beacon.mmd