Files
Deshab-OS/RE/UTSM_设计架构.md
T

486 lines
8.1 KiB
Markdown
Raw Normal View History

# UTSM 设计架构记录
本文记录 Deshab 内核当前 UTSM 相关架构定稿。
---
## 1. 架构目标
UTSM 的目标不是传统强安全隔离,而是在极高权限、极高效率的单地址空间 Ring0 内核中提供一种封缄内存模型。
核心目标:
```text
所有普通内存可读,但默认是密文。
明文读写必须通过 UTRW。
UUID 作为进程和内存段的调谐因子。
数据区保持连续,避免 UUID 孔洞。
DRR 提供 root key、checkpoint、recovery log 和回滚。
调度器保持 O(1)。
```
---
## 2. 总架构模块
```text
Deshab Kernel Core
SAS-R0-PCQ
单地址空间 Ring0 任务模型
Per-CPU O(1) 位图调度器
DRR
Dedicated Recovery Root
专用恢复根
watchdog / root key / checkpoint / recovery log / A-B rollback
UTSM
UUID-Tuned Sealed Memory
UUID 调谐封缄内存
UTRW
UTSM Tagged Reader/Writer
UTSM 带标记读写器
DMP
Descriptor Meta Page
段描述符元页
PCKC
Per-CPU Key Cache
每 CPU 密钥缓存
```
---
## 3. UTSM 内存模型
每个 UTSM 段由两部分组成:
```text
DMP + Cipher Data
```
布局:
```text
+-------------------------------+
| DMP: Descriptor Meta Page |
+-------------------------------+
| Cipher Data Page 0 |
+-------------------------------+
| Cipher Data Page 1 |
+-------------------------------+
| Cipher Data Page 2 |
+-------------------------------+
| ... |
+-------------------------------+
```
规则:
```text
DMP 不属于用户数据。
Cipher Data 只存密文。
UUID 不插入 Cipher Data。
数据区保持连续。
```
---
## 4. 关键设计替代
从原始构想到 UTSM v1 的替代关系:
```text
十进制 UUID
-> 128-bit 二进制 UUID
UUID 数字间隔插入内存
-> 独立 DMP 元数据页
UUID 数字位置表
-> segment_slot + generation + tweak_seed
十进制凯撒
-> UUID 调谐的 cache-line 流式加密
每次传统 syscall
-> Ring0 fast accessor + PCKC
写入时避开 UUID
-> 连续密文数据区直接写
```
---
## 5. 数据结构架构
### 5.1 uuid128_t
```c
typedef struct {
uint64_t hi;
uint64_t lo;
} uuid128_t;
```
### 5.2 utsm_process_context
```c
struct utsm_process_context {
uuid128_t process_uuid;
uint64_t crypto_epoch;
uint64_t recovery_generation;
uint32_t capability_table_slot;
uint32_t capability_count;
uint32_t flags;
};
```
### 5.3 utsm_segment_desc
```c
struct utsm_segment_desc {
uuid128_t segment_uuid;
uuid128_t owner_process_uuid;
void *cipher_base;
uint64_t cipher_length;
void *dmp_base;
uint64_t key_epoch;
uint64_t tweak_seed;
void *dirty_bitmap;
void *mac_table;
uint32_t generation;
uint32_t flags;
uint32_t state;
uint32_t last_cpu;
uint64_t writer_seq;
uint64_t checkpoint_generation;
};
```
### 5.4 utsm_dmp
```c
struct utsm_dmp {
uint64_t magic;
uint32_t version;
uint32_t segment_slot;
uint64_t fast_base;
uint64_t fast_limit;
uint64_t fast_tweak_seed;
uint64_t fast_key_epoch;
uint64_t dirty_bitmap_base;
uint64_t mac_table_base;
uint64_t last_writer_seq;
uint32_t last_cpu;
uint32_t flags;
uint64_t crc;
};
```
### 5.5 utsm_capability
```c
struct utsm_capability {
uint32_t segment_slot;
uint32_t generation;
uint32_t rights;
uint32_t epoch;
uint64_t uuid_digest;
uint64_t auth_tag;
};
```
---
## 6. UTRW 读写器架构
UTRW 分三层:
```text
Level 0: Raw Access
直接访问 cipher_base,读到密文。
Level 1: Fast Path
capability O(1) 定位段。
PCKC 命中。
无全局锁。
无 trap。
Level 2: Slow Path
key miss。
epoch mismatch。
checkpoint/recovery。
MAC fail。
poisoned segment。
```
读写基本流程:
```text
Read:
cap -> segment desc -> PCKC key -> 64B line 解密 -> 返回明文
Write:
cap -> segment desc -> PCKC key -> 64B line 加密 -> 写密文 -> dirty bitmap -> recovery log
```
---
## 7. DRR 协作架构
DRR 保存:
```text
root_key 或 root_key handle
global_crypto_epoch
segment table snapshot
DMP snapshot
dirty shard summary
dirty bitmap
MAC root
recovery log
poisoned segment list
Boot Control Block
DRR Emergency Pool
A/B checkpoint metadata slot
```
DRR 负责:
```text
watchdog 检测
freeze-all
checkpoint
page rollback
segment rollback
system rollback
A/B 镜像回滚
```
---
## 8. Checkpoint / Rollback 架构
Checkpoint 类型:
```text
Light Checkpoint
控制面快照。
Dirty Page Checkpoint
dirty ciphertext page 快照。
Boot Checkpoint
启动状态和 A/B slot 信息。
```
### 8.1 Dirty Shard
Dirty Bitmap 采用分片结构。
```text
Dirty Shard
dirty_count
shard_id
page_base
page_count
last_checkpoint_epoch
bitmap
```
checkpoint 时:
```text
dirty_count == 0 的 shard 直接跳过。
dirty_count > 0 的 shard 才扫描 dirty bit。
```
这样 checkpoint 成本为:
```text
O(number_of_dirty_shards + number_of_dirty_pages)
```
### 8.2 A/B Checkpoint Metadata
checkpoint metadata 使用双槽:
```text
Checkpoint Metadata Slot A
Checkpoint Metadata Slot B
```
写入规则:
```text
写 inactive slot
写 metadata / dirty index / MAC root / CRC
flush
原子切换 active slot
旧 slot 作为 fallback
```
恢复规则:
```text
active slot 有效 -> 使用 active
active slot 无效 -> fallback 另一个 slot
双槽都无效 -> system rollback
```
### 8.3 DRR Emergency Pool
DRR 独立预留紧急内存池。
```text
DRR Emergency Pool
DRR private stack
recovery log buffer
checkpoint metadata buffer
crash buffer
metadata slab
emergency pages
```
约束:
```text
普通 allocator 不可使用。
普通 OOM 不影响 DRR recovery。
DRR recovery 路径禁止依赖普通堆分配器。
Emergency Pool 耗尽时进入 system rollback。
```
Rollback 级别:
```text
Page Rollback
单页恢复。
Segment Rollback
整段恢复。
System Rollback
重启并由 bootloader 切换 last_good_slot。
```
---
## 9. 与 SAS-R0-PCQ 的整合
UTSM Task 是:
```text
Ring0 调度实体
+ process_uuid
+ crypto context
+ capability table
+ encrypted stack/heap
+ PCKC hot hint
+ DRR recovery generation
```
调度切换:
```text
schedule()
-> utsm_switch_out(old)
-> pick_next_task()
-> utsm_switch_in(next)
-> context_switch(old, next)
```
调度路径只允许:
```text
设置 crypto 指针
加载 process_uuid
预热 hot_segment_hint
标记 PWC dirty flush
```
禁止:
```text
扫描段
扫描 capability table
计算 MAC
写 checkpoint
重加密整段
```
---
## 10. 启动顺序
```text
Bootloader
-> 读取 Boot Control Block
-> 选择 active_slot / last_good_slot
-> 加载 SYSTEM/boot/utsm.elf
-> 传入 memory map 和 DRR region
DRR Init
-> 初始化 watchdog
-> 建立 root key handle
-> 初始化 recovery log
-> 初始化 checkpoint region
-> 初始化 heartbeat page
-> 初始化 DRR Emergency Pool
-> 初始化 A/B checkpoint metadata slot
UTSM Init
-> 初始化 global crypto epoch
-> 初始化 segment table
-> 初始化 DMP pool
-> 初始化 PCKC area
-> 初始化 dirty shard pool
-> 初始化 dirty bitmap / MAC table pool
-> 注册 UTRW fast path / slow path
Scheduler Init
-> 初始化 per-CPU runqueue
-> 初始化 per-CPU heartbeat
-> 初始化每 CPU PCKC
-> 创建 bootstrap task
-> 创建核心服务 task
```
---
## 11. 当前定稿边界
UTSM v1 确定:
```text
加密粒度:64B cache line
Dirty 粒度:4KB page
Dirty 分片:Dirty Shard
MAC 粒度:4KB page
段定位:O(1)
调度额外成本:O(1)
checkpoint 成本:O(dirty shards + dirty pages)
checkpoint metadata:A/B 双槽,CRC 校验,原子切换
DRR recovery 内存:Emergency Pool 独立预留
```
暂不追求:
```text
完整 RAM 原地回滚
对恶意 Ring0 代码的强安全隔离
设备外部副作用回滚
```
设备恢复策略:
```text
内存恢复后,设备 reset/reinit。
磁盘依赖文件系统 journal。
网卡 TX 已发包不回滚,RX/TX ring 重建。
```