重构:核心迁移至 oss/core + NBPF 多重签名加密 + NIR 编译器 + README 全面升级

- 核心功能从 store/ 迁移至 oss/core/ 框架层
- 实现 NBPF 包格式:多重签名(Ed25519+RSA-PSS+HMAC)+ 多重加密(AES-256-GCM)
- 实现 NIR 编译器:基于 compile()+marshal 的跨平台中间表示
- 新增 nebula nbpf CLI 命令组(pack/unpack/verify/sign/keygen)
- 新增 19 个 NBPF 测试用例,覆盖全链路
- 彻底重写 README,大型项目标准框架风格,所有图表使用 SVG
- 更新 LICENSE 版权声明
- 清理旧版 store 插件目录(已迁移至 oss/core)
This commit is contained in:
Falck
2026-05-05 07:29:43 +08:00
parent 4441a968db
commit 3a096f59a9
184 changed files with 5715 additions and 10066 deletions

98
ai.md
View File

@@ -794,7 +794,91 @@ Phase 4 (长期) — K8s部署、ADR、类型检查、pre-commit、异步I/O
---
## 21. 变更记录
## 21. NBPF 包格式系统
### 21.1 架构概览
NBPFNebula Binary Package Format是 NebulaShell 的插件分发格式,基于 ZIP 容器,集成多重签名 + 多重加密 + NIR 中间表示。
```
.nbpf 包结构:
├── META-INF/
│ ├── MANIFEST.MF # 包清单(明文)
│ ├── NIR-MANIFEST.MF # NIR 模块清单(明文)
│ ├── OUTER_SIG # 外层 Ed25519 签名
│ ├── OUTER_CERT # 外层 Ed25519 公钥
│ ├── MIDDLE_SIG # 中层 RSA-4096-PSS 签名
│ ├── MIDDLE_CERT # 中层 RSA-4096 公钥
│ ├── INNER_SIG # 内层 HMAC-SHA256 签名
│ ├── ENC_KEY1.enc # AES 密钥1RSA-OAEP 加密)
│ └── ENC_KEY2.enc # AES 密钥2RSA-OAEP 加密)
├── NIR/
│ ├── module1.nir # NIR 编译产物marshal 序列化 code object
│ └── module2.nir
└── [加密层]
├── outer_encryption # 外层加密AES-256-GCM, key1
└── middle_encryption # 中层加密AES-256-GCM, key2
```
### 21.2 加密层级
| 层级 | 算法 | 密钥 | 保护范围 |
|------|------|------|----------|
| 外层加密 | AES-256-GCM | key1RSA-OAEP 封装) | META-INF/ 和 NIR/ 目录 |
| 中层加密 | AES-256-GCM | key2RSA-OAEP 封装) | NIR 数据内容 |
| 外层签名 | Ed25519 | 开发者私钥 | 加密层完整性 |
| 中层签名 | RSA-4096-PSS | 作者私钥 | 模块内容完整性 |
| 内层签名 | HMAC-SHA256 | 派生密钥key1+key2 | 单个模块完整性 |
### 21.3 NIR 编译器
NIRNebula Intermediate Representation基于 Python 原生 `compile()` 函数将源码编译为 code object再通过 `marshal` 序列化存储。
- **跨平台**code object 是 Python 虚拟机原生格式,与架构无关
- **目标版本**Python 3.10+
- **代码隐藏**:混淆导入路径(动态 `__import__()` + 字符串拼接)、关键常量运行时计算、反调试检测(`sys.gettrace()`)、内存擦除(`bytearray` 覆盖清零)、花指令混淆(向 `co_consts` 插入无害垃圾常量)
### 21.4 CLI 命令
```bash
# 生成密钥对
nebula nbpf keygen --output ./nbpf-keys
# 打包插件
nebula nbpf pack ./my-plugin -o my-plugin.nbpf \
--ed25519-key ./nbpf-keys/private/ed25519.pem \
--rsa-key ./nbpf-keys/private/rsa.pem
# 解包
nebula nbpf unpack my-plugin.nbpf -o ./extracted
# 验证签名
nebula nbpf verify my-plugin.nbpf
# 重新签名
nebula nbpf sign my-plugin.nbpf \
--ed25519-key ./nbpf-keys/private/ed25519.pem \
--rsa-key ./nbpf-keys/private/rsa.pem
```
### 21.5 框架集成
- `PluginManager.load()` 自动检测 `.nbpf` 后缀并路由到 `NBPFLoader`
- `PluginManager._load_plugins_from_dir()` 同时扫描 `.nbpf` 文件(优先级 50
- 密钥配置目录:`data/nbpf-keys/`trusted/rsa/private
### 21.6 测试覆盖
19 个测试用例(`tests/test_nbpf.py`
- NBPCrypto加密/解密/签名/验证
- NIRCompiler编译/反编译/花指令混淆
- NBPFPacker/Unpacker打包/解包/清单提取
- NBPFLoader加载/签名验证/解密
- PluginManager 集成:端到端加载流程
---
## 22. 变更记录
### 2026-05-03
- **P0 修复完成**:修复 40+ 损坏 Python 文件的 class 定义头和语法错误
@@ -805,3 +889,15 @@ Phase 4 (长期) — K8s部署、ADR、类型检查、pre-commit、异步I/O
- **README 重写**805 行 → 283 行,企业级开源项目风格
- **分支清理**:删除 Gitee/Github 上除 main 外的所有远程分支
- **全量语法检查**:零错误通过
### 2026-05-05
- **NBPF 包格式**:实现 Nebula 二进制包格式(.nbpf基于 ZIP 容器
- **多重签名体系**:外层 Ed25519包完整性→ 中层 RSA-4096-PSS作者身份→ 内层 HMAC-SHA256模块完整性
- **多重加密体系**:外层 AES-256-GCM密钥1加密 META-INF/ 和 NIR/)→ 中层 AES-256-GCM密钥2加密 NIR 数据)
- **RSA-OAEP 密钥封装**AES 密钥用 RSA 公钥加密后存入包内
- **NIR 编译器**:基于 Python `compile()` + `marshal` 序列化的中间表示,实现"一次编译,到处运行"
- **代码隐藏策略**:混淆导入路径、关键常量运行时计算、反调试检测、内存擦除、花指令混淆
- **CLI 命令**`nebula nbpf` 子命令组pack/unpack/verify/sign/keygen
- **框架集成**`PluginManager` 原生支持 `.nbpf` 文件加载,自动检测并路由
- **测试覆盖**19 个测试用例覆盖加密、编译、打包、加载、集成全链路
- **密钥管理**`data/nbpf-keys/` 目录结构trusted/rsa/private