272 lines
5.1 KiB
Markdown
272 lines
5.1 KiB
Markdown
|
|
Excellent. Below is a **tight, normative draft set** that you can treat as **v0.1 specs**.
|
|||
|
|
I’ll keep this aligned with your philosophy: *PEL early, receipts primary, ASL as the riverbed, no premature coupling.*
|
|||
|
|
|
|||
|
|
I’ll structure this into **five sections**, exactly as requested.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 1. USB REQUEST / RESPONSE SCHEMAS (Normative)
|
|||
|
|
|
|||
|
|
## 1.1 USB REQUEST Schema (v0.1)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
/usb/REQUEST/
|
|||
|
|
├── manifest.yaml # REQUIRED
|
|||
|
|
├── pel-program.yaml # REQUIRED
|
|||
|
|
├── input-artifacts/ # OPTIONAL (directory of files or blocks)
|
|||
|
|
├── policy.hash # REQUIRED
|
|||
|
|
├── request.sig # REQUIRED
|
|||
|
|
└── meta/ # OPTIONAL
|
|||
|
|
├── requester-domain.txt
|
|||
|
|
└── notes.txt
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### `manifest.yaml`
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
version: 1
|
|||
|
|
request_id: <uuid>
|
|||
|
|
request_type: rescue | admission | authority-op
|
|||
|
|
created_at: <iso8601>
|
|||
|
|
requested_outputs:
|
|||
|
|
- artifacts
|
|||
|
|
- receipt
|
|||
|
|
- dam # optional
|
|||
|
|
policy_hash: <sha256>
|
|||
|
|
pel_program_hash: <sha256>
|
|||
|
|
input_artifact_hashes:
|
|||
|
|
- <sha256>
|
|||
|
|
signing:
|
|||
|
|
algorithm: ed25519
|
|||
|
|
signer_hint: <string>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Invariant:**
|
|||
|
|
|
|||
|
|
> The manifest is the canonical object. All hashes are computed over canonical encodings.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 1.2 USB RESPONSE Schema (v0.1)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
/usb/RESPONSE/
|
|||
|
|
├── receipt.per # REQUIRED
|
|||
|
|
├── published/
|
|||
|
|
│ ├── blocks/
|
|||
|
|
│ ├── index/
|
|||
|
|
│ └── snapshots/
|
|||
|
|
├── dam/ # OPTIONAL
|
|||
|
|
│ └── domain.dam
|
|||
|
|
├── response.sig # REQUIRED
|
|||
|
|
└── meta.yaml # OPTIONAL
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Invariant:**
|
|||
|
|
|
|||
|
|
> RESPONSE is append-only and must be reconstructible as ASL input elsewhere.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 2. PEL SUBSET ALLOWED ON AUTH HOST
|
|||
|
|
|
|||
|
|
## 2.1 Allowed PEL Operations
|
|||
|
|
|
|||
|
|
Only **pure, deterministic, side-effect-free** operators:
|
|||
|
|
|
|||
|
|
| Category | Allowed |
|
|||
|
|
| ------------- | ------- |
|
|||
|
|
| Ingest | ✔ |
|
|||
|
|
| Hash | ✔ |
|
|||
|
|
| Encrypt | ✔ |
|
|||
|
|
| Chunk / Pack | ✔ |
|
|||
|
|
| Seal | ✔ |
|
|||
|
|
| Index | ✔ |
|
|||
|
|
| Snapshot | ✔ |
|
|||
|
|
| Sign | ✔ |
|
|||
|
|
| Network | ✖ |
|
|||
|
|
| Clock access | ✖ |
|
|||
|
|
| Randomness | ✖ |
|
|||
|
|
| External exec | ✖ |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2.2 PEL Program Constraints
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
pel_version: 0.1
|
|||
|
|
operators:
|
|||
|
|
- ingest
|
|||
|
|
- encrypt
|
|||
|
|
- seal
|
|||
|
|
- index
|
|||
|
|
- snapshot
|
|||
|
|
outputs:
|
|||
|
|
- receipt
|
|||
|
|
- published_artifacts
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Invariant:**
|
|||
|
|
|
|||
|
|
> The PEL program hash is part of the receipt and MUST uniquely determine execution.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 3. EXECUTION RECEIPT (PER) SIGNATURE LAYOUT
|
|||
|
|
|
|||
|
|
## 3.1 Receipt Structure
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
receipt_version: 1
|
|||
|
|
receipt_id: <uuid>
|
|||
|
|
domain_id: <uuid>
|
|||
|
|
snapshot_id: <uuid>
|
|||
|
|
pel_program_hash: <sha256>
|
|||
|
|
inputs:
|
|||
|
|
- artifact_hash
|
|||
|
|
outputs:
|
|||
|
|
artifacts:
|
|||
|
|
- artifact_key
|
|||
|
|
- block_id
|
|||
|
|
receipt_hash: <sha256>
|
|||
|
|
authority_signature:
|
|||
|
|
algorithm: ed25519
|
|||
|
|
key_id: <fingerprint>
|
|||
|
|
signature: <bytes>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3.2 Receipt Invariants
|
|||
|
|
|
|||
|
|
1. Receipt uniquely identifies:
|
|||
|
|
|
|||
|
|
* Inputs
|
|||
|
|
* Program
|
|||
|
|
* Snapshot
|
|||
|
|
2. Receipt hash is computed **before signing**
|
|||
|
|
3. Receipt verification requires **no ASL store access**
|
|||
|
|
|
|||
|
|
> A receipt is portable truth.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 4. PUBLISHED ARTIFACT SELECTION RULES
|
|||
|
|
|
|||
|
|
## 4.1 Default Rule
|
|||
|
|
|
|||
|
|
Only artifacts explicitly declared in the PEL program as `publish: true` may exit the host.
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
outputs:
|
|||
|
|
- name: encrypted_archive
|
|||
|
|
publish: true
|
|||
|
|
- name: intermediate_chunks
|
|||
|
|
publish: false
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4.2 Enforcement
|
|||
|
|
|
|||
|
|
* Unpublished artifacts:
|
|||
|
|
|
|||
|
|
* May exist internally
|
|||
|
|
* MUST NOT be written to USB
|
|||
|
|
* Published artifacts:
|
|||
|
|
|
|||
|
|
* MUST be sealed
|
|||
|
|
* MUST be indexed
|
|||
|
|
* MUST be referenced in receipt
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4.3 Domain Binding
|
|||
|
|
|
|||
|
|
Published artifacts are bound to:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
(domain_id, snapshot_id)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
This binding is **immutable**.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 5. WRITE-ONCE USB HARDENING RULES
|
|||
|
|
|
|||
|
|
These are **operational invariants**, not filesystem tricks.
|
|||
|
|
|
|||
|
|
## 5.1 Mount Discipline
|
|||
|
|
|
|||
|
|
| Phase | Mount mode |
|
|||
|
|
| ------------ | ---------- |
|
|||
|
|
| Intake | read-only |
|
|||
|
|
| Execution | unmounted |
|
|||
|
|
| Output write | read-write |
|
|||
|
|
| Final | unmounted |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5.2 Structural Rules
|
|||
|
|
|
|||
|
|
* AUTH host **never deletes** from USB
|
|||
|
|
* AUTH host **only writes under `/RESPONSE`**
|
|||
|
|
* AUTH host **never modifies REQUEST**
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5.3 Tamper Evidence
|
|||
|
|
|
|||
|
|
* RESPONSE includes:
|
|||
|
|
|
|||
|
|
* `response.sig`
|
|||
|
|
* hash of REQUEST manifest
|
|||
|
|
* Any post-write modification invalidates signature
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 6. How this fits your philosophy (explicitly)
|
|||
|
|
|
|||
|
|
You said:
|
|||
|
|
|
|||
|
|
> “All we should do is place artifacts, certificates, program specification and intent, then crank.”
|
|||
|
|
|
|||
|
|
That is now **formally true**.
|
|||
|
|
|
|||
|
|
* Intent → manifest
|
|||
|
|
* Program → PEL
|
|||
|
|
* Data → artifacts
|
|||
|
|
* Authority → signature
|
|||
|
|
* Outcome → receipt
|
|||
|
|
|
|||
|
|
Nothing else matters.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 7. What you can implement immediately
|
|||
|
|
|
|||
|
|
Even **without** ASL-CORE or PEL-TRACE:
|
|||
|
|
|
|||
|
|
* Canonical hashing
|
|||
|
|
* Manifest validation
|
|||
|
|
* Receipt generation
|
|||
|
|
* USB discipline
|
|||
|
|
* Domain bootstrapping
|
|||
|
|
* Offline signing
|
|||
|
|
|
|||
|
|
This is *real progress*, not paper.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
If you want next, I recommend (in this order):
|
|||
|
|
|
|||
|
|
1. **PEL canonical encoding rules**
|
|||
|
|
2. **Receipt hash canonicalization**
|
|||
|
|
3. **DAM schema finalization**
|
|||
|
|
4. **Minimal reference CLI (`asl-auth-host verify/run/seal`)**
|
|||
|
|
5. **Threat model write-up**
|
|||
|
|
|
|||
|
|
Just say where to go.
|
|||
|
|
|