Files
Deshab-OS/docs/RE/UTSM_设计架构.md
2026-07-29 10:26:25 +08:00

8.1 KiB
Raw Permalink Blame History

UTSM 设计架构记录

本文记录 Deshab 内核当前 UTSM 相关架构定稿。


1. 架构目标

UTSM 的目标不是传统强安全隔离,而是在极高权限、极高效率的单地址空间 Ring0 内核中提供一种封缄内存模型。

核心目标:

所有普通内存可读,但默认是密文。
明文读写必须通过 UTRW。
UUID 作为进程和内存段的调谐因子。
数据区保持连续,避免 UUID 孔洞。
DRR 提供 root key、checkpoint、recovery log 和回滚。
调度器保持 O(1)。

2. 总架构模块

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 段由两部分组成:

DMP + Cipher Data

布局:

+-------------------------------+
| DMP: Descriptor Meta Page     |
+-------------------------------+
| Cipher Data Page 0            |
+-------------------------------+
| Cipher Data Page 1            |
+-------------------------------+
| Cipher Data Page 2            |
+-------------------------------+
| ...                           |
+-------------------------------+

规则:

DMP 不属于用户数据。
Cipher Data 只存密文。
UUID 不插入 Cipher Data。
数据区保持连续。

4. 关键设计替代

从原始构想到 UTSM v1 的替代关系:

十进制 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

typedef struct {
    uint64_t hi;
    uint64_t lo;
} uuid128_t;

5.2 utsm_process_context

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

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

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

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 分三层:

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。

读写基本流程:

Read:
    cap -> segment desc -> PCKC key -> 64B line 解密 -> 返回明文

Write:
    cap -> segment desc -> PCKC key -> 64B line 加密 -> 写密文 -> dirty bitmap -> recovery log

7. DRR 协作架构

DRR 保存:

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 负责:

watchdog 检测
freeze-all
checkpoint
page rollback
segment rollback
system rollback
A/B 镜像回滚

8. Checkpoint / Rollback 架构

Checkpoint 类型:

Light Checkpoint
    控制面快照。

Dirty Page Checkpoint
    dirty ciphertext page 快照。

Boot Checkpoint
    启动状态和 A/B slot 信息。

8.1 Dirty Shard

Dirty Bitmap 采用分片结构。

Dirty Shard
    dirty_count
    shard_id
    page_base
    page_count
    last_checkpoint_epoch
    bitmap

checkpoint 时:

dirty_count == 0 的 shard 直接跳过。
dirty_count > 0 的 shard 才扫描 dirty bit。

这样 checkpoint 成本为:

O(number_of_dirty_shards + number_of_dirty_pages)

8.2 A/B Checkpoint Metadata

checkpoint metadata 使用双槽:

Checkpoint Metadata Slot A
Checkpoint Metadata Slot B

写入规则:

写 inactive slot
写 metadata / dirty index / MAC root / CRC
flush
原子切换 active slot
旧 slot 作为 fallback

恢复规则:

active slot 有效 -> 使用 active
active slot 无效 -> fallback 另一个 slot
双槽都无效 -> system rollback

8.3 DRR Emergency Pool

DRR 独立预留紧急内存池。

DRR Emergency Pool
    DRR private stack
    recovery log buffer
    checkpoint metadata buffer
    crash buffer
    metadata slab
    emergency pages

约束:

普通 allocator 不可使用。
普通 OOM 不影响 DRR recovery。
DRR recovery 路径禁止依赖普通堆分配器。
Emergency Pool 耗尽时进入 system rollback。

Rollback 级别:

Page Rollback
    单页恢复。

Segment Rollback
    整段恢复。

System Rollback
    重启并由 bootloader 切换 last_good_slot。

9. 与 SAS-R0-PCQ 的整合

UTSM Task 是:

Ring0 调度实体
+ process_uuid
+ crypto context
+ capability table
+ encrypted stack/heap
+ PCKC hot hint
+ DRR recovery generation

调度切换:

schedule()
    -> utsm_switch_out(old)
    -> pick_next_task()
    -> utsm_switch_in(next)
    -> context_switch(old, next)

调度路径只允许:

设置 crypto 指针
加载 process_uuid
预热 hot_segment_hint
标记 PWC dirty flush

禁止:

扫描段
扫描 capability table
计算 MAC
写 checkpoint
重加密整段

10. 启动顺序

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 确定:

加密粒度: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 独立预留

暂不追求:

完整 RAM 原地回滚
对恶意 Ring0 代码的强安全隔离
设备外部副作用回滚

设备恢复策略:

内存恢复后,设备 reset/reinit。
磁盘依赖文件系统 journal。
网卡 TX 已发包不回滚,RX/TX ring 重建。