@umbra-privacy/qos-ceremony 0.1.3 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -43,3 +43,60 @@ qos-ceremony status # read-only phase + blockers
43
43
 
44
44
  Flags mirror env: `--api --namespace --nonce --alias --secret-path --yubikey
45
45
  --pcr3-preimage-path --qos-release-dir --qos-client`.
46
+
47
+ ## The at-rest layer
48
+
49
+ A share is **double-sealed** everywhere it rests: the QOS P-256 envelope on the inside, an
50
+ ML-KEM-1024 + X25519 envelope over it. `ceremony share` seals before upload and `ceremony provision`
51
+ opens after download, so the singly-sealed form exists only inside a provision workdir, in the moment
52
+ between recovery and re-encryption to the enclave's ephemeral key.
53
+
54
+ The reason is the stored copy. `_shared/shares/<alias>.share` is durable and is the disaster-recovery
55
+ material, so under P-256 alone a copy taken today is readable by a CRQC later. The outer layer closes
56
+ that window without changing anything the enclave sees.
57
+
58
+ ### One-time setup, per operator
59
+
60
+ ```bash
61
+ # a seed in the file — fine for a laptop ceremony or a test
62
+ qos-ceremony encryption-key ~/.umbra/operator-encryption.json
63
+
64
+ # a seed derived from hardware — only a salt is stored
65
+ qos-ceremony encryption-key ~/.umbra/operator-encryption.json \
66
+ --challenge-command 'ykman otp calculate 2 {challenge}'
67
+ ```
68
+
69
+ Then pass the key file to every ceremony command that touches a share:
70
+
71
+ ```bash
72
+ export CEREMONY_ENCRYPTION_KEY=~/.umbra/operator-encryption.json
73
+ qos-ceremony share # derives, seals, uploads
74
+ qos-ceremony provision # downloads, opens, re-encrypts to the enclave
75
+ ```
76
+
77
+ Add `--challenge-command` to `provision` when the key derives from hardware; the token must be
78
+ present for that step and no other.
79
+
80
+ ### The tools directly
81
+
82
+ `seal-share` and `unseal-share` are also exposed on their own, for a share handled outside the
83
+ ceremony — a TVC deployment, or recovering one by hand. Arguments pass through to the underlying
84
+ binary, so `--help` is the binary's own:
85
+
86
+ ```bash
87
+ qos-ceremony seal-share --help
88
+ qos-ceremony unseal-share --response quorum-key-response.json \
89
+ --key ~/.umbra/operator-encryption.json --out quorum_key_metadata.json # tvc shape
90
+ qos-ceremony unseal-share --response p1.share.sealed \
91
+ --key ~/.umbra/operator-encryption.json --out p1.share --format qos # qos shape
92
+ ```
93
+
94
+ `--format tvc` (the default) writes what `tvc keys re-encrypt-local-share` reads; `--format qos`
95
+ writes the raw envelope `qos_client proxy-re-encrypt-share --share-path` reads.
96
+
97
+ ### Binaries
98
+
99
+ `qos_client`, `umbra-encryption-key`, `umbra-seal-share` and `umbra-unseal-share` are embedded per
100
+ platform. Override any of them with `--qos-client`, `--seal-share-bin`, `--unseal-share-bin`, or the
101
+ matching `*_BIN` environment variable; on an uncovered platform the CLI falls back to the bare name
102
+ on `PATH`.
Binary file
Binary file