重构:核心迁移至 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:
98
ai.md
98
ai.md
@@ -794,7 +794,91 @@ Phase 4 (长期) — K8s部署、ADR、类型检查、pre-commit、异步I/O
|
||||
|
||||
---
|
||||
|
||||
## 21. 变更记录
|
||||
## 21. NBPF 包格式系统
|
||||
|
||||
### 21.1 架构概览
|
||||
|
||||
NBPF(Nebula 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 密钥1(RSA-OAEP 加密)
|
||||
│ └── ENC_KEY2.enc # AES 密钥2(RSA-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 | key1(RSA-OAEP 封装) | META-INF/ 和 NIR/ 目录 |
|
||||
| 中层加密 | AES-256-GCM | key2(RSA-OAEP 封装) | NIR 数据内容 |
|
||||
| 外层签名 | Ed25519 | 开发者私钥 | 加密层完整性 |
|
||||
| 中层签名 | RSA-4096-PSS | 作者私钥 | 模块内容完整性 |
|
||||
| 内层签名 | HMAC-SHA256 | 派生密钥(key1+key2) | 单个模块完整性 |
|
||||
|
||||
### 21.3 NIR 编译器
|
||||
|
||||
NIR(Nebula 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)
|
||||
|
||||
Reference in New Issue
Block a user