Skip to content

Commit 102ca52

Browse files
authored
Merge pull request #774 from tkhq/zeke/document-boot-standard-changes
docs: clarify when boot standard is required vs key forward
2 parents d47cd77 + fb5580a commit 102ca52

3 files changed

Lines changed: 55 additions & 2 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ The application QuorumOS pivots to once it finishes booting. This application's
218218

219219
There are two modes for provisioning:
220220

221-
- [Boot Standard](docs/boot_standard.md): mode for provisioning an enclave with quorum key shares. This is commonly used if there is no instance from the same namespace to key forward from or if there is any change to the QuorumOS verification API that breaks Key Forwarding. Boot Standard is also required if the manifest set or share set change.
221+
- [Boot Standard](docs/boot_standard.md): mode for provisioning an enclave with quorum key shares. This is required when there is no provisioned instance in the namespace to key forward from (first boot after genesis, or all nodes lost), when the manifest set or PCR3 (host IAM role) changes, or when a QuorumOS change breaks Key Forwarding itself. See [When Is Boot Standard Required?](docs/boot_standard.md#when-is-boot-standard-required) for the full decision rule.
222222
- [Key Forward](docs/key_forward.md): mode for provisioning an enclave from an already provisioned enclave of the same namespace. This allows QuorumOS to support horizontal scaling cloud workloads. Effectively, a pre-existing enclave will verify attestation and manifest for a new enclave and then forward its quorum key to the new enclave.
223223

224224
### Remote Attestation

docs/GUIDE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -647,7 +647,7 @@ The quorum key reconstructs to the same value, but now your updated application
647647

648648
**The Nonce Mechanism**: The monotonically increasing nonce prevents rollback attacks. Members should only approve manifests with nonces higher than the current deployment, ensuring adversaries cannot force downgrades to vulnerable versions.
649649

650-
**Note**: if we had two nitro enclaves running simultaneously targeting the same application but different versions, we could use the already provisioned enclave to key forward off of, removing the need to post shares. This is helpful for HA production setups that require horizontally scalable workloads with no human intervention. Key forwarding is not covered in this guide, but you can find some information [here](https://github.com/tkhq/qos/blob/main/src/qos_core/KEY_FORWARDING.MD).
650+
**Note**: if we had two nitro enclaves running simultaneously targeting the same application but different versions, we could use the already provisioned enclave to key forward off of, removing the need to post shares. This is helpful for HA production setups that require horizontally scalable workloads with no human intervention. Key forwarding is not covered in this guide, but you can find some information in [Key Forward](key_forward.md) and [When Is Boot Standard Required?](boot_standard.md#when-is-boot-standard-required).
651651

652652
---
653653

docs/boot_standard.md

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,59 @@
33
Boot a QOS node by submitting an approved manifest and pivot binary, then
44
provision the node with quorum key shares. Share set members verify the node's attestation document and submit their shares encrypted to the node's Ephemeral Key. Once the configured threshold of shares has been posted, the node reconstructs the Quorum Key and starts the Pivot App.
55

6+
## When Is Boot Standard Required?
7+
8+
Boot Standard is the provisioning mode where Share Holders post Quorum Key
9+
shares to a freshly booted node after verifying its setup attestation. The
10+
alternative, [Key Forward](key_forward.md), lets an already provisioned node in
11+
the same namespace (the source node) export the Quorum Key to a fresh node with
12+
no human involvement.
13+
14+
Every change deployed to an enclave — new pivot app, new QOS image, new
15+
manifest configuration — is shipped by booting a fresh node with a new
16+
Manifest-Set-approved manifest. The only question is whether that fresh node
17+
can be provisioned by Key Forward or needs a Boot Standard share ceremony. The
18+
answer depends on the source node:
19+
[`export_key`](../src/qos_core/src/protocol/services/key.rs) refuses to
20+
forward the Quorum Key unless the new manifest passes its checks. Boot Standard
21+
is required exactly when no node can (or may) act as the source.
22+
23+
Changes that do **not** require Boot Standard — Key Forward works, as long as
24+
at least one provisioned node in the namespace is able to act as the source:
25+
26+
* Pivot App updates (new pivot hash) and pivot configuration changes (args,
27+
env, restart policy, socket pool size), via a new approved manifest with an
28+
incremented nonce. This is the common update flow.
29+
* QOS image updates (new PCR0/PCR1/PCR2). The source node checks the new manifest's
30+
PCRs against the *new node's* attestation document, not against its own
31+
measurements; the Manifest Set's threshold approvals are what vouch for the
32+
new QOS version.
33+
* Adding capacity or replacing instances with an unchanged manifest (equal
34+
nonce is accepted when the manifest hash is identical).
35+
36+
Changes that **do** require Boot Standard — the source node refuses to export,
37+
or no source node exists:
38+
39+
* First boot of a namespace after genesis: no provisioned node exists yet.
40+
* Loss of every provisioned node in the namespace (disaster recovery).
41+
* Manifest Set changes, members or threshold (`DifferentManifestSet`): a source
42+
node only trusts approvals from its own Manifest Set, so rotating the set
43+
requires re-provisioning by the Share Set.
44+
* PCR3 changes, i.e. a new host IAM role or AWS account (`DifferentPcr3`).
45+
* Namespace name changes (`DifferentNamespaceName`).
46+
* A manifest nonce lower than the source node's, or an equal nonce with a
47+
different manifest hash (`LowNonce`, `DifferentManifest`). A rollback can only
48+
be key-forwarded from a source node whose own nonce is low enough.
49+
* A different Quorum Key (`DifferentQuorumKey`) — in practice a new namespace,
50+
starting with its own genesis ceremony.
51+
* QOS releases that break the key-forward protocol itself: if a source node on
52+
the old release cannot decode the new node's request or verify its attestation
53+
document, the first node on the new release must be Boot Standard
54+
provisioned. Wire compatibility is normally maintained to avoid this, so
55+
treat any breaking change to `ProtocolMsg`, manifest encoding, or attestation
56+
verification as a potential Boot Standard event and verify Key Forward
57+
across the version boundary.
58+
659
## New terms
760

861
* **Node**: The un-provisioned QOS node being booted.

0 commit comments

Comments
 (0)