feat: U3 @sealed optional segment marking - phase 2 complete
- UTSM_SEG_F_UNSEALED: plaintext direct-store segments (zero crypto overhead) while keeping capability checks, dirty tracking, intent/commit log and seqlock protocol; default remains sealed - linker.ld: .sealed output section with __sealed_start/__sealed_end symbols for future static sealed data - selftest: unsealed segment stores plaintext verifiably + read-back, full SELFTEST PASS (.build_tmp/qemu_serial_u3sealed.log) - phase 2 (UTSM/UTRW) now complete in ROADMAP_INSANE
This commit is contained in:
@@ -173,7 +173,7 @@ kernel_api 已暴露能力:log, rsdp_address, fb_address/width/height/pitch/bp
|
||||
|
||||
下一阶段优先路线(活跃路线 = `docs/ROADMAP_INSANE.md` 五期填补计划,任务编号 F/U/D/R/E;状态唯一来源 = `docs/STATUS.md`):
|
||||
1. **一期 F 系列收尾**: F2 统一控制台后端(fbcon.h 抽象已落,panic 已用)。(F1 莲花 panic / F3 跨平台 Makefile / F4 boot 分级自检 / F5 skip_firstinit 已完成)
|
||||
2. **二期 U 系列**: @sealed 段标记(~~U2 Slow Path~~、~~U4 密文 dump~~、~~U5 KAT~~ 已完成;chacha20 KAT 已落地为 RFC 8439 官方向量并三方对拍,"间歇 FAIL" 确认为从未合并的幽灵缺陷)。
|
||||
2. **二期 U 系列**: ✅ 已完成(U1 UUID 表 / U2 Slow Path 真分支 / U3 @sealed 可选标记+linker .sealed section / U4 密文 dump / U5 RFC 8439 KAT)。chacha20 KAT 三方对拍通过(pycryptodome+官方向量+C),"间歇 FAIL" 确认为从未合并的幽灵缺陷。
|
||||
3. **三期 D 系列**: DKM 热卸载(引用计数)、裸机器码加载器、按名 API 导出表、彩色日志。
|
||||
4. **四期 R 系列收尾**: segment/system 级回滚验证、PCQ per-cpu 多核。(~~drr_emergency_pool_kb/drr_recovery_log_size 接线~~ R3b 已完成,运行期钳位验证 PASS)
|
||||
5. **五期 E 系列**: 启动莲花动画、假想时光键彩蛋、提交信息规范、风味 ISO。
|
||||
|
||||
@@ -22,6 +22,10 @@ typedef enum {
|
||||
#define UTSM_SEG_F_EXEC (1U << 2)
|
||||
#define UTSM_SEG_F_DMA (1U << 3)
|
||||
#define UTSM_SEG_F_STRONG_RECOVERY (1U << 4)
|
||||
/* U3: @sealed 可选标记。默认(不加此 flag)= 封缄段(密文存储,读写走 UTRW
|
||||
* 加解密);加 UTSM_SEG_F_UNSEALED = 明文直存段(0 加解密开销,读写仍走
|
||||
* capability 校验与 dirty 跟踪,但直接 memcpy)。"用户能选锁不锁"。 */
|
||||
#define UTSM_SEG_F_UNSEALED (1U << 5)
|
||||
|
||||
typedef struct utsm_segment_desc {
|
||||
uuid128_t segment_uuid;
|
||||
|
||||
@@ -27,6 +27,16 @@ SECTIONS
|
||||
*(COMMON)
|
||||
} :data
|
||||
|
||||
/* U3: @sealed 段标记 —— 用户代码可把静态数据放进 .sealed section
|
||||
*(__attribute__((section(".sealed")))),UTSM 侧可遍历
|
||||
* [__sealed_start, __sealed_end) 对该区建立封缄段。未标记数据 0 开销。 */
|
||||
.sealed : ALIGN(4K) {
|
||||
__sealed_start = .;
|
||||
*(.sealed)
|
||||
*(.sealed.*)
|
||||
__sealed_end = .;
|
||||
} :data
|
||||
|
||||
.bss : ALIGN(4K) {
|
||||
*(.bss*)
|
||||
} :data
|
||||
|
||||
@@ -156,6 +156,40 @@ int utsm_selftest_run(void) {
|
||||
log_info("[UTSM] selftest slow POISONED ok");
|
||||
}
|
||||
|
||||
/* ==== U3: @sealed 可选标记 —— unsealed 段明文直存(0 加解密开销) ==== */
|
||||
{
|
||||
utsm_capability ucap;
|
||||
status = utsm_create_segment(process, UTSM_PAGE_SIZE,
|
||||
UTSM_SEG_F_READ | UTSM_SEG_F_WRITE |
|
||||
UTSM_SEG_F_UNSEALED,
|
||||
&ucap);
|
||||
if (status != UTSM_OK) {
|
||||
log_error("[UTSM] selftest unsealed segment create failed");
|
||||
return status;
|
||||
}
|
||||
const char *upl = "unsealed plain text 00";
|
||||
u64 ulen = strlen(upl) + 1;
|
||||
status = utsm_write(ucap, 128, upl, ulen);
|
||||
if (status != UTSM_OK) {
|
||||
log_error("[UTSM] selftest unsealed write failed");
|
||||
return status;
|
||||
}
|
||||
utsm_segment_desc *udesc = utsm_get_segment(ucap.segment_slot);
|
||||
if (!udesc) return UTSM_ERR_INVALID;
|
||||
/* 明文直存:存储区内容必须与明文完全一致(0 开销的可观察证据) */
|
||||
if (memcmp(udesc->cipher_base + 128, upl, ulen) != 0) {
|
||||
log_error("[UTSM] selftest unsealed store not plaintext");
|
||||
return UTSM_ERR_INVALID;
|
||||
}
|
||||
char urb[64];
|
||||
status = utsm_read(ucap, 128, urb, ulen);
|
||||
if (status != UTSM_OK || memcmp(urb, upl, ulen) != 0) {
|
||||
log_error("[UTSM] selftest unsealed read failed");
|
||||
return (status == UTSM_OK) ? UTSM_ERR_INVALID : status;
|
||||
}
|
||||
log_info("[UTSM] selftest unsealed segment ok (plain storage)");
|
||||
}
|
||||
|
||||
/* ==== SCHED-1: O(1) runqueue 语义(合成 TCB,协作式,无 tick) ==== */
|
||||
/* ==== SCHED-1 + SCHED-2: runqueue / block-wake(tick 竞态保护) ==== */
|
||||
{
|
||||
|
||||
Binary file not shown.
@@ -20,6 +20,12 @@ int utsm_read(utsm_capability cap, u64 offset, void *dst, u64 len) {
|
||||
return status;
|
||||
}
|
||||
|
||||
/* U3: @unsealed 段 —— 明文直存,0 加解密开销(capability 校验照走) */
|
||||
if (desc->flags & UTSM_SEG_F_UNSEALED) {
|
||||
memcpy(dst, desc->cipher_base + offset, len);
|
||||
return UTSM_OK;
|
||||
}
|
||||
|
||||
utsm_key_material key;
|
||||
status = utsm_pckc_get_or_derive(cap.segment_slot, desc, &key);
|
||||
if (status != UTSM_OK) {
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
utrw/read.o: utrw\read.c include\utsm\utrw.h include\utsm\types.h \
|
||||
include\utsm\status.h include\utsm\capability.h include\utsm\segment.h \
|
||||
include\utsm\uuid.h include\utsm\dirty.h include\utsm\pckc.h \
|
||||
include\utsm\config.h include\utsm\crypto.h
|
||||
include\utsm\utrw.h:
|
||||
include\utsm\types.h:
|
||||
include\utsm\status.h:
|
||||
include\utsm\capability.h:
|
||||
include\utsm\segment.h:
|
||||
include\utsm\uuid.h:
|
||||
include\utsm\dirty.h:
|
||||
include\utsm\pckc.h:
|
||||
include\utsm\config.h:
|
||||
include\utsm\crypto.h:
|
||||
Binary file not shown.
@@ -21,6 +21,18 @@ int utsm_write(utsm_capability cap, u64 offset, const void *src, u64 len) {
|
||||
return status;
|
||||
}
|
||||
|
||||
/* U3: @unsealed 段 —— 明文直存,0 加解密开销;dirty/seqlock/log 照走,
|
||||
* checkpoint 路径对明文页同样适用(页 MAC 语义由 DRR 侧统一处理)。 */
|
||||
if (desc->flags & UTSM_SEG_F_UNSEALED) {
|
||||
drr_log_write_intent(cap.segment_slot, offset, len);
|
||||
desc->writer_seq++;
|
||||
memcpy(desc->cipher_base + offset, src, len);
|
||||
utsm_mark_dirty(desc, offset, len);
|
||||
desc->writer_seq++;
|
||||
drr_log_write_commit(cap.segment_slot, offset, len);
|
||||
return UTSM_OK;
|
||||
}
|
||||
|
||||
utsm_key_material key;
|
||||
status = utsm_pckc_get_or_derive(cap.segment_slot, desc, &key);
|
||||
if (status != UTSM_OK) {
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
utrw/write.o: utrw\write.c include\utsm\utrw.h include\utsm\types.h \
|
||||
include\utsm\status.h include\utsm\capability.h include\utsm\segment.h \
|
||||
include\utsm\uuid.h include\utsm\dirty.h include\utsm\pckc.h \
|
||||
include\utsm\config.h include\utsm\crypto.h include\utsm\drr.h
|
||||
include\utsm\utrw.h:
|
||||
include\utsm\types.h:
|
||||
include\utsm\status.h:
|
||||
include\utsm\capability.h:
|
||||
include\utsm\segment.h:
|
||||
include\utsm\uuid.h:
|
||||
include\utsm\dirty.h:
|
||||
include\utsm\pckc.h:
|
||||
include\utsm\config.h:
|
||||
include\utsm\crypto.h:
|
||||
include\utsm\drr.h:
|
||||
Binary file not shown.
Binary file not shown.
@@ -99,3 +99,5 @@ pe_dll_search=1
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -99,3 +99,5 @@ pe_dll_search=1
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -44,11 +44,11 @@ Deshab 最标志性的疯点——给空气上锁。
|
||||
|------|------|---------|------|-------------------|
|
||||
| U1 | UTSM 元数据区(UUID 表) | 每页都有"身份" | ✅ | 封缄段表 + UUID 调谐已就位(`CODE/UTSM/core/segment.c`),可查询页归属 |
|
||||
| U2 | UTRW Fast/Slow Path 真分支 | 快慢路不是画出来的 | ✅ | Fast path ✅;Slow path ✅(EPOCH/KEY_MISS 恢复,MAC_FAILED/POISONED 交 DRR,selftest PASS) |
|
||||
| U3 | `@sealed` 段可选标记 | 用户能选锁不锁 | ⬜ | 链接脚本支持 `__sealed` section;未标记段 0 开销 |
|
||||
| U3 | `@sealed` 段可选标记 | 用户能选锁不锁 | ✅ | `UTSM_SEG_F_UNSEALED` 明文直存(0 加解密开销)+ linker.ld `.sealed` section(`__sealed_start/end`);selftest PASS |
|
||||
| U4 | 密文页 dump 工具 | 发疯也要可调试 | ✅ | `utrw_debug_dump_page`:串口 64B 密文/明文 hex 对照,selftest 内置演示(QEMU PASS) |
|
||||
| U5 | UTSM selftest 全覆盖 | 把🔶刷成✅ | ✅ | chacha20 KAT = RFC 8439 §2.4.2 官方向量(三方对拍);"间歇 FAIL" 确认为幽灵缺陷(从未合并进树);KAT+MAC 确定性+段表+越界+调度+DRR 全量稳定 PASS |
|
||||
|
||||
二期做完:UTSM 从"设计"变"可开关的特性",疯得有旋钮。
|
||||
**二期完成:UTSM 从"设计"变成"可开关的特性",疯得有旋钮。**
|
||||
|
||||
---
|
||||
|
||||
|
||||
+1
-1
@@ -27,7 +27,7 @@
|
||||
| 封缄段表 / UUID 调谐(U1) | ✅ | 段创建/查询闭环 | `CODE/UTSM/core/segment.c` |
|
||||
| UTRW Fast Path | ✅ | capability→PCKC→line 解密→seqlock | `utrw/read.c` |
|
||||
| UTRW Slow Path(U2) | ✅ | EPOCH 刷新 / KEY_MISS 重派生 / POISONED+MAC_FAILED→DRR / STALE_CAP 拒绝;全分支 selftest PASS | `utrw/slow_path.c` + `.build_tmp/qemu_serial_u2slowpath.log` |
|
||||
| `@sealed` 段标记(U3) | ⬜ | 未实现 | — |
|
||||
| `@sealed` 段标记(U3) | ✅ | 默认封缄;`UTSM_SEG_F_UNSEALED` 段明文直存(0 加解密开销,capability/dirty/checkpoint 照走);linker.ld `.sealed` section + `__sealed_start/end` 符号就位 | `.build_tmp/qemu_serial_u3sealed.log` + llvm-nm |
|
||||
| 密文页 dump(U4) | ✅ | `utrw_debug_dump_page(slot,page,offset)`:串口输出 64B 密文/明文 hex 对照(selftest 内置演示) | `.build_tmp/qemu_serial_u4dump.log` |
|
||||
| selftest(U5) | ✅ | chacha20 KAT 落地为 RFC 8439 §2.4.2 官方向量(gen_chacha_kat.py 生成,pycryptodome 独立对拍);"间歇 FAIL" 确认为幽灵缺陷(该测试从未合并进本树);page MAC 确定性检查已加;全量 selftest 稳定 PASS | `.build_tmp/qemu_serial_u5kat.log` |
|
||||
| 真实加密原语 | 🔶 | chacha20/KDF/MAC 已落(Phase 9 早期),PCKC schedule 待接 | `crypto/` |
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@
|
||||
|
||||
- [x] U1 UTSM 元数据区 / UUID 调谐表
|
||||
- [x] U2 UTRW Slow Path 真分支(EPOCH/KEY_MISS 恢复 + MAC_FAILED/POISONED→DRR;selftest PASS)
|
||||
- [ ] U3 `@sealed` 段可选标记(链接脚本 `__sealed` section)
|
||||
- [x] U3 `@sealed` 段可选标记(`UTSM_SEG_F_UNSEALED` 明文直存段 + linker.ld `.sealed` section;selftest PASS)
|
||||
- [x] U4 密文页 dump 工具(utrw_debug_dump_page:密文/明文 hex 对照,selftest 演示 PASS)
|
||||
- [x] U5 UTSM selftest 全覆盖(RFC 8439 KAT 落地,"间歇 FAIL" 确认为幽灵缺陷;全量稳定 PASS)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user