Remove legacy ops drafts
This commit is contained in:
parent
74efedf62c
commit
4989baf623
|
|
@ -1,291 +0,0 @@
|
||||||
Perfect — then let’s be very concrete and **treat the overlay itself as a specification**, not just “put binaries somewhere”.
|
|
||||||
|
|
||||||
Below is a **clean, minimal, opinionated overlay schema** for an **ASL intake / rescue environment**, aligned with everything you’ve defined (ASL, STORE-INDEX, federation, ZFS optional).
|
|
||||||
|
|
||||||
No diagrams, no fluff.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# ASL SystemRescue Overlay – Intake Schema
|
|
||||||
|
|
||||||
This overlay defines **what exists at boot**, **where state lives**, and **what is immutable vs runtime**.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 1. High-level intent
|
|
||||||
|
|
||||||
The overlay must:
|
|
||||||
|
|
||||||
* Make ASL tools **always available**
|
|
||||||
* Be **stateless by default**
|
|
||||||
* Support **local ZFS intake OR remote ASL intake**
|
|
||||||
* Keep **semantic state out of the rescue image**
|
|
||||||
* Be safe on crashed systems
|
|
||||||
|
|
||||||
So the overlay provides:
|
|
||||||
|
|
||||||
* **executables**
|
|
||||||
* **configuration defaults**
|
|
||||||
* **service wiring**
|
|
||||||
* **well-known mount points**
|
|
||||||
|
|
||||||
Nothing else.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 2. Canonical overlay layout
|
|
||||||
|
|
||||||
```
|
|
||||||
overlay/
|
|
||||||
├── usr/
|
|
||||||
│ └── local/
|
|
||||||
│ ├── bin/
|
|
||||||
│ │ ├── asl-intake
|
|
||||||
│ │ ├── asl-admin
|
|
||||||
│ │ └── asl-debug
|
|
||||||
│ └── lib/
|
|
||||||
│ └── libasl.so
|
|
||||||
│
|
|
||||||
├── etc/
|
|
||||||
│ └── asl/
|
|
||||||
│ ├── asl.conf # mode selection, endpoints
|
|
||||||
│ ├── federation.conf # domain + peer config
|
|
||||||
│ └── logging.conf
|
|
||||||
│
|
|
||||||
├── etc/systemd/system/
|
|
||||||
│ ├── asl-intake.service
|
|
||||||
│ └── asl-preflight.service
|
|
||||||
│
|
|
||||||
├── var/
|
|
||||||
│ └── lib/
|
|
||||||
│ └── asl/
|
|
||||||
│ ├── runtime/ # ephemeral runtime state
|
|
||||||
│ ├── cache/ # optional CAS cache
|
|
||||||
│ └── locks/
|
|
||||||
│
|
|
||||||
├── run/
|
|
||||||
│ └── asl/
|
|
||||||
│ └── sockets/ # if used (optional)
|
|
||||||
│
|
|
||||||
└── mnt/
|
|
||||||
└── asl/
|
|
||||||
├── local/ # local ZFS mount target
|
|
||||||
└── remote/ # optional remote FS
|
|
||||||
```
|
|
||||||
|
|
||||||
This is the **entire contract** between SystemRescue and ASL.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 3. What each directory *means* (important)
|
|
||||||
|
|
||||||
### `/usr/local/bin`
|
|
||||||
|
|
||||||
**Immutable tools**
|
|
||||||
|
|
||||||
* `asl-intake`
|
|
||||||
Primary recovery/intake executable
|
|
||||||
* `asl-admin`
|
|
||||||
Inspection, snapshot listing, GC checks
|
|
||||||
* `asl-debug`
|
|
||||||
Low-level validation, block/segment inspection
|
|
||||||
|
|
||||||
> These must never write here.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### `/etc/asl`
|
|
||||||
|
|
||||||
**Declarative configuration only**
|
|
||||||
|
|
||||||
Example `asl.conf`:
|
|
||||||
|
|
||||||
```
|
|
||||||
mode = auto # auto | local | remote
|
|
||||||
local.mount = /mnt/asl/local
|
|
||||||
remote.endpoint = https://asl-backend
|
|
||||||
domain.id = rescue-domain
|
|
||||||
```
|
|
||||||
|
|
||||||
Rules:
|
|
||||||
|
|
||||||
* No secrets unless unavoidable
|
|
||||||
* No mutable state
|
|
||||||
* Safe to ship in ISO
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### `/var/lib/asl`
|
|
||||||
|
|
||||||
**All mutable local state**
|
|
||||||
|
|
||||||
This is the *only* place your tools write to by default.
|
|
||||||
|
|
||||||
```
|
|
||||||
/var/lib/asl/runtime # PID files, temp metadata
|
|
||||||
/var/lib/asl/cache # optional local CAS cache
|
|
||||||
/var/lib/asl/locks # advisory locks
|
|
||||||
```
|
|
||||||
|
|
||||||
This may live:
|
|
||||||
|
|
||||||
* in RAM (default)
|
|
||||||
* on USB persistence
|
|
||||||
* never on the broken system disk
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### `/mnt/asl/local`
|
|
||||||
|
|
||||||
**Local ASL backend mount (ZFS)**
|
|
||||||
|
|
||||||
If local intake is possible:
|
|
||||||
|
|
||||||
```
|
|
||||||
zpool import rescuepool
|
|
||||||
zfs mount rescuepool/asl → /mnt/asl/local
|
|
||||||
```
|
|
||||||
|
|
||||||
Your tool treats this as:
|
|
||||||
|
|
||||||
```
|
|
||||||
/mnt/asl/local/
|
|
||||||
├── blocks/
|
|
||||||
├── segments/
|
|
||||||
├── snapshots/
|
|
||||||
└── logs/
|
|
||||||
```
|
|
||||||
|
|
||||||
(Exact internal layout is backend-defined, not overlay-defined.)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### `/mnt/asl/remote`
|
|
||||||
|
|
||||||
Optional:
|
|
||||||
|
|
||||||
* NFS
|
|
||||||
* SSHFS
|
|
||||||
* Debug mounts
|
|
||||||
|
|
||||||
Not required for normal operation.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 4. systemd services (minimal and safe)
|
|
||||||
|
|
||||||
### `asl-preflight.service`
|
|
||||||
|
|
||||||
Runs once at boot.
|
|
||||||
|
|
||||||
Responsibilities:
|
|
||||||
|
|
||||||
* Detect network
|
|
||||||
* Detect ZFS availability
|
|
||||||
* Detect importable pools
|
|
||||||
* Write decision to `/run/asl/mode`
|
|
||||||
|
|
||||||
No mutations.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### `asl-intake.service`
|
|
||||||
|
|
||||||
Starts the tool.
|
|
||||||
|
|
||||||
Example behavior:
|
|
||||||
|
|
||||||
* Reads `/run/asl/mode`
|
|
||||||
* Chooses:
|
|
||||||
|
|
||||||
* local ZFS backend
|
|
||||||
* or remote ASL endpoint
|
|
||||||
* Starts intake loop or waits for operator
|
|
||||||
|
|
||||||
This keeps **policy out of the binary**.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 5. Local vs remote handling (explicit contract)
|
|
||||||
|
|
||||||
### Local ZFS mode
|
|
||||||
|
|
||||||
The overlay guarantees:
|
|
||||||
|
|
||||||
```
|
|
||||||
/mnt/asl/local exists
|
|
||||||
/var/lib/asl writable
|
|
||||||
/usr/local/bin contains tools
|
|
||||||
```
|
|
||||||
|
|
||||||
Your tool guarantees:
|
|
||||||
|
|
||||||
* Never mutate unsealed data
|
|
||||||
* Never auto-import pools without operator or config approval
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Remote ASL mode
|
|
||||||
|
|
||||||
The overlay guarantees:
|
|
||||||
|
|
||||||
* Network tools available
|
|
||||||
* TLS roots present
|
|
||||||
* Configurable endpoint
|
|
||||||
|
|
||||||
Your tool guarantees:
|
|
||||||
|
|
||||||
* Snapshot-bounded reads
|
|
||||||
* Deterministic uploads
|
|
||||||
* Idempotent retries
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 6. What is *explicitly forbidden* in the overlay
|
|
||||||
|
|
||||||
These rules prevent disasters:
|
|
||||||
|
|
||||||
❌ Writing to `/usr`, `/bin`, `/lib`
|
|
||||||
❌ Storing state in `/etc`
|
|
||||||
❌ Auto-mounting the crashed system root
|
|
||||||
❌ Assuming ZFS exists
|
|
||||||
❌ Assuming network exists
|
|
||||||
|
|
||||||
All assumptions must be **detected, not presumed**.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 7. Why this schema works with your ASL design
|
|
||||||
|
|
||||||
This layout aligns perfectly with your specs because:
|
|
||||||
|
|
||||||
* **ASL-STORE-INDEX**
|
|
||||||
→ persistence lives outside the overlay
|
|
||||||
|
|
||||||
* **Federation**
|
|
||||||
→ domain identity is config, not state
|
|
||||||
|
|
||||||
* **PEL / TGK**
|
|
||||||
→ execution artifacts are handled like any other artifact
|
|
||||||
|
|
||||||
* **Determinism**
|
|
||||||
→ overlay never contains semantic state
|
|
||||||
|
|
||||||
The overlay is **pure capability**, not data.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 8. Summary (the one-paragraph version)
|
|
||||||
|
|
||||||
> The SystemRescue overlay should contain **only tools, config, and wiring**.
|
|
||||||
> All mutable ASL state lives either in `/var/lib/asl` (ephemeral) or in a mounted backend (`/mnt/asl/local` or remote).
|
|
||||||
> The overlay never encodes semantic state, snapshots, or artifacts — only the ability to access and produce them.
|
|
||||||
|
|
||||||
If you want, next we can:
|
|
||||||
|
|
||||||
* Turn this into a **formal overlay contract doc**
|
|
||||||
* Define a **preflight decision table**
|
|
||||||
* Or map this schema directly onto your ASL backend spec
|
|
||||||
|
|
||||||
But this layout is already “correct by construction.”
|
|
||||||
|
|
||||||
|
|
@ -1,116 +0,0 @@
|
||||||
Perfect! Here’s an example `config.yaml` for your `asl-auth-host`. This integrates domains, courtesy leases, snapshots, and SOPS bundle paths in a way that your host can start in “ready-for-pickup” mode or perform a rescue.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## `/etc/asl-auth-host/config.yaml`
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
# ASL-AUTH-HOST Configuration
|
|
||||||
# Defines domains, policies, and SOPS bundles for bootstrap or rescue
|
|
||||||
|
|
||||||
host:
|
|
||||||
name: "asl-auth-host-01"
|
|
||||||
version: "0.1"
|
|
||||||
mode: "rescue" # modes: "rescue" | "admission" | "normal"
|
|
||||||
|
|
||||||
domains:
|
|
||||||
common:
|
|
||||||
id: "00000000-0000-0000-0000-000000000001" # Courtesy/common domain
|
|
||||||
type: "courtesy"
|
|
||||||
description: "Shared courtesy domain for new users or bootstrapped material"
|
|
||||||
path: "/var/lib/asl/common"
|
|
||||||
snapshot_retention: 30d
|
|
||||||
allowed_operations:
|
|
||||||
- read
|
|
||||||
- write
|
|
||||||
- append
|
|
||||||
courtesy_lease: 7d # Default grace period for newcomers
|
|
||||||
personal:
|
|
||||||
id: "00000000-0000-0000-0000-000000000002" # Personal private domain
|
|
||||||
type: "private"
|
|
||||||
description: "Private domain for rescued material or user-owned data"
|
|
||||||
path: "/var/lib/asl/personal"
|
|
||||||
snapshot_retention: 90d
|
|
||||||
allowed_operations:
|
|
||||||
- read
|
|
||||||
- write
|
|
||||||
- append
|
|
||||||
- seal
|
|
||||||
- gc
|
|
||||||
|
|
||||||
certificates:
|
|
||||||
root_offline_path: "/var/lib/asl/certs/root-offline"
|
|
||||||
domain_authority_path: "/var/lib/asl/certs/domain-authority"
|
|
||||||
sops_bundle_path: "/var/lib/asl/certs/sops"
|
|
||||||
|
|
||||||
policy:
|
|
||||||
hash_file: "/etc/asl-auth-host/policy.hash"
|
|
||||||
description: "Offline policy hash used to verify compliance before admission or rescue"
|
|
||||||
|
|
||||||
logging:
|
|
||||||
path: "/var/log/asl-auth-host.log"
|
|
||||||
level: "INFO"
|
|
||||||
|
|
||||||
store:
|
|
||||||
type: "zfs" # or "posix"
|
|
||||||
pools:
|
|
||||||
- name: "common_pool"
|
|
||||||
mount_point: "/var/lib/asl/common"
|
|
||||||
- name: "personal_pool"
|
|
||||||
mount_point: "/var/lib/asl/personal"
|
|
||||||
enable_snapshotting: true
|
|
||||||
snapshot_prefix: "asl_snap"
|
|
||||||
|
|
||||||
# Optional hooks for init scripts
|
|
||||||
hooks:
|
|
||||||
pre_start: "/bin/init-asl-host.sh"
|
|
||||||
post_start: "/bin/helper-mount.sh"
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Notes:
|
|
||||||
|
|
||||||
1. **`host.mode`**:
|
|
||||||
|
|
||||||
* `"rescue"` → SystemRescue boot with ready-for-pickup for old material.
|
|
||||||
* `"admission"` → Host expects to receive a DAM and SOPS bundle for new personal domain.
|
|
||||||
* `"normal"` → Standard operation with personal domain active.
|
|
||||||
|
|
||||||
2. **Domains**:
|
|
||||||
|
|
||||||
* **Common**: Courtesy domain, short-term leases for newcomers.
|
|
||||||
* **Personal**: Private domain, snapshots and sealing enabled.
|
|
||||||
|
|
||||||
3. **Certificates**:
|
|
||||||
|
|
||||||
* Paths to offline root certs, DAM bundles, and SOPS bundles.
|
|
||||||
|
|
||||||
4. **Policy hash**:
|
|
||||||
|
|
||||||
* Offline verification ensures host doesn’t act on incompatible policies.
|
|
||||||
|
|
||||||
5. **Store config**:
|
|
||||||
|
|
||||||
* Can be POSIX or ZFS-based.
|
|
||||||
* Supports snapshotting for deterministic recovery.
|
|
||||||
|
|
||||||
6. **Hooks**:
|
|
||||||
|
|
||||||
* Allows you to initialize ZFS pools, mount overlays, or start ASL binaries.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
This config gives you a **bootable, ready-for-pickup SystemRescue node** that can handle:
|
|
||||||
|
|
||||||
* Receiving old data
|
|
||||||
* Creating your personal domain
|
|
||||||
* Storing material safely in courtesy/common domain
|
|
||||||
* Verifying offline DAM bundles before admission
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
I can also **draft the accompanying init script (`init-asl-host.sh`)** that reads this config, sets up domains, mounts pools, and prepares the store for immediate rescue or admission.
|
|
||||||
|
|
||||||
Do you want me to do that next?
|
|
||||||
|
|
||||||
|
|
@ -1,112 +0,0 @@
|
||||||
Perfect! Here’s a **concrete directory layout blueprint** for your `asl-auth-host` ISO + overlay, ready to drop in binaries, certificates, and configuration. This integrates the concepts we discussed: domains, certificates, personal/common datasets, and the overlay structure.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ASL-AUTH-HOST ISO + Overlay Directory Layout
|
|
||||||
|
|
||||||
```
|
|
||||||
/iso_root/ # Root of ISO filesystem (from debootstrap)
|
|
||||||
/bin/ # Executables
|
|
||||||
asl-auth-host # Main host binary
|
|
||||||
asl-rescue # Rescue binary
|
|
||||||
init-asl-host.sh # Init script to bootstrap datasets & services
|
|
||||||
helper-mount.sh # Optional helper scripts
|
|
||||||
/etc/
|
|
||||||
asl-auth-host/
|
|
||||||
config.yaml # Host config (domains, policies, SOPS paths)
|
|
||||||
policy.hash # Optional policy hash for offline validation
|
|
||||||
/var/lib/asl/ # ASL storage root
|
|
||||||
common/ # Courtesy/common domain data
|
|
||||||
blocks/ # Encrypted blocks or artifacts
|
|
||||||
index/ # Store index for common domain
|
|
||||||
snapshots/ # Snapshots for deterministic reconstruction
|
|
||||||
logs/ # Append-only log
|
|
||||||
personal/ # Personal domain data
|
|
||||||
blocks/ # Encrypted personal blocks
|
|
||||||
index/
|
|
||||||
snapshots/
|
|
||||||
logs/
|
|
||||||
pools/ # Placeholder directories for ZFS datasets if used
|
|
||||||
/var/lib/asl/certs/ # Certificates and DAM bundles
|
|
||||||
root-offline/ # Offline root certs
|
|
||||||
domain-authority/ # Signed DAM bundles
|
|
||||||
sops/ # Optional SOPS bundles
|
|
||||||
/var/log/ # Host logs
|
|
||||||
asl-auth-host.log
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Notes
|
|
||||||
|
|
||||||
1. **ISO Root (`/iso_root`)**
|
|
||||||
|
|
||||||
* Populated via debootstrap in Debian container. Overlay merges your binaries and directory structure.
|
|
||||||
|
|
||||||
2. **Binaries (`/bin`)**
|
|
||||||
|
|
||||||
* Place `asl-auth-host` and `asl-rescue` here.
|
|
||||||
* Init scripts can handle mounting ZFS datasets or preparing `/var/lib/asl` before starting the store.
|
|
||||||
|
|
||||||
3. **Host Configuration (`/etc/asl-auth-host`)**
|
|
||||||
|
|
||||||
* `config.yaml` contains domain IDs, policies, and SOPS bundle paths.
|
|
||||||
* `policy.hash` allows offline verification of policies before admission.
|
|
||||||
|
|
||||||
4. **ASL Storage (`/var/lib/asl`)**
|
|
||||||
|
|
||||||
* **Common**: Courtesy domain with pre-seeded blocks/artifacts.
|
|
||||||
* **Personal**: New private domain for rescued material.
|
|
||||||
* **Pools**: Reserved for mounting ZFS pools when booted.
|
|
||||||
|
|
||||||
5. **Certificates (`/var/lib/asl/certs`)**
|
|
||||||
|
|
||||||
* Offline roots for verifying DAM signatures.
|
|
||||||
* Domain authority DAM bundles received via SOPS.
|
|
||||||
|
|
||||||
6. **Logging (`/var/log`)**
|
|
||||||
|
|
||||||
* Minimal logs for host activity, index writes, and rescue operations.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Optional: Overlay Sub-structure for Development
|
|
||||||
|
|
||||||
```
|
|
||||||
/overlay/
|
|
||||||
bin/
|
|
||||||
asl-auth-host
|
|
||||||
asl-rescue
|
|
||||||
init-asl-host.sh
|
|
||||||
etc/
|
|
||||||
asl-auth-host/config.yaml
|
|
||||||
asl-auth-host/policy.hash
|
|
||||||
var/
|
|
||||||
lib/
|
|
||||||
asl/
|
|
||||||
common/
|
|
||||||
personal/
|
|
||||||
pools/
|
|
||||||
certs/
|
|
||||||
log/
|
|
||||||
```
|
|
||||||
|
|
||||||
*This overlay merges into `/iso_root` during ISO build.*
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
This layout **supports bootstrapping a personal domain from scratch**, seeding the courtesy/common domain, and later integrating offline DAM bundles. It also keeps your binaries and helper scripts isolated in `/bin` and `/etc` configs clean.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
I can also **draft an example `config.yaml` for the host** showing:
|
|
||||||
|
|
||||||
* Domain IDs
|
|
||||||
* Courtesy lease definitions
|
|
||||||
* Default SOPS bundle paths
|
|
||||||
* Snapshot/retention policies
|
|
||||||
|
|
||||||
…so your host is ready to pick up a new domain or rescued data.
|
|
||||||
|
|
||||||
Do you want me to draft that next?
|
|
||||||
|
|
||||||
|
|
@ -1,291 +0,0 @@
|
||||||
Absolutely. Below is a **formal threat model write-up** for the system as it now stands. This is **not theoretical**; it is written to match your exact design choices, maturity level, and operational reality.
|
|
||||||
|
|
||||||
I’ll keep it structured, explicit, and grounded.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# ASL-AUTH-HOST v0.1 — Threat Model
|
|
||||||
|
|
||||||
## 1. Scope and Assumptions
|
|
||||||
|
|
||||||
### 1.1 In Scope
|
|
||||||
|
|
||||||
This threat model covers:
|
|
||||||
|
|
||||||
* **Offline ASL-AUTH-HOST**
|
|
||||||
* USB-mediated intake and output
|
|
||||||
* PEL execution
|
|
||||||
* Receipt (PER) generation and signing
|
|
||||||
* Domain admission and rescue bootstrap
|
|
||||||
* Published artifact creation
|
|
||||||
|
|
||||||
### 1.2 Explicit Assumptions
|
|
||||||
|
|
||||||
1. **Physical access = ultimate trust boundary**
|
|
||||||
|
|
||||||
* The attacker may have physical access to USB media.
|
|
||||||
* The attacker may *not* have unsupervised access to the auth host hardware.
|
|
||||||
|
|
||||||
2. **Auth host is air-gapped**
|
|
||||||
|
|
||||||
* No network interfaces.
|
|
||||||
* No radios.
|
|
||||||
* No background services.
|
|
||||||
|
|
||||||
3. **Offline root keys are uncompromised**
|
|
||||||
|
|
||||||
* Root compromise is **out of scope** (catastrophic).
|
|
||||||
|
|
||||||
4. **Operator is present**
|
|
||||||
|
|
||||||
* Console interaction is intentional and visible.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 2. Assets to Protect
|
|
||||||
|
|
||||||
| Asset | Description |
|
|
||||||
| ------------------------- | ------------------------------ |
|
|
||||||
| Root authority keys | Domain trust anchors |
|
|
||||||
| Domain signing keys | Used to mint DAMs and receipts |
|
|
||||||
| Execution receipts (PERs) | Portable truth of execution |
|
|
||||||
| Published artifacts | Immutable outputs |
|
|
||||||
| Domain identity | Correct domain binding |
|
|
||||||
| Policy hash | Guarantees semantic compliance |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 3. Adversary Model
|
|
||||||
|
|
||||||
### 3.1 Adversary Capabilities
|
|
||||||
|
|
||||||
The attacker may:
|
|
||||||
|
|
||||||
* Supply malicious USB content
|
|
||||||
* Replay old requests
|
|
||||||
* Attempt malformed PEL programs
|
|
||||||
* Attempt filesystem abuse via USB
|
|
||||||
* Attempt to confuse domain identity
|
|
||||||
* Attempt to exfiltrate private artifacts
|
|
||||||
|
|
||||||
The attacker **cannot**:
|
|
||||||
|
|
||||||
* Inject network traffic
|
|
||||||
* Modify host binaries (unless physical compromise)
|
|
||||||
* Access signing keys without operator approval
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 4. Trust Boundaries
|
|
||||||
|
|
||||||
```
|
|
||||||
[ USB ] ────(read-only)────> [ AUTH HOST ]
|
|
||||||
|
|
|
||||||
| (PEL execution)
|
|
||||||
v
|
|
||||||
[ ASL Store ]
|
|
||||||
|
|
|
||||||
└──> (write-only) → [ USB RESPONSE ]
|
|
||||||
```
|
|
||||||
|
|
||||||
**Critical principle**:
|
|
||||||
|
|
||||||
> Data flows in one direction per phase, never bidirectional.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 5. Threat Analysis (STRIDE-like)
|
|
||||||
|
|
||||||
### 5.1 Spoofing
|
|
||||||
|
|
||||||
**Threat:**
|
|
||||||
Fake domain requests or forged admission.
|
|
||||||
|
|
||||||
**Mitigations:**
|
|
||||||
|
|
||||||
* Manifest + signature verification
|
|
||||||
* Policy hash enforcement
|
|
||||||
* Offline root verification
|
|
||||||
* Domain IDs generated and signed by authority
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 5.2 Tampering
|
|
||||||
|
|
||||||
**Threat:**
|
|
||||||
USB content modified to alter inputs or outputs.
|
|
||||||
|
|
||||||
**Mitigations:**
|
|
||||||
|
|
||||||
* Intake is read-only
|
|
||||||
* Hashes over all inputs
|
|
||||||
* Response signature covers:
|
|
||||||
|
|
||||||
* Request manifest hash
|
|
||||||
* Receipt hash
|
|
||||||
* Published artifact hashes
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 5.3 Repudiation
|
|
||||||
|
|
||||||
**Threat:**
|
|
||||||
Requester denies what was executed.
|
|
||||||
|
|
||||||
**Mitigations:**
|
|
||||||
|
|
||||||
* Receipt includes:
|
|
||||||
|
|
||||||
* Program hash
|
|
||||||
* Input hashes
|
|
||||||
* Snapshot ID
|
|
||||||
* Receipt signed by authority
|
|
||||||
* Deterministic replay possible
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 5.4 Information Disclosure
|
|
||||||
|
|
||||||
**Threat:**
|
|
||||||
Private data leaks from auth host.
|
|
||||||
|
|
||||||
**Mitigations:**
|
|
||||||
|
|
||||||
* No shell access to arbitrary tools
|
|
||||||
* No network
|
|
||||||
* Explicit publish rules
|
|
||||||
* Unpublished artifacts never leave host
|
|
||||||
* Encrypted blocks allowed in public domains
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 5.5 Denial of Service
|
|
||||||
|
|
||||||
**Threat:**
|
|
||||||
USB floods, huge inputs, malformed PEL.
|
|
||||||
|
|
||||||
**Mitigations:**
|
|
||||||
|
|
||||||
* Operator-mediated execution
|
|
||||||
* Explicit size limits in manifest
|
|
||||||
* Deterministic PEL subset
|
|
||||||
* No automatic execution
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 5.6 Elevation of Privilege
|
|
||||||
|
|
||||||
**Threat:**
|
|
||||||
PEL program escapes sandbox or invokes host capabilities.
|
|
||||||
|
|
||||||
**Mitigations:**
|
|
||||||
|
|
||||||
* PEL is declarative
|
|
||||||
* No exec, no syscalls, no I/O primitives
|
|
||||||
* Host enforces operator whitelist of ops
|
|
||||||
* Canonical PEL interpreter only
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 6. Specific High-Risk Scenarios
|
|
||||||
|
|
||||||
### 6.1 Malicious USB with filesystem exploits
|
|
||||||
|
|
||||||
**Mitigation:**
|
|
||||||
|
|
||||||
* Mount read-only
|
|
||||||
* No traversal outside `/REQUEST`
|
|
||||||
* No symlink following
|
|
||||||
* No execution from USB
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 6.2 Replay of old admission request
|
|
||||||
|
|
||||||
**Mitigation:**
|
|
||||||
|
|
||||||
* `request_id` uniqueness
|
|
||||||
* Receipt records snapshot
|
|
||||||
* Authority tracks processed request IDs
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 6.3 Confused domain attack
|
|
||||||
|
|
||||||
**Threat:**
|
|
||||||
Attacker attempts to get artifacts bound to wrong domain.
|
|
||||||
|
|
||||||
**Mitigation:**
|
|
||||||
|
|
||||||
* Domain ID assigned by authority
|
|
||||||
* Domain binding part of receipt hash
|
|
||||||
* No requester-supplied domain ID is trusted
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 6.4 Side-channel via timing or output size
|
|
||||||
|
|
||||||
**Mitigation:**
|
|
||||||
|
|
||||||
* Coarse-grained execution
|
|
||||||
* Deterministic output
|
|
||||||
* Optional output padding
|
|
||||||
|
|
||||||
(Residual risk acknowledged but acceptable.)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 7. What This Model Explicitly Does *Not* Protect Against
|
|
||||||
|
|
||||||
| Out of Scope | Reason |
|
|
||||||
| --------------------------- | -------------- |
|
|
||||||
| Physical compromise of host | Catastrophic |
|
|
||||||
| Malicious operator | Social problem |
|
|
||||||
| Root key exfiltration | Ends trust |
|
|
||||||
| Covert EM attacks | Beyond scope |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 8. Security Posture Summary
|
|
||||||
|
|
||||||
**Strengths:**
|
|
||||||
|
|
||||||
* Minimal attack surface
|
|
||||||
* Explicit authority boundaries
|
|
||||||
* Deterministic execution
|
|
||||||
* Portable, signed truth (PER)
|
|
||||||
* No ambient trust
|
|
||||||
|
|
||||||
**Residual risks:**
|
|
||||||
|
|
||||||
* Physical compromise
|
|
||||||
* Operator error
|
|
||||||
* Supply-chain attacks on binaries
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 9. Alignment With Your Design Philosophy
|
|
||||||
|
|
||||||
This system:
|
|
||||||
|
|
||||||
* Treats **authority as a press, not a server**
|
|
||||||
* Treats **data as artifacts, not files**
|
|
||||||
* Treats **execution as a receipt, not a side effect**
|
|
||||||
* Treats **trust as explicit and finite**
|
|
||||||
|
|
||||||
It is **hard to misuse**, **easy to audit**, and **honest about its limits**.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 10. Recommended Next Documents (in order)
|
|
||||||
|
|
||||||
1. **PEL canonical encoding spec**
|
|
||||||
2. **Receipt canonicalization & hash rules**
|
|
||||||
3. **DAM final schema**
|
|
||||||
4. **Operator checklist (human protocol)**
|
|
||||||
5. **Minimal reference implementation**
|
|
||||||
|
|
||||||
If you want, next I can write the **operator checklist**, which is often the missing piece that keeps systems like this safe in practice.
|
|
||||||
|
|
||||||
Just say the word.
|
|
||||||
|
|
||||||
|
|
@ -1,182 +0,0 @@
|
||||||
Here’s a first draft for **ASL-AUTH-HOST v0.1** — the profile for an authority node that is structurally similar to a SystemRescue node but configured for offline, auditable domain authority operations.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# ASL-AUTH-HOST v0.1 — Authority Node Profile
|
|
||||||
|
|
||||||
## 1. Purpose
|
|
||||||
|
|
||||||
Defines the **host-level profile** for a Domain Authority Node (DAN) in the ASL ecosystem.
|
|
||||||
This profile ensures that the authority node:
|
|
||||||
|
|
||||||
* Operates **offline**
|
|
||||||
* Maintains an **internal ASL-HOST store**
|
|
||||||
* Produces **deterministic artifacts and receipts**
|
|
||||||
* Supports **domain admission and certificate management**
|
|
||||||
* Can bootstrap **new personal or group domains**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 2. Core Principles
|
|
||||||
|
|
||||||
1. **All authority state is an artifact**: keys, DAM, policies, and environment claims are recorded in ASL.
|
|
||||||
2. **Offline-first**: no network dependency for core operations.
|
|
||||||
3. **Deterministic snapshots**: every operation is captured in a snapshot.
|
|
||||||
4. **Receipt-oriented**: outputs are PER artifacts ready for federation or personal import.
|
|
||||||
5. **Minimal trusted code**: authority functionality is limited to signing, sealing, and packaging artifacts.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 3. Required Components
|
|
||||||
|
|
||||||
### 3.1 ASL-HOST Store
|
|
||||||
|
|
||||||
```
|
|
||||||
/asl-host/
|
|
||||||
/domains/
|
|
||||||
/<domain-id>/
|
|
||||||
/store/ # block store
|
|
||||||
/log/ # append-only log
|
|
||||||
/snapshots/ # snapshot markers
|
|
||||||
/certs/ # locally stored authority certificates
|
|
||||||
/policies/ # policy artifacts
|
|
||||||
/dam/ # Domain Admission Manifests
|
|
||||||
```
|
|
||||||
|
|
||||||
* Supports block and index operations according to ASL-STORE semantics.
|
|
||||||
* No external federation by default.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 3.2 Authority Keys
|
|
||||||
|
|
||||||
* Root keypair generated locally per domain.
|
|
||||||
* Stored as:
|
|
||||||
|
|
||||||
* Public key artifact
|
|
||||||
* Private key artifact (encrypted on local storage)
|
|
||||||
* Optionally rotated with deterministic PEL DAGs.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 3.3 Offline Environment Claim
|
|
||||||
|
|
||||||
* Records:
|
|
||||||
|
|
||||||
* Image hash
|
|
||||||
* Boot-time environment
|
|
||||||
* Installed tool versions
|
|
||||||
* Snapshot of ASL-HOST store
|
|
||||||
* Stored as **environment claim artifact**.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 3.4 Domain Admission Manifest (DAM)
|
|
||||||
|
|
||||||
* Stored as an artifact.
|
|
||||||
* Includes:
|
|
||||||
|
|
||||||
* Domain ID
|
|
||||||
* Root key fingerprint
|
|
||||||
* Policy hash
|
|
||||||
* Optional courtesy lease references
|
|
||||||
* Signed with authority node’s root key.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 3.5 PEL Programs
|
|
||||||
|
|
||||||
* Minimal offline PEL DAGs for:
|
|
||||||
|
|
||||||
* Signing DAMs
|
|
||||||
* Generating PER receipts
|
|
||||||
* Packaging SOPS bundles
|
|
||||||
* Executed **deterministically** from snapshots.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 4. Operation Modes
|
|
||||||
|
|
||||||
| Mode | Description |
|
|
||||||
| --------------- | ------------------------------------------------------------------------------------ |
|
|
||||||
| **Genesis** | Create first domain for personal use; generate DAM, root keys, and policy artifacts. |
|
|
||||||
| **Rescue** | Accept input artifacts (old data, files, or device images) and produce PER receipts. |
|
|
||||||
| **Admission** | Sign DAMs and package SOPS bundles for new nodes entering the ecosystem. |
|
|
||||||
| **Maintenance** | Rotate keys, refresh policies, seal snapshots, audit artifacts. |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 5. Snapshot and Logging
|
|
||||||
|
|
||||||
* Every operation produces:
|
|
||||||
|
|
||||||
* New blocks for artifacts
|
|
||||||
* Append-only log entries
|
|
||||||
* Snapshot marker capturing CURRENT state
|
|
||||||
* Snapshots are **immutable** and form the basis for deterministic PER generation.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 6. Authority-Only Constraints
|
|
||||||
|
|
||||||
* No network communication.
|
|
||||||
* No automatic federation.
|
|
||||||
* All outputs are artifacts for later import or distribution.
|
|
||||||
* Garbage collection is disabled; nothing may be deleted from genesis snapshot onward.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 7. Security Considerations
|
|
||||||
|
|
||||||
* Root private keys **must** remain offline.
|
|
||||||
* Environment claim artifacts allow **proof of image integrity** and operational reproducibility.
|
|
||||||
* Courtesy leases (optional) allow temporary storage for new personal domains under common domain supervision.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 8. Output Artifacts
|
|
||||||
|
|
||||||
| Artifact Type | Description |
|
|
||||||
| -------------------------- | ---------------------------------------------------------------- |
|
|
||||||
| Root key artifact | Public/private keypair for domain signing. |
|
|
||||||
| DAM artifact | Domain Admission Manifest, signed. |
|
|
||||||
| Policy artifact | Hash of accepted policies and operational contracts. |
|
|
||||||
| Environment claim artifact | Immutable claim of offline environment state. |
|
|
||||||
| PER artifact | Receipt confirming DAM or policy execution. |
|
|
||||||
| SOPS bundle | Encrypted and portable bundle for admission or personal archive. |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 9. Bootstrapping Flow
|
|
||||||
|
|
||||||
1. Boot ASL-AUTH-HOST image offline.
|
|
||||||
2. Initialize local ASL-HOST store.
|
|
||||||
3. Generate root keypair artifact.
|
|
||||||
4. Create DAM artifact, sign with root key.
|
|
||||||
5. Produce environment claim artifact.
|
|
||||||
6. Seal snapshot (`genesis snapshot`).
|
|
||||||
7. Generate PER receipts for DAM and environment.
|
|
||||||
8. Optionally export SOPS bundle for new nodes or personal import.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 10. Relationship to SystemRescue Node
|
|
||||||
|
|
||||||
* Uses same OS image base.
|
|
||||||
* ASL-HOST store layout is identical.
|
|
||||||
* Only differs in:
|
|
||||||
|
|
||||||
* Authority keys presence
|
|
||||||
* Offline-only policy
|
|
||||||
* Deterministic signing and SOPS bundle generation
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
This draft defines the **authority node as a first-class ASL-HOST**, offline, deterministic, and auditable, ready to issue DAMs, PERs, and SOPS bundles for new personal domains or rescue operations.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
If you want, I can **draft the exact on-disk block layout for ASL-AUTH-HOST**, showing directories, artifact blocks, log files, snapshots, DAMs, and policy files, similar to a precise filesystem blueprint for bootstrapping. This would make it fully tangible for your SystemRescue image.
|
|
||||||
|
|
||||||
Do you want me to do that next?
|
|
||||||
|
|
||||||
|
|
@ -1,172 +0,0 @@
|
||||||
Here’s a clean **v0.1 draft for ASL-HOST**, scoped to what we discussed — minimal, environment-focused, without touching semantics or storage encoding. This is the runtime/host interface layer that bridges ASL-STORE(-INDEX) to a real system.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# ASL-HOST v0.1 – Host/Runtime Interface for ASL Stores
|
|
||||||
|
|
||||||
## 1. Purpose
|
|
||||||
|
|
||||||
**ASL-HOST** specifies the **runtime contract** between an ASL store and the host environment.
|
|
||||||
It defines **what the host must provide** for an ASL store to operate correctly, without imposing:
|
|
||||||
|
|
||||||
* Storage semantics
|
|
||||||
* Encoding
|
|
||||||
* Policy
|
|
||||||
* Security beyond minimal integrity guarantees
|
|
||||||
|
|
||||||
It supports **POSIX filesystems, ZFS, object stores**, or other backing layers.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 2. Core Concepts
|
|
||||||
|
|
||||||
| Concept | Definition |
|
|
||||||
| ----------------- | ------------------------------------------------------------------------- |
|
|
||||||
| **StoreHandle** | Opaque reference to a host-provided store instance |
|
|
||||||
| **StoreLocation** | Host-defined location where a store exists (path, URI, mount point, etc.) |
|
|
||||||
| **AppendUnit** | Minimum atomic write unit for the append-only log |
|
|
||||||
| **SnapshotID** | Opaque identifier of a host-provided snapshot |
|
|
||||||
| **HostClock** | Monotonic counter or timestamp source |
|
|
||||||
| **HostIdentity** | Unique machine or user identity for signing or domain minting |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 3. Store Instantiation
|
|
||||||
|
|
||||||
### 3.1 Store Creation
|
|
||||||
|
|
||||||
* `CreateStore(location: StoreLocation) → StoreHandle`
|
|
||||||
* Must guarantee crash-consistent initialization.
|
|
||||||
* Location may be:
|
|
||||||
|
|
||||||
* POSIX path
|
|
||||||
* ZFS dataset
|
|
||||||
* Object store bucket
|
|
||||||
* StoreHandle is **opaque**, only valid while the store exists on host.
|
|
||||||
|
|
||||||
### 3.2 Store Open
|
|
||||||
|
|
||||||
* `OpenStore(location: StoreLocation) → StoreHandle`
|
|
||||||
* Host must provide durable, consistent view.
|
|
||||||
* Opening an existing store must not corrupt previous data.
|
|
||||||
|
|
||||||
### 3.3 Store Close
|
|
||||||
|
|
||||||
* `CloseStore(store: StoreHandle)`
|
|
||||||
* Ensures all writes are persisted to durable media.
|
|
||||||
* Optional: triggers host-specific flush or checkpoint.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 4. Atomic Append / Log Operations
|
|
||||||
|
|
||||||
* Host must provide **atomic append** semantics.
|
|
||||||
* Minimum guarantees:
|
|
||||||
|
|
||||||
* Sequential ordering (logseq monotonicity)
|
|
||||||
* Crash consistency (partial writes are not visible)
|
|
||||||
* AppendUnit:
|
|
||||||
|
|
||||||
* Defined by host; could be page-size or object-size
|
|
||||||
* ASL-STORE must tolerate host’s granularity
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 5. Snapshot Management
|
|
||||||
|
|
||||||
* Optional but recommended.
|
|
||||||
* Host provides:
|
|
||||||
|
|
||||||
* `CreateSnapshot(store: StoreHandle) → SnapshotID`
|
|
||||||
* `MountSnapshot(store: StoreHandle, id: SnapshotID) → StoreHandle`
|
|
||||||
* Guarantees:
|
|
||||||
|
|
||||||
* Snapshot captures a consistent view of sealed blocks
|
|
||||||
* Mounting snapshot produces read-only store handle
|
|
||||||
* Host may use:
|
|
||||||
|
|
||||||
* ZFS snapshot
|
|
||||||
* POSIX filesystem copy-on-write overlay
|
|
||||||
* Object store versioning
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 6. Durability & Crash Semantics
|
|
||||||
|
|
||||||
* Host must ensure:
|
|
||||||
|
|
||||||
* Writes are durable after append or flush
|
|
||||||
* Crash recovery restores store to last durable state
|
|
||||||
* Open, unsealed blocks may be lost without breaking invariants
|
|
||||||
* StoreHandle and append-only log are **atomic units** visible to ASL-STORE
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 7. Minimal Identity & Logging
|
|
||||||
|
|
||||||
* Host must provide:
|
|
||||||
|
|
||||||
* `HostClock()` → monotonic timestamp / counter
|
|
||||||
* `HostIdentity()` → machine or user ID for signing / domain minting
|
|
||||||
* Optional log for debugging or auditing
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 8. Error Semantics
|
|
||||||
|
|
||||||
* Operations may return:
|
|
||||||
|
|
||||||
* `STORE_OK`
|
|
||||||
* `STORE_EXISTS`
|
|
||||||
* `STORE_NOT_FOUND`
|
|
||||||
* `STORE_IO_ERROR`
|
|
||||||
* `STORE_CONCURRENT_MODIFICATION`
|
|
||||||
* ASL-STORE must handle errors deterministically
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 9. Security Considerations
|
|
||||||
|
|
||||||
* ASL-HOST does **not enforce cryptography**.
|
|
||||||
* Host may provide optional:
|
|
||||||
|
|
||||||
* Encryption at rest
|
|
||||||
* Access control
|
|
||||||
* Secure snapshot mechanisms
|
|
||||||
* Certificates and trust are handled in **ASL-AUTH**, separate layer
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 10. Example Implementations
|
|
||||||
|
|
||||||
| Backend | How ASL-HOST maps |
|
|
||||||
| ---------------- | ---------------------------------------------------------------------------------- |
|
|
||||||
| POSIX filesystem | StoreLocation = path; append = write+fsync; snapshot = overlayfs copy |
|
|
||||||
| ZFS dataset | StoreLocation = dataset; append = zfs sync; snapshot = zfs snapshot |
|
|
||||||
| Object store | StoreLocation = bucket/namespace; append = object PUT; snapshot = versioned bucket |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 11. Versioning
|
|
||||||
|
|
||||||
* Spec version: **0.1**
|
|
||||||
* Backward incompatible changes must bump major version.
|
|
||||||
* Minimal compliance: implement store creation/open/close and append guarantees.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 12. Summary
|
|
||||||
|
|
||||||
**ASL-HOST v0.1**:
|
|
||||||
|
|
||||||
* Defines **runtime contract** between ASL store and host
|
|
||||||
* Provides **store handles, atomic append, snapshots, identity**
|
|
||||||
* Layered cleanly above ASL-STORE(-INDEX), below system or OS
|
|
||||||
* Keeps **semantics, encoding, and trust separate**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
If you like, I can **draft ASL-AUTH v0.1** next, and then show how **SystemRescue could instantiate ASL-HOST with POSIX/ZFS to seed a personal domain**. That would give a complete view for your rescue scenario.
|
|
||||||
|
|
||||||
Do you want me to do that next?
|
|
||||||
|
|
||||||
|
|
@ -1,317 +0,0 @@
|
||||||
Good — this is the right integration point.
|
|
||||||
What follows is a **clean, minimal integration of DAP + DAM + Courtesy Leases into ASL-HOST**, without leaking authority into ASL-CORE or policy into ASL-STORE.
|
|
||||||
|
|
||||||
Think of **ASL-HOST as the membrane** where *authority, storage, and execution meet but do not mix*.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# ASL-HOST v0.1 (Integrated with Admission & Authority)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 1. Purpose of ASL-HOST
|
|
||||||
|
|
||||||
**ASL-HOST defines the responsibilities of a node that hosts ASL domains.**
|
|
||||||
|
|
||||||
It is responsible for:
|
|
||||||
|
|
||||||
* Domain lifecycle
|
|
||||||
* Admission and recognition
|
|
||||||
* Block and log materialization
|
|
||||||
* Snapshot discipline
|
|
||||||
* Resource enforcement
|
|
||||||
* Separation of authority from storage semantics
|
|
||||||
|
|
||||||
It explicitly does **not** define:
|
|
||||||
|
|
||||||
* Artifact encoding (ASL-CORE)
|
|
||||||
* Index layout (ENC-ASL-STORE)
|
|
||||||
* PER or TGK semantics (PEL / TGK layers)
|
|
||||||
* Cryptographic algorithms (delegated to ASL-AUTH)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 2. ASL-HOST Position in the Stack
|
|
||||||
|
|
||||||
```
|
|
||||||
+-------------------------+
|
|
||||||
| ASL-AUTH | ← identity, keys, policy
|
|
||||||
+-------------------------+
|
|
||||||
| ASL-HOST | ← THIS SPEC
|
|
||||||
+-------------------------+
|
|
||||||
| ASL-STORE / INDEX | ← blocks, logs, snapshots
|
|
||||||
+-------------------------+
|
|
||||||
| ASL-CORE / PEL / TGK | ← semantics & execution
|
|
||||||
+-------------------------+
|
|
||||||
| Filesystem / ZFS / POSIX|
|
|
||||||
+-------------------------+
|
|
||||||
```
|
|
||||||
|
|
||||||
ASL-HOST is where **domains become real**.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 3. Domain Lifecycle in ASL-HOST
|
|
||||||
|
|
||||||
### 3.1 Domain States
|
|
||||||
|
|
||||||
```text
|
|
||||||
UNRECOGNIZED
|
|
||||||
ADMITTED (COURTESY)
|
|
||||||
ADMITTED (FULL)
|
|
||||||
SUSPENDED
|
|
||||||
REVOKED
|
|
||||||
```
|
|
||||||
|
|
||||||
ASL-HOST tracks domain state explicitly.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 3.2 Domain Creation (Local)
|
|
||||||
|
|
||||||
A domain MAY be created locally without admission:
|
|
||||||
|
|
||||||
```text
|
|
||||||
asl-host domain create
|
|
||||||
```
|
|
||||||
|
|
||||||
This creates:
|
|
||||||
|
|
||||||
* DomainID
|
|
||||||
* Empty storage namespace
|
|
||||||
* Empty log
|
|
||||||
* No external recognition
|
|
||||||
|
|
||||||
This domain is **self-contained only**.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 4. Domain Admission Integration (DAP)
|
|
||||||
|
|
||||||
### 4.1 Admission Request Handling
|
|
||||||
|
|
||||||
ASL-HOST MUST provide:
|
|
||||||
|
|
||||||
```c
|
|
||||||
AdmissionResult asl_host_admit(DAM, signature, request);
|
|
||||||
```
|
|
||||||
|
|
||||||
Responsibilities:
|
|
||||||
|
|
||||||
* Validate DAM schema
|
|
||||||
* Verify signature
|
|
||||||
* Check policy compatibility
|
|
||||||
* Decide admission outcome
|
|
||||||
|
|
||||||
ASL-HOST does **not** inspect artifacts.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 4.2 Admission Outcome Effects
|
|
||||||
|
|
||||||
| Outcome | ASL-HOST Behavior |
|
|
||||||
| ---------------- | --------------------------------------- |
|
|
||||||
| ACCEPTED | Enable publishing, indexing, federation |
|
|
||||||
| ACCEPTED_LIMITED | Enable courtesy-only storage |
|
|
||||||
| DEFERRED | Domain exists but blocked |
|
|
||||||
| REJECTED | Domain remains isolated |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 5. Courtesy Leases in ASL-HOST
|
|
||||||
|
|
||||||
### 5.1 Courtesy Lease Attachment
|
|
||||||
|
|
||||||
A courtesy lease is **attached to a domain in ASL-HOST**, not to ASL-STORE.
|
|
||||||
|
|
||||||
```text
|
|
||||||
Domain {
|
|
||||||
domain_id
|
|
||||||
admission_state
|
|
||||||
courtesy_lease?
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 5.2 Enforcement Responsibilities
|
|
||||||
|
|
||||||
ASL-HOST MUST enforce:
|
|
||||||
|
|
||||||
* Storage limits
|
|
||||||
* Snapshot count
|
|
||||||
* Lease expiry
|
|
||||||
* Encryption-only constraint (if specified)
|
|
||||||
|
|
||||||
ASL-STORE must **not** be aware of courtesy semantics.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 5.3 Courtesy Lease Expiry
|
|
||||||
|
|
||||||
On expiry, ASL-HOST MAY:
|
|
||||||
|
|
||||||
* unpin snapshots
|
|
||||||
* block new writes
|
|
||||||
* mark domain as SUSPENDED
|
|
||||||
|
|
||||||
ASL-STORE is not required to preserve data.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 6. StoreHandle Integration
|
|
||||||
|
|
||||||
### 6.1 StoreHandle Is Scoped to a Domain
|
|
||||||
|
|
||||||
ASL-HOST provides:
|
|
||||||
|
|
||||||
```c
|
|
||||||
StoreHandle *asl_host_open_domain(domain_id);
|
|
||||||
```
|
|
||||||
|
|
||||||
The StoreHandle is:
|
|
||||||
|
|
||||||
* domain-scoped
|
|
||||||
* snapshot-aware
|
|
||||||
* admission-aware
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 6.2 Admission-Gated Capabilities
|
|
||||||
|
|
||||||
Capabilities exposed via StoreHandle depend on admission state:
|
|
||||||
|
|
||||||
| Capability | Courtesy | Full |
|
|
||||||
| ---------------- | -------- | ---- |
|
|
||||||
| allocate_block | yes | yes |
|
|
||||||
| seal_block | yes | yes |
|
|
||||||
| append_log | yes | yes |
|
|
||||||
| publish_snapshot | no | yes |
|
|
||||||
| federate_log | no | yes |
|
|
||||||
|
|
||||||
ASL-CORE and PEL never see this distinction.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 7. Snapshots and CURRENT (ASL-HOST Role)
|
|
||||||
|
|
||||||
ASL-HOST defines:
|
|
||||||
|
|
||||||
* Snapshot creation
|
|
||||||
* Snapshot pinning
|
|
||||||
* Snapshot association with log position
|
|
||||||
|
|
||||||
ASL-HOST guarantees:
|
|
||||||
|
|
||||||
```text
|
|
||||||
CURRENT = snapshot + replay(log)
|
|
||||||
```
|
|
||||||
|
|
||||||
This is **host-level truth**, not an ASL-CORE concern.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 8. Block Ownership and Movement
|
|
||||||
|
|
||||||
### 8.1 Block Ownership
|
|
||||||
|
|
||||||
Every block belongs to exactly one domain.
|
|
||||||
|
|
||||||
Block ownership is enforced by:
|
|
||||||
|
|
||||||
* filesystem layout
|
|
||||||
* StoreHandle scoping
|
|
||||||
* ASL-HOST policy
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 8.2 Block Migration Between Domains
|
|
||||||
|
|
||||||
Block migration is an **ASL-HOST operation**:
|
|
||||||
|
|
||||||
```text
|
|
||||||
asl-host migrate-block --from A --to B
|
|
||||||
```
|
|
||||||
|
|
||||||
Rules:
|
|
||||||
|
|
||||||
* Source block must be sealed
|
|
||||||
* Destination domain must accept the block
|
|
||||||
* Policy compatibility enforced
|
|
||||||
* Provenance preserved
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 9. Federation Boundary
|
|
||||||
|
|
||||||
ASL-HOST is the **only layer allowed to federate**.
|
|
||||||
|
|
||||||
It decides:
|
|
||||||
|
|
||||||
* which logs may be exported
|
|
||||||
* which snapshots may be published
|
|
||||||
* which foreign roots are trusted
|
|
||||||
|
|
||||||
ASL-STORE and ASL-CORE remain oblivious.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 10. Revocation and Suspension
|
|
||||||
|
|
||||||
ASL-HOST MAY:
|
|
||||||
|
|
||||||
* suspend a domain (stop new writes)
|
|
||||||
* revoke federation
|
|
||||||
* invalidate admission
|
|
||||||
|
|
||||||
Already-sealed artifacts remain immutable.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 11. SystemRescue Mapping (Concrete)
|
|
||||||
|
|
||||||
Your patched SystemRescue image now hosts:
|
|
||||||
|
|
||||||
* ASL-HOST runtime
|
|
||||||
* Local domains (personal, courtesy, common)
|
|
||||||
* Admission client
|
|
||||||
* Offline authority material
|
|
||||||
|
|
||||||
On boot, SystemRescue may:
|
|
||||||
|
|
||||||
1. Create a local domain
|
|
||||||
2. Load DAM + keys
|
|
||||||
3. Submit admission request
|
|
||||||
4. Receive courtesy lease
|
|
||||||
5. Begin sealed ingestion
|
|
||||||
6. Snapshot and wait
|
|
||||||
|
|
||||||
You are *literally standing ready*.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 12. Why This Integration Is Clean
|
|
||||||
|
|
||||||
✔ ASL-CORE untouched
|
|
||||||
✔ ASL-STORE unaware of authority
|
|
||||||
✔ Authority never touches block bytes
|
|
||||||
✔ Admission precedes trust
|
|
||||||
✔ Rescue and sovereign modes unified
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 13. Mental Model (One Sentence)
|
|
||||||
|
|
||||||
> **ASL-HOST is the constitutional layer that turns storage into a domain, and a domain into a participant.**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
If you want next, we can:
|
|
||||||
|
|
||||||
* define **ASL-HOST on-disk layout**
|
|
||||||
* specify **revocation propagation**
|
|
||||||
* map **PEL execution to admission state**
|
|
||||||
* or walk a **full rescue → admission → federation scenario end-to-end**
|
|
||||||
|
|
||||||
Just point the direction.
|
|
||||||
|
|
||||||
|
|
@ -1,90 +0,0 @@
|
||||||
Ah, yes — you’re right! The previous summary focused on ASL, PEL, domains, and blocks, but we also discussed **building an ASL-AUTH-HOST ISO and bootable USB workflow**. Here’s a compact recap integrated with your overall architecture:
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Bootable ASL-AUTH-HOST / USB Summary
|
|
||||||
|
|
||||||
## 1. Environment
|
|
||||||
|
|
||||||
* Start from a **minimal Debian root** (via `debootstrap`) inside a container.
|
|
||||||
* Set up:
|
|
||||||
|
|
||||||
* `$WORKDIR/iso_root` → ISO root filesystem
|
|
||||||
* `$WORKDIR/overlay` → ASL binaries, scripts, and configuration
|
|
||||||
|
|
||||||
## 2. Overlay contents
|
|
||||||
|
|
||||||
* `bin/` → `asl-auth-host`, `asl-rescue`, helper scripts
|
|
||||||
* `usr/local/bin/` → optional local tools
|
|
||||||
* `var/lib/asl/` → datasets, pools, personal/common directories
|
|
||||||
* `var/log/` → logs
|
|
||||||
* Bootloader configs (`isolinux/`)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 3. Bootable ISO creation
|
|
||||||
|
|
||||||
* Copy overlay into `$ISO_ROOT`
|
|
||||||
* Create ZFS-like dataset directories:
|
|
||||||
|
|
||||||
```
|
|
||||||
var/lib/asl/{common,personal,pools}
|
|
||||||
```
|
|
||||||
* Generate ISO via `xorriso` (or `mkisofs`) with minimal bootloader
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 4. ASL Capture Integration
|
|
||||||
|
|
||||||
* **`asl-capture`** can wrap shell or program execution
|
|
||||||
* Capture occurs **during image creation**:
|
|
||||||
|
|
||||||
* Can log everything in the host root during debootstrap + `apt-get install`
|
|
||||||
* Produces artifacts (executed commands, receipts)
|
|
||||||
* Early capture allows **provenance from the very birth of the image**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 5. USB boot workflow
|
|
||||||
|
|
||||||
1. Build ISO (`build_asl_auth_host_iso.sh`)
|
|
||||||
2. Write ISO to USB (`dd` or `rufus`/`balenaEtcher`)
|
|
||||||
3. Boot machine → `init-asl-host.sh` (custom init script)
|
|
||||||
|
|
||||||
* Mount ZFS or overlay store
|
|
||||||
* Initialize domains (Common, personal, rescue)
|
|
||||||
* Enforce witness authority / DAM at boot
|
|
||||||
* Run ASL capture to log host state
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 6. Storage & persistence on USB
|
|
||||||
|
|
||||||
* Personal domain: local USB store
|
|
||||||
* Root.alice or Common: mounted network or local store
|
|
||||||
* Snapshot management ensures deterministic state
|
|
||||||
* Blocks and artifacts are packed according to store policy
|
|
||||||
* Index/log replay reconstructs current state at boot
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 7. Key insights from discussion
|
|
||||||
|
|
||||||
* You **can capture the host from first boot** to have full provenance.
|
|
||||||
* Witness authority (DAM) is enforced **before userspace programs run**, even for Common.
|
|
||||||
* Blocks remain storage-level; artifacts remain semantic and authoritative.
|
|
||||||
* Publishing to Common happens **via root.alice**; private artifacts remain in `alice` domain.
|
|
||||||
* Bootable USB + ASL capture = deterministic, auditable host for rescue and auth purposes.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
If you want, I can **draw a full flow diagram** that shows:
|
|
||||||
|
|
||||||
```
|
|
||||||
debootstrap → overlay → ISO → USB → boot → init-asl-host → domains → ASL capture → artifacts/logs
|
|
||||||
```
|
|
||||||
|
|
||||||
…including where **root.alice, Common, and personal domains** live, and how **blocks, artifacts, and logs** interact during boot.
|
|
||||||
|
|
||||||
Do you want me to do that diagram next?
|
|
||||||
|
|
||||||
|
|
@ -1,225 +0,0 @@
|
||||||
Perfect! Here’s a draft specification for **ENC-ASL-AUTH-HOST v0.1**, the **on-disk layout and encoding** for the authority host. This complements ASL-AUTH-HOST by formalizing **how artifacts, blocks, logs, snapshots, and certificates are stored**.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# ENC-ASL-AUTH-HOST v0.1 — On-Disk Layout
|
|
||||||
|
|
||||||
## 1. Purpose
|
|
||||||
|
|
||||||
Defines the **physical and logical layout** of an ASL authority host’s storage.
|
|
||||||
Ensures:
|
|
||||||
|
|
||||||
* Deterministic artifact placement
|
|
||||||
* Snapshot-aware storage
|
|
||||||
* Offline-first operation
|
|
||||||
* Compatibility with ASL-HOST, PERs, and SOPS bundles
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 2. Root Layout
|
|
||||||
|
|
||||||
```
|
|
||||||
/asl-auth-host/
|
|
||||||
├─ /domains/
|
|
||||||
│ ├─ <domain-id>/
|
|
||||||
│ │ ├─ /store/
|
|
||||||
│ │ ├─ /log/
|
|
||||||
│ │ ├─ /snapshots/
|
|
||||||
│ │ ├─ /certs/
|
|
||||||
│ │ ├─ /policies/
|
|
||||||
│ │ └─ /dam/
|
|
||||||
├─ /tools/
|
|
||||||
│ └─ <binary-tools> # deterministic, versioned rescue/auth tools
|
|
||||||
├─ /env-claims/
|
|
||||||
│ └─ <snapshot-hash>.claim
|
|
||||||
└─ /sops-bundles/
|
|
||||||
└─ <bundle-id>.sops
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 3. Domains Directory
|
|
||||||
|
|
||||||
**`/domains/<domain-id>/`** contains all **domain-specific storage and authority artifacts**.
|
|
||||||
|
|
||||||
### 3.1 Store
|
|
||||||
|
|
||||||
```
|
|
||||||
/domains/<domain-id>/store/
|
|
||||||
├─ blocks/
|
|
||||||
│ ├─ <block-id>.bin # raw artifact bytes
|
|
||||||
│ └─ <block-id>.meta # metadata: size, type_tag, sealed_flag
|
|
||||||
├─ indices/
|
|
||||||
│ ├─ segment-<n>.idx # ASL-STORE index segments
|
|
||||||
│ └─ bloom-<n>.bf # optional bloom filters
|
|
||||||
```
|
|
||||||
|
|
||||||
* Each block is **immutable once sealed**
|
|
||||||
* Segment indices point to block IDs and offsets
|
|
||||||
* Encoding follows **ASL-STORE-INDEX + ENC-ASL-STORE(-INDEX)** rules
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 3.2 Log
|
|
||||||
|
|
||||||
```
|
|
||||||
/domains/<domain-id>/log/
|
|
||||||
├─ log-<seq>.aol # append-only log files
|
|
||||||
```
|
|
||||||
|
|
||||||
* Each log record contains:
|
|
||||||
|
|
||||||
* Artifact additions
|
|
||||||
* DAM signatures
|
|
||||||
* Snapshot seals
|
|
||||||
* Tombstone records
|
|
||||||
* Deterministic replay reconstructs **CURRENT** state
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 3.3 Snapshots
|
|
||||||
|
|
||||||
```
|
|
||||||
/domains/<domain-id>/snapshots/
|
|
||||||
├─ snapshot-<id>.meta
|
|
||||||
├─ snapshot-<id>.blocks # optional reference map
|
|
||||||
```
|
|
||||||
|
|
||||||
* Snapshot metadata includes:
|
|
||||||
|
|
||||||
* Logseq boundary
|
|
||||||
* Sealed segments
|
|
||||||
* Block references
|
|
||||||
* Environment claim artifact reference
|
|
||||||
* Snapshots are **immutable**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 3.4 Certificates
|
|
||||||
|
|
||||||
```
|
|
||||||
/domains/<domain-id>/certs/
|
|
||||||
├─ root.pub # root public key
|
|
||||||
├─ root.priv.enc # encrypted private key
|
|
||||||
├─ dam-signer.pub # optional signing key for DAMs
|
|
||||||
├─ dam-signer.priv.enc
|
|
||||||
```
|
|
||||||
|
|
||||||
* All private keys are encrypted and **never leave offline host**
|
|
||||||
* Public keys are referenced in DAM artifacts
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 3.5 Policies
|
|
||||||
|
|
||||||
```
|
|
||||||
/domains/<domain-id>/policies/
|
|
||||||
├─ policy-<hash>.json
|
|
||||||
```
|
|
||||||
|
|
||||||
* Policy hash stored as artifact
|
|
||||||
* Policies include:
|
|
||||||
|
|
||||||
* Domain admission rules
|
|
||||||
* Courtesy leases
|
|
||||||
* GC / retention rules
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 3.6 Domain Admission Manifests (DAM)
|
|
||||||
|
|
||||||
```
|
|
||||||
/domains/<domain-id>/dam/
|
|
||||||
├─ dam-<seq>.json.sig # signed DAM artifact
|
|
||||||
```
|
|
||||||
|
|
||||||
* Each DAM artifact contains:
|
|
||||||
|
|
||||||
* Domain ID
|
|
||||||
* Root key fingerprint
|
|
||||||
* Policy hash
|
|
||||||
* Courtesy lease info (optional)
|
|
||||||
* Signed by root key
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 4. Tools
|
|
||||||
|
|
||||||
```
|
|
||||||
/tools/
|
|
||||||
├─ asl-auth-host # main authority binary
|
|
||||||
├─ asl-rescue # SystemRescue patched tools
|
|
||||||
└─ sops # for offline bundle creation
|
|
||||||
```
|
|
||||||
|
|
||||||
* Versioned, deterministic, immutable binaries
|
|
||||||
* Executables stored as ASL artifacts if desired
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 5. Environment Claims
|
|
||||||
|
|
||||||
```
|
|
||||||
/env-claims/
|
|
||||||
├─ <snapshot-id>.claim
|
|
||||||
```
|
|
||||||
|
|
||||||
* Contains:
|
|
||||||
|
|
||||||
* OS image hash
|
|
||||||
* Boot environment info
|
|
||||||
* Installed tool hashes
|
|
||||||
* ASL-HOST store checksum at snapshot
|
|
||||||
* Stored as artifact and optionally signed by root key
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 6. SOPS Bundles
|
|
||||||
|
|
||||||
```
|
|
||||||
/sops-bundles/
|
|
||||||
├─ <bundle-id>.sops
|
|
||||||
```
|
|
||||||
|
|
||||||
* Encrypted container for DAMs, PER receipts, and optionally policies
|
|
||||||
* Can be delivered to new nodes for **admission or rescue**
|
|
||||||
* Includes checksums for integrity
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 7. Encoding Conventions
|
|
||||||
|
|
||||||
1. **Blocks**: `<block-id>.bin` (raw bytes), accompanied by `<block-id>.meta`
|
|
||||||
2. **Indices**: segment-based index; segment files immutable after seal
|
|
||||||
3. **Log**: append-only, each entry:
|
|
||||||
|
|
||||||
* `logseq | artifact_key | block_ref | type_tag | operation | signature`
|
|
||||||
4. **Snapshots**: snapshot ID derived from hash of CURRENT log + block refs
|
|
||||||
5. **Certificates**: PEM or ASL-artifact wrapped keys
|
|
||||||
6. **SOPS Bundles**: standard encrypted JSON/YAML with embedded checksums
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 8. Security Notes
|
|
||||||
|
|
||||||
* Private keys must **never be exposed** or included in SOPS bundles unencrypted
|
|
||||||
* Blocks in store may be encrypted with **per-domain keys**
|
|
||||||
* Environment claims ensure **proof of offline execution**
|
|
||||||
* DAMs must be signed to be trusted
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
This layout allows the **authority host** to:
|
|
||||||
|
|
||||||
* Bootstrap personal or group domains
|
|
||||||
* Accept rescued artifacts
|
|
||||||
* Produce deterministic PERs and snapshots
|
|
||||||
* Create SOPS bundles for new nodes
|
|
||||||
* Operate fully offline
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
If you want, I can **draw a full diagram showing the ENC-ASL-AUTH-HOST tree, block-flow, snapshot integration, and PER generation**, so it’s easier to visualize the data flow during rescue or admission.
|
|
||||||
|
|
||||||
Do you want me to make that diagram next?
|
|
||||||
|
|
||||||
|
|
@ -1,370 +0,0 @@
|
||||||
Good — this is the right thing to pin down next.
|
|
||||||
Below is a **precise, minimal, authority-aware but storage-agnostic ASL-HOST on-disk layout**, designed to work on **ZFS, btrfs, or plain POSIX**, and to survive before ASL-STORE / ASL-CORE are fully implemented.
|
|
||||||
|
|
||||||
This layout defines **where things live**, not **how bytes are encoded**.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# ASL-HOST On-Disk Layout — v0.1
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 1. Design Goals (Normative)
|
|
||||||
|
|
||||||
The on-disk layout MUST:
|
|
||||||
|
|
||||||
1. Enforce **domain isolation**
|
|
||||||
2. Separate **authority, storage, and execution**
|
|
||||||
3. Support **append-only logs**
|
|
||||||
4. Support **snapshots as first-class**
|
|
||||||
5. Allow **courtesy leases and revocation**
|
|
||||||
6. Remain **forward-compatible** with ASL-STORE and ENC specs
|
|
||||||
|
|
||||||
The layout MUST NOT:
|
|
||||||
|
|
||||||
* Encode artifact semantics
|
|
||||||
* Encode index formats
|
|
||||||
* Encode cryptographic algorithms
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 2. Root Layout
|
|
||||||
|
|
||||||
```text
|
|
||||||
/asl-host/
|
|
||||||
├── host/
|
|
||||||
│ ├── host-id
|
|
||||||
│ ├── host-policy
|
|
||||||
│ └── trusted-roots/
|
|
||||||
│
|
|
||||||
├── domains/
|
|
||||||
│ ├── <domain-id>/
|
|
||||||
│ │ ├── domain.json
|
|
||||||
│ │ ├── admission/
|
|
||||||
│ │ ├── auth/
|
|
||||||
│ │ ├── store/
|
|
||||||
│ │ ├── index/
|
|
||||||
│ │ ├── log/
|
|
||||||
│ │ ├── snapshots/
|
|
||||||
│ │ ├── leases/
|
|
||||||
│ │ └── tmp/
|
|
||||||
│
|
|
||||||
├── federation/
|
|
||||||
│ ├── peers/
|
|
||||||
│ ├── exports/
|
|
||||||
│ └── imports/
|
|
||||||
│
|
|
||||||
└── quarantine/
|
|
||||||
```
|
|
||||||
|
|
||||||
Everything below this root is owned by ASL-HOST.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 3. Host-Level Metadata
|
|
||||||
|
|
||||||
### `/asl-host/host/`
|
|
||||||
|
|
||||||
```text
|
|
||||||
host/
|
|
||||||
├── host-id # stable ID for this machine
|
|
||||||
├── host-policy # local admission & resource policy
|
|
||||||
└── trusted-roots/
|
|
||||||
├── root-A.pub
|
|
||||||
├── root-B.pub
|
|
||||||
└── ...
|
|
||||||
```
|
|
||||||
|
|
||||||
**Notes:**
|
|
||||||
|
|
||||||
* Trusted roots are **offline-established**
|
|
||||||
* Used for **admission verification**
|
|
||||||
* Not domain-specific
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 4. Domain Directory (Authoritative Boundary)
|
|
||||||
|
|
||||||
Each domain has **one directory**, nothing crosses this boundary implicitly.
|
|
||||||
|
|
||||||
```text
|
|
||||||
/domains/<domain-id>/
|
|
||||||
```
|
|
||||||
|
|
||||||
This directory MUST be the **sole owner** of:
|
|
||||||
|
|
||||||
* blocks
|
|
||||||
* logs
|
|
||||||
* snapshots
|
|
||||||
* indexes
|
|
||||||
* domain-local authority state
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 5. Domain Descriptor
|
|
||||||
|
|
||||||
### `/domains/<domain-id>/domain.json`
|
|
||||||
|
|
||||||
This is **host-owned metadata**, not part of ASL-CORE.
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"domain_id": "...",
|
|
||||||
"state": "COURTESY | FULL | SUSPENDED | REVOKED",
|
|
||||||
"created_at": "...",
|
|
||||||
"admitted_at": "...",
|
|
||||||
"root_key_fingerprint": "...",
|
|
||||||
"policy_hash": "...",
|
|
||||||
"current_snapshot": "...",
|
|
||||||
"current_logseq": 12345
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
This file is **not signed** — it is derived state.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 6. Admission Records
|
|
||||||
|
|
||||||
### `/domains/<domain-id>/admission/`
|
|
||||||
|
|
||||||
```text
|
|
||||||
admission/
|
|
||||||
├── dam.cbor
|
|
||||||
├── dam.sig
|
|
||||||
├── admission-request.cbor
|
|
||||||
├── admission-decision.cbor
|
|
||||||
└── admission-decision.sig
|
|
||||||
```
|
|
||||||
|
|
||||||
This directory contains **immutable records** of how the domain was admitted.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 7. Authority Material (Domain-Local)
|
|
||||||
|
|
||||||
### `/domains/<domain-id>/auth/`
|
|
||||||
|
|
||||||
```text
|
|
||||||
auth/
|
|
||||||
├── root.pub
|
|
||||||
├── operators/
|
|
||||||
│ ├── op1.pub
|
|
||||||
│ └── ...
|
|
||||||
├── device.pub
|
|
||||||
└── revocations/
|
|
||||||
```
|
|
||||||
|
|
||||||
**Rules:**
|
|
||||||
|
|
||||||
* Private keys MAY exist only temporarily (e.g. SystemRescue)
|
|
||||||
* ASL-HOST MUST NOT rely on private keys being present
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 8. Store Root (Blocks)
|
|
||||||
|
|
||||||
### `/domains/<domain-id>/store/`
|
|
||||||
|
|
||||||
```text
|
|
||||||
store/
|
|
||||||
├── blocks/
|
|
||||||
│ ├── open/
|
|
||||||
│ ├── sealed/
|
|
||||||
│ └── gc/
|
|
||||||
├── objects/ # optional future packing
|
|
||||||
└── encryption/
|
|
||||||
```
|
|
||||||
|
|
||||||
**Notes:**
|
|
||||||
|
|
||||||
* `open/` blocks may be lost
|
|
||||||
* `sealed/` blocks are immutable
|
|
||||||
* `gc/` is host-managed
|
|
||||||
* Encryption metadata is **opaque to ASL-STORE**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 9. Index Area (Semantic-Free)
|
|
||||||
|
|
||||||
### `/domains/<domain-id>/index/`
|
|
||||||
|
|
||||||
```text
|
|
||||||
index/
|
|
||||||
├── segments/
|
|
||||||
│ ├── seg-000001/
|
|
||||||
│ └── ...
|
|
||||||
├── bloom/ # optional
|
|
||||||
└── tmp/
|
|
||||||
```
|
|
||||||
|
|
||||||
ASL-HOST only guarantees:
|
|
||||||
|
|
||||||
* sealed segments are immutable
|
|
||||||
* segments become visible only after seal record
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 10. Append-Only Log
|
|
||||||
|
|
||||||
### `/domains/<domain-id>/log/`
|
|
||||||
|
|
||||||
```text
|
|
||||||
log/
|
|
||||||
├── append.log
|
|
||||||
├── checkpoints/
|
|
||||||
│ ├── chk-000001/
|
|
||||||
│ └── ...
|
|
||||||
└── seal.log
|
|
||||||
```
|
|
||||||
|
|
||||||
**Rules:**
|
|
||||||
|
|
||||||
* append-only
|
|
||||||
* monotonic
|
|
||||||
* replayable
|
|
||||||
* seal.log records segment seals
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 11. Snapshots
|
|
||||||
|
|
||||||
### `/domains/<domain-id>/snapshots/`
|
|
||||||
|
|
||||||
```text
|
|
||||||
snapshots/
|
|
||||||
├── snap-000001/
|
|
||||||
├── snap-000002/
|
|
||||||
└── pinned/
|
|
||||||
├── snap-000001
|
|
||||||
```
|
|
||||||
|
|
||||||
**Host responsibility:**
|
|
||||||
|
|
||||||
* mapping snapshots to log positions
|
|
||||||
* enforcing pinning
|
|
||||||
* enforcing courtesy limits
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 12. Courtesy Leases
|
|
||||||
|
|
||||||
### `/domains/<domain-id>/leases/`
|
|
||||||
|
|
||||||
```text
|
|
||||||
leases/
|
|
||||||
├── lease-001.json
|
|
||||||
├── lease-002.json
|
|
||||||
└── active
|
|
||||||
```
|
|
||||||
|
|
||||||
Each lease file:
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"lease_id": "...",
|
|
||||||
"granted_by": "...",
|
|
||||||
"storage_bytes": 1073741824,
|
|
||||||
"expires_at": "..."
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
ASL-HOST enforces these.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 13. Temporary / Execution Space
|
|
||||||
|
|
||||||
### `/domains/<domain-id>/tmp/`
|
|
||||||
|
|
||||||
Used for:
|
|
||||||
|
|
||||||
* Sedelpress staging
|
|
||||||
* PEL execution scratch
|
|
||||||
* unsealed buffers
|
|
||||||
|
|
||||||
**Never snapshot-pinned.**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 14. Federation Area
|
|
||||||
|
|
||||||
### `/asl-host/federation/`
|
|
||||||
|
|
||||||
```text
|
|
||||||
federation/
|
|
||||||
├── peers/
|
|
||||||
│ ├── <peer-domain-id>/
|
|
||||||
│ │ ├── pinned-roots/
|
|
||||||
│ │ ├── imported-snapshots/
|
|
||||||
│ │ └── replay-state.json
|
|
||||||
├── exports/
|
|
||||||
└── imports/
|
|
||||||
```
|
|
||||||
|
|
||||||
Federation is **explicit and opt-in**.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 15. Quarantine
|
|
||||||
|
|
||||||
### `/asl-host/quarantine/`
|
|
||||||
|
|
||||||
Used for:
|
|
||||||
|
|
||||||
* rejected domains
|
|
||||||
* policy violations
|
|
||||||
* forensic inspection
|
|
||||||
|
|
||||||
No domain in quarantine may execute or publish.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 16. ZFS / Snapshot Mapping (Recommended)
|
|
||||||
|
|
||||||
If using ZFS:
|
|
||||||
|
|
||||||
| Path | ZFS Dataset |
|
|
||||||
| ------------------------- | ------------------- |
|
|
||||||
| `/domains/<id>` | dataset |
|
|
||||||
| `/domains/<id>/store` | child dataset |
|
|
||||||
| `/domains/<id>/snapshots` | ZFS snapshots |
|
|
||||||
| `/domains/<id>/tmp` | no-snapshot dataset |
|
|
||||||
|
|
||||||
This gives **real snapshot semantics** aligned with ASL rules.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 17. Invariants (Non-Negotiable)
|
|
||||||
|
|
||||||
1. No block crosses domain boundaries implicitly
|
|
||||||
2. No snapshot without log position
|
|
||||||
3. No sealed block mutation
|
|
||||||
4. No admission without DAM
|
|
||||||
5. No federation without ASL-HOST approval
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 18. Why This Works
|
|
||||||
|
|
||||||
✔ Clean separation of concerns
|
|
||||||
✔ Domain sovereignty enforced by path
|
|
||||||
✔ Admission-first architecture
|
|
||||||
✔ Rescue and sovereign flows unified
|
|
||||||
✔ ASL-STORE can drop in later
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 19. One-Sentence Summary
|
|
||||||
|
|
||||||
> **ASL-HOST’s on-disk layout is a constitutional map: it tells every byte who it belongs to, why it exists, and when it may be trusted.**
|
|
||||||
|
|
||||||
If you want, next we can:
|
|
||||||
|
|
||||||
* write a **reference filesystem implementation**
|
|
||||||
* simulate a **full rescue → admission → publish flow on disk**
|
|
||||||
* define **revocation propagation on disk**
|
|
||||||
* or map this directly to **ZFS commands**
|
|
||||||
|
|
||||||
Just say where to push next.
|
|
||||||
|
|
||||||
|
|
@ -1,172 +0,0 @@
|
||||||
Perfect. Let’s map out a **Rescue Node ASL Deployment** for your scenario, integrating **personal domain, common domain (Unity/Rakeroot), foreign-domain trust, and ASL layers**. I’ll keep it clear and structured.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Rescue Node ASL Deployment – Conceptual Diagram
|
|
||||||
|
|
||||||
## 1. Overview
|
|
||||||
|
|
||||||
Goal: A rescue node (e.g., old laptop booted with SystemRescue) can:
|
|
||||||
|
|
||||||
* Read old material and register it in a **new personal domain**
|
|
||||||
* Store **resurrected artifacts** safely
|
|
||||||
* Interact with **common/shared domains** (Unity / Rakeroot)
|
|
||||||
* Respect **foreign-domain trust** (read-only imported artifacts)
|
|
||||||
* Produce **signed PERs** for auditing and traceability
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 2. Layered Architecture
|
|
||||||
|
|
||||||
```
|
|
||||||
┌───────────────────────────────────────────────────────────────┐
|
|
||||||
│ Rescue Node / SystemRescue Runtime │
|
|
||||||
│ (ASL-HOST) │
|
|
||||||
│ ┌───────────────────────────────────────────────────────────┐ │
|
|
||||||
│ │ Store Handles / Filesystems (POSIX/ZFS) │ │
|
|
||||||
│ │ - personal domain store │ │
|
|
||||||
│ │ - common / Unity store │ │
|
|
||||||
│ │ - optional foreign domain caches │ │
|
|
||||||
│ └───────────────────────────────────────────────────────────┘ │
|
|
||||||
│ ┌───────────────────────────────────────────────────────────┐ │
|
|
||||||
│ │ ASL-STORE(-INDEX) │ │
|
|
||||||
│ │ - Handles blocks, snapshots, sealed segments │ │
|
|
||||||
│ │ - CURRRENT reconstruction, GC │ │
|
|
||||||
│ │ - Uses store handles provided by ASL-HOST │ │
|
|
||||||
│ └───────────────────────────────────────────────────────────┘ │
|
|
||||||
│ ┌───────────────────────────────────────────────────────────┐ │
|
|
||||||
│ │ ASL-AUTH │ │
|
|
||||||
│ │ - Domain authority (personal / common / foreign) │ │
|
|
||||||
│ │ - PER signing and verification │ │
|
|
||||||
│ │ - Policy hash and offline root enforcement │ │
|
|
||||||
│ └───────────────────────────────────────────────────────────┘ │
|
|
||||||
│ ┌───────────────────────────────────────────────────────────┐ │
|
|
||||||
│ │ PEL / TGK Execution │ │
|
|
||||||
│ │ - Generates PERs from recovered artifacts │ │
|
|
||||||
│ │ - TGK edges record provenance │ │
|
|
||||||
│ │ - Deterministic DAG execution │ │
|
|
||||||
│ └───────────────────────────────────────────────────────────┘ │
|
|
||||||
└───────────────────────────────────────────────────────────────┘
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 3. Domains
|
|
||||||
|
|
||||||
| Domain | Purpose | Storage / Backing |
|
|
||||||
| ------------------------------ | ----------------------------------------------------------- | ------------------------------------------------ |
|
|
||||||
| **Personal Domain** | Newly minted domain on rescue node; stores rescued material | ZFS dataset or POSIX store, encrypted optionally |
|
|
||||||
| **Common / Unity Domain** | Group-shared artifacts; Unity / Rakeroot | ZFS dataset shared among users, snapshot-based |
|
|
||||||
| **Foreign Domains (optional)** | Imported read-only artifacts; pinned by trust | Cache store / ASL-HOST mount |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 4. Domain Initialization
|
|
||||||
|
|
||||||
1. **Personal Domain**
|
|
||||||
|
|
||||||
* Create store: `CreateStore("/mnt/rescue/personal")`
|
|
||||||
* Generate DA manifest
|
|
||||||
* Sign manifest with offline root
|
|
||||||
* Mount snapshot overlay if needed
|
|
||||||
|
|
||||||
2. **Common / Unity Domain**
|
|
||||||
|
|
||||||
* Mount read-only: `OpenStore("/mnt/common")`
|
|
||||||
* Synchronize snapshot to local host
|
|
||||||
* Pin trusted foreign domains if group members exist
|
|
||||||
|
|
||||||
3. **Foreign Domains**
|
|
||||||
|
|
||||||
* Configure trust pin: Domain ID + Policy hash
|
|
||||||
* Mount local cache for imported artifacts
|
|
||||||
* Access **read-only**, verified via ASL-AUTH
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 5. Storage / Filesystem Layout
|
|
||||||
|
|
||||||
```
|
|
||||||
/mnt/rescue/
|
|
||||||
personal/ <-- personal domain store (ZFS/POSIX)
|
|
||||||
blocks/
|
|
||||||
segments/
|
|
||||||
logs/
|
|
||||||
common/ <-- Unity / Rakeroot (shared read-only store)
|
|
||||||
blocks/
|
|
||||||
segments/
|
|
||||||
logs/
|
|
||||||
foreign/ <-- optional cache for foreign domains
|
|
||||||
domainX/
|
|
||||||
blocks/
|
|
||||||
segments/
|
|
||||||
```
|
|
||||||
|
|
||||||
* **Blocks**: immutable, sealed by ASL-STORE
|
|
||||||
* **Segments**: index entries + metadata
|
|
||||||
* **Logs**: append-only, monotonic ordering
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 6. Snapshot Strategy
|
|
||||||
|
|
||||||
* ZFS snapshots (or overlayfs copies) per domain
|
|
||||||
* Personal domain snapshots allow **deterministic recovery**
|
|
||||||
* Common domain snapshots define **group-visible CURRENT**
|
|
||||||
* Foreign domain snapshots pinned by trust
|
|
||||||
|
|
||||||
```
|
|
||||||
personal@rescue-snap-2025-12-28
|
|
||||||
common@unity-snap-2025-12-28
|
|
||||||
foreign-domainX@snap-2025-12-01
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 7. PER Signing & Provenance
|
|
||||||
|
|
||||||
1. PEL executes DAG over rescued artifacts
|
|
||||||
2. Generates PERs
|
|
||||||
3. ASL-AUTH signs PERs with:
|
|
||||||
|
|
||||||
* Personal domain authority key
|
|
||||||
* Policy hash embedded
|
|
||||||
4. PERs stored in **personal domain**, optionally referencing:
|
|
||||||
|
|
||||||
* Common / Unity artifacts
|
|
||||||
* Foreign pinned artifacts (read-only)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 8. Optional Encryption / Public Domain Courtesy
|
|
||||||
|
|
||||||
* Blocks from personal domain can be encrypted when storing in **common domain**
|
|
||||||
* Ensures **privacy while allowing shared indexing**
|
|
||||||
* Encryption keys managed by **personal DA**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 9. Trust & Governance
|
|
||||||
|
|
||||||
* Offline root(s) provide deterministic trust
|
|
||||||
* Policy hash enforces publishing and cross-domain rules
|
|
||||||
* Personal domain can safely publish selected artifacts to Unity / Rakeroot
|
|
||||||
* Foreign-domain pins enforce **read-only deterministic import**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 10. Summary
|
|
||||||
|
|
||||||
* Rescue node can bootstrap **personal + common + foreign domains**
|
|
||||||
* Storage handled by ASL-HOST (POSIX/ZFS)
|
|
||||||
* Indexing, snapshots, sealing by ASL-STORE(-INDEX)
|
|
||||||
* PER signing and cross-domain trust by ASL-AUTH
|
|
||||||
* Execution provenance tracked via PEL/TGK
|
|
||||||
* Flexible architecture for **personal, group, and federated domains**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
If you want, I can **draw a fully labeled diagram** showing **how artifacts flow from the rescued home directory into personal domain, common domain, and PER generation**, including snapshots, seals, and trust pins. This would be a visual reference for your rescue mission.
|
|
||||||
|
|
||||||
Do you want me to do that next?
|
|
||||||
|
|
||||||
|
|
@ -1,163 +0,0 @@
|
||||||
Perfect — this is exactly the “first-person, first-rescue” scenario. I’ll extend the blueprint to reflect **a freshly minted SystemRescue user entering the ecosystem** with old personal data, no prior certificates, and the intention of building both a **personal domain** and seeding the **common / Unity tree**. I’ll tie together **PER generation, ASL blocks, snapshots, and trust setup** from scratch.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Rescue Node Blueprint v0.1 — Fresh Entry Scenario
|
|
||||||
|
|
||||||
```
|
|
||||||
┌───────────────────────────────┐
|
|
||||||
│ Legacy Input Material │
|
|
||||||
│ - Home directory snapshot │
|
|
||||||
│ - App config / old data │
|
|
||||||
│ - Intent / contracts │
|
|
||||||
└─────────────┬─────────────────┘
|
|
||||||
│
|
|
||||||
▼
|
|
||||||
┌───────────────────────────────┐
|
|
||||||
│ Sedelpress / PER Engine │
|
|
||||||
│ - Deterministic execution │
|
|
||||||
│ - TGK edges & provenance │
|
|
||||||
│ - Snapshot boundaries │
|
|
||||||
│ - Generates initial PER(s) │
|
|
||||||
│ - Logs intent + provenance │
|
|
||||||
└─────────────┬─────────────────┘
|
|
||||||
│ PER + TGK edges
|
|
||||||
▼
|
|
||||||
┌───────────────────────────────────────────────┐
|
|
||||||
│ Bootstrap in Common / Courtesy Space │
|
|
||||||
│ - Encrypted personal blocks │
|
|
||||||
│ - ASL-STORE(-INDEX) organizes blocks & logs │
|
|
||||||
│ - Snapshot pinned for reproducibility │
|
|
||||||
│ - Acts as temporary “personal domain seed” │
|
|
||||||
└─────────────┬─────────────────────────────────┘
|
|
||||||
│ Optional trust / policy hash
|
|
||||||
▼
|
|
||||||
┌───────────────────────────────────────────────┐
|
|
||||||
│ Personal Domain (New) │
|
|
||||||
│ - Blocks copied from courtesy space │
|
|
||||||
│ - Own index segments, snapshots │
|
|
||||||
│ - PERs validated and linked to TGK edges │
|
|
||||||
│ - Certificates minted (ASL-AUTH) │
|
|
||||||
│ - Domain Authority Manifest created │
|
|
||||||
│ - Optional publication to Common later │
|
|
||||||
└─────────────┬─────────────────────────────────┘
|
|
||||||
│ Optional publication
|
|
||||||
▼
|
|
||||||
┌───────────────────────────────────────────────┐
|
|
||||||
│ Common / Unity Domain │
|
|
||||||
│ - Shared artifacts / PERs │
|
|
||||||
│ - Read-only pinned snapshots │
|
|
||||||
│ - Courtesy recognition of new user │
|
|
||||||
│ - Aggregates multiple bootstrap submissions │
|
|
||||||
└─────────────┬─────────────────────────────────┘
|
|
||||||
│ Cross-domain trust pins
|
|
||||||
▼
|
|
||||||
┌───────────────────────────────────────────────┐
|
|
||||||
│ Foreign / Other Domains │
|
|
||||||
│ - Imported artifacts read-only │
|
|
||||||
│ - Trust via offline roots & policy hash │
|
|
||||||
│ - Deterministic snapshots reconstructed │
|
|
||||||
└───────────────────────────────────────────────┘
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Key Concepts and Steps
|
|
||||||
|
|
||||||
### 1. Legacy Material Intake
|
|
||||||
|
|
||||||
* Old personal data is treated as **raw artifact input**.
|
|
||||||
* **Sedelpress** ingests everything deterministically, creating **PER(s) for provenance**.
|
|
||||||
* Intent and contract are encoded alongside data, defining what must be certified.
|
|
||||||
|
|
||||||
### 2. PER Generation
|
|
||||||
|
|
||||||
* **First-class operation**: PERs precede storage.
|
|
||||||
* TGK edges capture lineage and relationships.
|
|
||||||
* Snapshots of input material are **recorded for deterministic reconstruction**.
|
|
||||||
|
|
||||||
### 3. Bootstrap Personal Domain via Common
|
|
||||||
|
|
||||||
* **Encrypted blocks** are stored in the Common courtesy space.
|
|
||||||
* Blocks are **sealed and indexed** (ASL-STORE / ASL-STORE-INDEX).
|
|
||||||
* Common **pins snapshots** to ensure reproducibility.
|
|
||||||
* This bootstrap **does not require prior certificates** — Common allows “newcomer courtesy.”
|
|
||||||
|
|
||||||
### 4. Personal Domain Minting
|
|
||||||
|
|
||||||
* After bootstrap, blocks are copied into the new **personal domain**.
|
|
||||||
* **Certificates (ASL-AUTH)** are minted, forming your **authority root**.
|
|
||||||
* Domain Authority Manifest (DAM) is created with:
|
|
||||||
|
|
||||||
* Your domain ID
|
|
||||||
* Seeded artifacts / PERs
|
|
||||||
* Trust anchors (offline roots)
|
|
||||||
* PERs are now linked, validated, and can be optionally published to Common.
|
|
||||||
|
|
||||||
### 5. Common / Unity Tree
|
|
||||||
|
|
||||||
* Aggregates shared PERs and artifacts from multiple users.
|
|
||||||
* Maintains **read-only pinned snapshots**.
|
|
||||||
* Facilitates **cross-user consistency and cooperation**.
|
|
||||||
* Your encrypted bootstrap blocks remain private until you choose to publish.
|
|
||||||
|
|
||||||
### 6. Cross-Domain Trust
|
|
||||||
|
|
||||||
* Optional import/export of artifacts to other domains:
|
|
||||||
|
|
||||||
* **Read-only import**: deterministic reconstruction.
|
|
||||||
* **Policy hash** ensures correctness.
|
|
||||||
* **Offline roots** verify trust for foreign domains.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Suggested ASL / Filesystem Layout
|
|
||||||
|
|
||||||
| Domain / Layer | Backend / FS | Notes |
|
|
||||||
| ------------------------- | --------------------- | ----------------------------------------------------------- |
|
|
||||||
| Legacy Material Intake | POSIX / tmp overlay | Raw input snapshots |
|
|
||||||
| Sedelpress / PER Engine | Memory + temp storage | Deterministic execution; generates TGK edges |
|
|
||||||
| Bootstrap Personal Domain | ZFS / ASL-STORE | Courtesy encrypted blocks; pinned snapshot; temporary index |
|
|
||||||
| Personal Domain (New) | ZFS / ASL-STORE | Full index, sealed blocks, PERs, certificates |
|
|
||||||
| Common / Unity Domain | ZFS / ASL-STORE | Shared artifacts / PERs; read-only; pinned snapshots |
|
|
||||||
| Foreign / Other Domains | N/A / imported | Read-only; trust via offline roots & policy hash |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Notes on Certificates / ASL-AUTH
|
|
||||||
|
|
||||||
* **Initial certificate minting** occurs **after bootstrap**.
|
|
||||||
* Offline root keys are generated on a **secure Debian machine** (offline).
|
|
||||||
* **Personal Domain Authority** is tied to offline roots.
|
|
||||||
* PERs in bootstrap space can later be **retrospectively certified** once personal domain is minted.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Snapshot & Sealing Flow
|
|
||||||
|
|
||||||
1. **Legacy snapshot** → PER generation
|
|
||||||
2. **Seal blocks** in courtesy space
|
|
||||||
3. **Pin snapshots** in bootstrap space
|
|
||||||
4. **Copy to personal domain** → seal and index
|
|
||||||
5. **Create DAM + Certificates** → retrospective trust assignment
|
|
||||||
6. Optional publication → **Common / Unity tree**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
This **blueprint supports:**
|
|
||||||
|
|
||||||
* Fresh user / rescue node onboarding
|
|
||||||
* Deterministic provenance from legacy material
|
|
||||||
* Personal domain creation without prior certificates
|
|
||||||
* Courtesy bootstrap in Common for temporary storage
|
|
||||||
* Safe integration with Common / Unity tree and foreign domains
|
|
||||||
* PER-first philosophy ensuring traceability and auditability
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
If you want, I can **draw a “layered architecture diagram”**, showing **Sedelpress, ASL blocks, snapshots, PERs, and the hierarchy of domains**, highlighting **bootstrap, personal, common, and foreign layers**.
|
|
||||||
|
|
||||||
It would be a **visual rescue map**, perfect for planning the initial node setup.
|
|
||||||
|
|
||||||
Do you want me to do that next?
|
|
||||||
|
|
||||||
|
|
@ -1,112 +0,0 @@
|
||||||
Perfect — that gives us a **clear mission scenario**. Let’s formalize this into a **Rescue Node + Domain Architecture**, showing the **flow from personal rescue → common courtesy space → personal domain establishment**. I’ll also tie in snapshots, sealing, and PER generation.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Rescue Operation Architecture: “Personal Rescue with Common Bootstrap”
|
|
||||||
|
|
||||||
```
|
|
||||||
┌───────────────────────────────┐
|
|
||||||
│ Input Material / Intent │
|
|
||||||
│ - Home directory snapshot │
|
|
||||||
│ - Certificates │
|
|
||||||
│ - Rescue intent / contract │
|
|
||||||
└─────────────┬─────────────────┘
|
|
||||||
│
|
|
||||||
▼
|
|
||||||
┌───────────────────────────────┐
|
|
||||||
│ Sedelpress / PER Engine │
|
|
||||||
│ - Deterministic execution │
|
|
||||||
│ - TGK edges & provenance │
|
|
||||||
│ - Snapshot boundaries │
|
|
||||||
│ - Generates PER(s) │
|
|
||||||
└─────────────┬─────────────────┘
|
|
||||||
│ PER + TGK edges
|
|
||||||
▼
|
|
||||||
┌───────────────────────────────────────┐
|
|
||||||
│ Personal Bootstrap Space (Common) │
|
|
||||||
│ - Courtesy space granted by Common │
|
|
||||||
│ - Encrypted blocks / sealed segments │
|
|
||||||
│ - Indexed via ASL-STORE(-INDEX) │
|
|
||||||
│ - Temporary / bootstrapped domain │
|
|
||||||
└─────────────┬─────────────────────────┘
|
|
||||||
│ Optional trust / policy hash
|
|
||||||
▼
|
|
||||||
┌───────────────────────────────────────┐
|
|
||||||
│ Personal Domain (User-owned) │
|
|
||||||
│ - Blocks copied from bootstrap │
|
|
||||||
│ - Own index segments & snapshots │
|
|
||||||
│ - PERs stored and validated │
|
|
||||||
│ - Full authority and certificate │
|
|
||||||
└─────────────┬─────────────────────────┘
|
|
||||||
│ Publishing optional
|
|
||||||
▼
|
|
||||||
┌───────────────────────────────────────┐
|
|
||||||
│ Common / Unity Domain │
|
|
||||||
│ - Shared artifacts & PERs │
|
|
||||||
│ - Read-only access for users │
|
|
||||||
│ - Snapshot pinned / immutable │
|
|
||||||
│ - Courtesy bootstrap space recognized │
|
|
||||||
└─────────────┬─────────────────────────┘
|
|
||||||
│ Cross-domain trust pins
|
|
||||||
▼
|
|
||||||
┌───────────────────────────────────────┐
|
|
||||||
│ Foreign / External Domains │
|
|
||||||
│ - Imported artifacts (read-only) │
|
|
||||||
│ - Trust enforced by offline roots │
|
|
||||||
│ - Policy hash verification │
|
|
||||||
└───────────────────────────────────────┘
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Key Principles for Rescue + Domain Integration
|
|
||||||
|
|
||||||
1. **Bootstrap via Common**
|
|
||||||
|
|
||||||
* A person or system without a pre-existing domain can store **encrypted blocks** in the Common courtesy space.
|
|
||||||
* Common recognizes the bootstrap, enforces **policy hash**, and pins snapshots.
|
|
||||||
|
|
||||||
2. **PER Generation is Primary**
|
|
||||||
|
|
||||||
* The Sedelpress stamps **everything deterministically**: home dir, certificates, intent.
|
|
||||||
* Store artifacts are secondary; the **receipt defines authority and provenance**.
|
|
||||||
|
|
||||||
3. **Snapshots & Sealed Blocks**
|
|
||||||
|
|
||||||
* Courtesy space blocks are **encrypted and sealed** for immutability.
|
|
||||||
* Once personal domain is established, blocks can be **copied or promoted** to private space.
|
|
||||||
|
|
||||||
4. **Domain Authority**
|
|
||||||
|
|
||||||
* Personal domain is **minted post-bootstrap**, with full authority.
|
|
||||||
* Policy hash ensures cross-domain trust for publishing or importing artifacts.
|
|
||||||
|
|
||||||
5. **Cross-Domain Trust**
|
|
||||||
|
|
||||||
* Common domain pins **read-only copies** of bootstrap artifacts.
|
|
||||||
* Foreign or other users’ domains require **offline root verification** before accepting artifacts.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Suggested ASL / Store Layout for Rescue Operation
|
|
||||||
|
|
||||||
| Domain | Backend / FS | Notes |
|
|
||||||
| --------------------------- | ----------------- | -------------------------------------------------------------------- |
|
|
||||||
| Personal Bootstrap (Common) | ZFS / POSIX + ASL | Courtesy space; blocks encrypted; temporary storage; snapshot pinned |
|
|
||||||
| Personal Domain | ZFS + ASL | User-owned; full index; sealed blocks; PERs validated |
|
|
||||||
| Common / Unity | ZFS + ASL | Shared artifacts; read-only; courtesy recognition |
|
|
||||||
| Foreign Domains | N/A (imported) | Read-only; trust pinned via policy hash and offline roots |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
If you like, I can **next draft the Rescue Node overlay schema**:
|
|
||||||
|
|
||||||
* How the **personal bootstrap** interacts with Common
|
|
||||||
* How **PER ingestion and sealing** happens
|
|
||||||
* How **snapshots + ASL blocks** are laid out on ZFS or POSIX
|
|
||||||
* How the **courtesy / Unity tree** is seeded
|
|
||||||
|
|
||||||
This would be a **working blueprint for your personal rescue operations**, fully tied to the ASL + PEL ecosystem.
|
|
||||||
|
|
||||||
Do you want me to do that?
|
|
||||||
|
|
||||||
|
|
@ -1,131 +0,0 @@
|
||||||
Absolutely — let's think this through step by step. The goal is a **bootable authority host image** that’s offline, deterministic, and ready to handle domain admission, DAM signing, SOPS bundles, and PER generation. Here's a blueprint for assembling it.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 1. Base OS
|
|
||||||
|
|
||||||
* Choose a **minimal Debian/Ubuntu** or SystemRescue-based environment.
|
|
||||||
|
|
||||||
* Needs basic POSIX tools, filesystem utilities, and networking disabled (offline by default).
|
|
||||||
* Install **essential tools only**:
|
|
||||||
|
|
||||||
* `bash`, `coreutils`, `tar`, `gzip`, `xz`, `find`, `sha256sum`
|
|
||||||
* `sops` binary for offline bundle handling
|
|
||||||
* `git` optional, for versioning tools inside the image
|
|
||||||
* Disable unnecessary daemons (`sshd`, `cron`) for security.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 2. Filesystem Layout
|
|
||||||
|
|
||||||
Create the **ENC-ASL-AUTH-HOST** structure inside the image:
|
|
||||||
|
|
||||||
```
|
|
||||||
/asl-auth-host/
|
|
||||||
├─ /domains/ # domain stores
|
|
||||||
├─ /tools/ # binaries
|
|
||||||
├─ /env-claims/ # environment snapshot hashes
|
|
||||||
└─ /sops-bundles/ # encrypted bundles
|
|
||||||
```
|
|
||||||
|
|
||||||
* Use **read-only overlay** for system files
|
|
||||||
* Persistent storage can be mounted as `/domains` or `/store` (ZFS, ext4, or Btrfs)
|
|
||||||
* Optionally, set up **ZFS pools** for:
|
|
||||||
|
|
||||||
* `/domains/<domain-id>/store`
|
|
||||||
* `/domains/<domain-id>/snapshots`
|
|
||||||
* The image itself is **immutable** — only mounted storage is written to.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 3. Tools to Include
|
|
||||||
|
|
||||||
* **asl-auth-host** binary — main authority program
|
|
||||||
* **asl-rescue** binary — optional rescue support for SystemRescue-style data intake
|
|
||||||
* **sops** — offline encryption/decryption of bundles
|
|
||||||
* Optional helper scripts:
|
|
||||||
|
|
||||||
* `make-dam.sh` — create DAM artifacts
|
|
||||||
* `sign-bundle.sh` — sign SOPS bundles
|
|
||||||
* `verify-env.sh` — calculate env-claims
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 4. Boot Configuration
|
|
||||||
|
|
||||||
* Boot kernel options:
|
|
||||||
|
|
||||||
* Mount persistent storage for `/domains` (ZFS, ext4, etc.)
|
|
||||||
* Mount overlay read-only system (`/tools`, `/env-claims`, `/sops-bundles`)
|
|
||||||
* Auto-start a shell or **interactive prompt** for offline operation.
|
|
||||||
* Optional: menu for:
|
|
||||||
|
|
||||||
* Create new domain
|
|
||||||
* Sign DAM / issue certificates
|
|
||||||
* Prepare SOPS bundle
|
|
||||||
* Rescue/import artifacts
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 5. Domain Initialization
|
|
||||||
|
|
||||||
When first booting:
|
|
||||||
|
|
||||||
1. Generate **root key pair** for the domain.
|
|
||||||
2. Optionally generate **DAM signer keys**.
|
|
||||||
3. Create the domain directory:
|
|
||||||
|
|
||||||
```
|
|
||||||
/domains/<domain-id>/
|
|
||||||
├─ store/
|
|
||||||
├─ log/
|
|
||||||
├─ snapshots/
|
|
||||||
├─ certs/
|
|
||||||
├─ policies/
|
|
||||||
└─ dam/
|
|
||||||
```
|
|
||||||
4. Initialize **empty log**, empty store, and environment claim file:
|
|
||||||
|
|
||||||
```
|
|
||||||
/env-claims/<snapshot-id>.claim
|
|
||||||
```
|
|
||||||
5. Seed the domain with **common domain reference**, if applicable.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 6. Certificates and Policies
|
|
||||||
|
|
||||||
* Root keys must be encrypted at rest.
|
|
||||||
* DAMs signed using offline authority host root keys.
|
|
||||||
* Policies included in `/domains/<domain-id>/policies/`.
|
|
||||||
* All signed artifacts stored in `/sops-bundles/` for delivery.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 7. Optional Persistence
|
|
||||||
|
|
||||||
* If you want the host **bootable from USB**:
|
|
||||||
|
|
||||||
* Overlay FS (SquashFS or ISO) for system binaries
|
|
||||||
* Writable ZFS/Btrfs/EXT4 for `/domains` and `/sops-bundles`
|
|
||||||
* This allows the system to remain **fully offline** but store persistent artifacts.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 8. Recommended Approach
|
|
||||||
|
|
||||||
* **Immutable image** for the offline host (SquashFS or ISO)
|
|
||||||
* **Writable storage** for domains (`/mnt/pool`) or USB disk
|
|
||||||
* Use **ZFS datasets** for:
|
|
||||||
|
|
||||||
* Block storage
|
|
||||||
* Snapshots of logs & store
|
|
||||||
* Pre-load binaries for deterministic PER generation, DAM signing, and rescue scripts.
|
|
||||||
* Environment claims stored and optionally signed before any DAM operation.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
If you want, I can **write a concrete build script outline** (e.g., Debian-based ISO with overlay + ZFS pools + included binaries + directory structure), so you have a starting point to actually produce the bootable auth host image.
|
|
||||||
|
|
||||||
Do you want me to do that next?
|
|
||||||
|
|
||||||
Loading…
Reference in a new issue