Skip to content

Commit 0fbb292

Browse files
committed
restore forensic formulas and resolve outstanding normative issues
1 parent 99dbb42 commit 0fbb292

File tree

4 files changed

+2316
-1895
lines changed

4 files changed

+2316
-1895
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@
1010
.vscode/
1111
.idea/
1212

13+
# Working notes
14+
issues.md
15+
1316
# OS files
1417
.DS_Store
1518
Thumbs.db

cddl/witnessd-pop.cddl

Lines changed: 66 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
; Proof of Process (PoP) Evidence Schema
1+
; Proof of Process (PoP) Evidence and Attestation Result Schema
22
; draft-condrey-rats-pop-protocol-04 / draft-condrey-rats-pop-appraisal-03
33
;
44
; This schema defines the CBOR-encoded data structures for the
@@ -7,24 +7,37 @@
77
; CBOR tag 1463894560 ("WAR ").
88
;
99
; All map keys use integer encoding per IETF CBOR conventions.
10+
; All floating-point fields MUST use 32-bit IEEE 754 binary32.
11+
; pop-timestamp values MUST use floating-point encoding with
12+
; at least millisecond precision.
13+
14+
; ============================================================
15+
; CBOR Tag Wrappers
16+
; ============================================================
17+
18+
pop-evidence = #6.1347571280(evidence-packet)
19+
pop-war = #6.1463894560(attestation-result)
1020

1121
; ============================================================
1222
; Evidence Packet (Protocol)
1323
; ============================================================
1424

15-
; Top-level Evidence Packet (CBOR tag 1347571280)
1625
evidence-packet = {
1726
1 => uint, ; version (MUST be 1)
1827
2 => tstr, ; profile-uri
1928
3 => uuid, ; packet-id
2029
4 => pop-timestamp, ; created
2130
5 => document-ref, ; document
22-
6 => [+ checkpoint], ; checkpoints
31+
6 => [3* checkpoint], ; checkpoints (min 3)
2332
? 7 => attestation-tier, ; T1-T4
2433
? 8 => [* tstr], ; limitations
2534
? 9 => profile-declaration, ; profile
2635
? 10 => [+ presence-challenge], ; QR/OOB proofs
27-
? 18 => physical-liveness, ; CDCE markers
36+
? 11 => channel-binding, ; TLS EKM binding
37+
; keys 14-17 reserved for future use
38+
? 13 => content-tier, ; Evidence Content Tier
39+
? 18 => physical-liveness, ; physical-liveness markers
40+
* int => any, ; extension fields
2841
}
2942

3043
checkpoint = {
@@ -37,9 +50,10 @@ checkpoint = {
3750
7 => hash-value, ; prev-hash
3851
8 => hash-value, ; checkpoint-hash
3952
9 => process-proof, ; SWF proof
40-
10 => jitter-binding, ; behavioral-entropy
41-
11 => physical-state, ; CDCE Weave
42-
12 => bstr .size 32, ; entangled-mac
53+
? 10 => jitter-binding, ; behavioral-entropy (ENHANCED+)
54+
? 11 => physical-state, ; CDCE Weave (ENHANCED+)
55+
? 12 => bstr .size 32, ; entangled-mac (ENHANCED+)
56+
* int => any, ; extension fields
4357
}
4458

4559
document-ref = {
@@ -48,7 +62,7 @@ document-ref = {
4862
3 => uint, ; byte-length
4963
4 => uint, ; char-count
5064
? 5 => hash-salt-mode, ; salting mode
51-
? 6 => bstr, ; salt-commitment
65+
? 6 => bstr .size 32, ; salt-commitment
5266
}
5367

5468
; ============================================================
@@ -58,10 +72,10 @@ document-ref = {
5872
process-proof = {
5973
1 => proof-algorithm, ; algorithm id
6074
2 => proof-params, ; SWF params
61-
3 => bstr, ; input (seed)
62-
4 => bstr, ; output (root)
75+
3 => bstr .size 32, ; input (seed)
76+
4 => bstr .size 32, ; merkle-root
6377
5 => [+ merkle-proof], ; sampled proofs
64-
6 => float32, ; claimed-duration
78+
6 => float32, ; claimed-duration (seconds)
6579
}
6680

6781
proof-params = {
@@ -88,20 +102,20 @@ jitter-binding = {
88102
}
89103

90104
edit-delta = {
91-
1 => int, ; chars-added
92-
2 => int, ; chars-deleted
105+
1 => uint, ; chars-added
106+
2 => uint, ; chars-deleted
93107
3 => uint, ; op-count
94108
? 4 => [* edit-position], ; positions
95109
}
96110

97111
edit-position = [
98112
uint, ; offset
99-
int, ; change (+/-)
113+
int, ; change (+/-), MUST be non-zero
100114
]
101115

102116
physical-state = {
103117
1 => [+ float32], ; thermal (relative)
104-
2 => uint, ; entropy-delta
118+
2 => int, ; entropy-delta (signed)
105119
? 3 => bstr .size 32, ; kernel-commitment
106120
}
107121

@@ -120,8 +134,8 @@ thermal-sample = [
120134
; ============================================================
121135

122136
presence-challenge = {
123-
1 => bstr, ; challenge-nonce
124-
2 => bstr, ; device-signature
137+
1 => bstr .size (16..256), ; challenge-nonce (128+ bits)
138+
2 => bstr, ; device-signature (MUST be COSE_Sign1)
125139
3 => pop-timestamp, ; response-time
126140
}
127141

@@ -130,6 +144,15 @@ profile-declaration = {
130144
2 => [+ uint], ; feature-flags
131145
}
132146

147+
binding-type = &(
148+
tls-exporter: 1,
149+
)
150+
151+
channel-binding = {
152+
1 => binding-type, ; binding-type
153+
2 => bstr .size 32, ; binding-value (EKM output)
154+
}
155+
133156
; NOTE: Cross-session linking (continuation tokens) is deferred
134157
; to a future revision. See draft-condrey-rats-pop-protocol.
135158

@@ -140,16 +163,18 @@ profile-declaration = {
140163

141164
attestation-result = {
142165
1 => uint, ; version (MUST be 1)
143-
2 => bstr .size 32, ; evidence-ref (hash of packet chain)
166+
2 => hash-value, ; evidence-ref
144167
3 => verdict, ; appraisal verdict
145168
4 => attestation-tier, ; assessed assurance level
146169
5 => uint, ; chain-length
147170
6 => uint, ; chain-duration (seconds)
148-
7 => entropy-report, ; entropy assessment
171+
? 7 => entropy-report, ; entropy assessment (omit for CORE)
149172
? 8 => forgery-cost-estimate, ; quantified forgery cost
150-
? 9 => [* absence-proof], ; absence claims
173+
? 9 => [+ absence-claim], ; absence claims (1+ when present)
151174
? 10 => [* tstr], ; warnings
152175
11 => bstr, ; verifier-signature (COSE_Sign1)
176+
12 => pop-timestamp, ; created (appraisal timestamp)
177+
* int => any, ; extension fields
153178
}
154179

155180
verdict = &(
@@ -161,8 +186,8 @@ verdict = &(
161186

162187
entropy-report = {
163188
1 => float32, ; timing-entropy (bits/sample)
164-
2 => float32, ; revision-entropy
165-
3 => float32, ; pause-entropy
189+
2 => float32, ; revision-entropy (bits)
190+
3 => float32, ; pause-entropy (bits)
166191
4 => bool, ; meets-threshold
167192
}
168193

@@ -175,17 +200,24 @@ forgery-cost-estimate = {
175200
2 => float32, ; c-entropy
176201
3 => float32, ; c-hardware
177202
4 => float32, ; c-total
178-
5 => tstr, ; currency ("USD" / "CPU-hours")
203+
5 => cost-unit, ; currency
179204
}
180205

206+
cost-unit = &(
207+
usd: 1,
208+
cpu-hours: 2,
209+
)
210+
181211
; ============================================================
182-
; Absence Proofs (Appraisal)
212+
; Absence Claims (Appraisal)
183213
; ============================================================
184214

185-
absence-proof = {
215+
absence-claim = {
186216
1 => absence-type, ; proof category
187217
2 => time-window, ; claimed window
188-
3 => bstr, ; type-specific proof data
218+
3 => tstr, ; claim-id
219+
? 4 => any, ; threshold/parameter
220+
5 => bool, ; assertion
189221
}
190222

191223
absence-type = &(
@@ -210,8 +242,14 @@ attestation-tier = &(
210242
hardware-hardened: 4, ; T4: LoA4
211243
)
212244

245+
content-tier = &(
246+
core: 1,
247+
enhanced: 2,
248+
maximum: 3,
249+
)
250+
213251
proof-algorithm = &(
214-
sha256-chain: 1,
252+
; 1 is reserved for future use
215253
pobst-argon2id: 20,
216254
)
217255

@@ -231,7 +269,7 @@ hash-algorithm = &(
231269
; ============================================================
232270

233271
uuid = bstr .size 16
234-
pop-timestamp = #6.1(number) ; CBOR tag 1 (epoch-based date/time)
272+
pop-timestamp = #6.1(float32) ; CBOR tag 1 (epoch-based, float32)
235273
hash-value = {
236274
1 => hash-algorithm,
237275
2 => bstr,

0 commit comments

Comments
 (0)