docs: narrow secspider metadata fields
This commit is contained in:
@@ -112,14 +112,8 @@
|
|||||||
```text
|
```text
|
||||||
// ignore
|
// ignore
|
||||||
//@name:[直] omofun
|
//@name:[直] omofun
|
||||||
//@webSite:http://101.42.227.94:11024
|
|
||||||
//@version:1
|
//@version:1
|
||||||
//@remark:
|
//@remark:
|
||||||
//@codeID:z5nxgZSWE8ipZYvGtImsRFu73TOB45fZ
|
|
||||||
//@env:
|
|
||||||
//@isAV:0
|
|
||||||
//@deprecated:0
|
|
||||||
//@order:B
|
|
||||||
//@format:secspider/1
|
//@format:secspider/1
|
||||||
//@alg:aes-256-gcm
|
//@alg:aes-256-gcm
|
||||||
//@wrap:hkdf-aes-keywrap
|
//@wrap:hkdf-aes-keywrap
|
||||||
@@ -137,14 +131,8 @@ payload.base64:...
|
|||||||
|
|
||||||
- 业务元数据
|
- 业务元数据
|
||||||
- `name`
|
- `name`
|
||||||
- `webSite`
|
|
||||||
- `version`
|
- `version`
|
||||||
- `remark`
|
- `remark`
|
||||||
- `codeID`
|
|
||||||
- `env`
|
|
||||||
- `isAV`
|
|
||||||
- `deprecated`
|
|
||||||
- `order`
|
|
||||||
- 协议元数据
|
- 协议元数据
|
||||||
- `format`
|
- `format`
|
||||||
- `alg`
|
- `alg`
|
||||||
@@ -161,6 +149,7 @@ payload.base64:...
|
|||||||
|
|
||||||
字段约束如下:
|
字段约束如下:
|
||||||
|
|
||||||
|
- `name`、`version`、`remark` 是仅保留的业务元数据字段
|
||||||
- `format` 固定为 `secspider/1`
|
- `format` 固定为 `secspider/1`
|
||||||
- `alg` 首版固定为 `aes-256-gcm`
|
- `alg` 首版固定为 `aes-256-gcm`
|
||||||
- `wrap` 首版固定为 `hkdf-aes-keywrap`
|
- `wrap` 首版固定为 `hkdf-aes-keywrap`
|
||||||
@@ -189,7 +178,7 @@ payload.base64:...
|
|||||||
选择原因如下:
|
选择原因如下:
|
||||||
|
|
||||||
- `AES-256-GCM` 为成熟 AEAD 算法,适合同时提供保密性和密文完整性
|
- `AES-256-GCM` 为成熟 AEAD 算法,适合同时提供保密性和密文完整性
|
||||||
- `HKDF-SHA256` 足够简单,适合从宿主主密钥按 `kid/codeID/version` 派生包密钥
|
- `HKDF-SHA256` 足够简单,适合从宿主主密钥按 `kid/name/version` 派生包密钥
|
||||||
- `Ed25519` 适合快速、稳定地完成离线签名和验签
|
- `Ed25519` 适合快速、稳定地完成离线签名和验签
|
||||||
|
|
||||||
本次设计明确不采用:
|
本次设计明确不采用:
|
||||||
@@ -253,7 +242,7 @@ payload.base64:...
|
|||||||
wrap_key = HKDF-SHA256(
|
wrap_key = HKDF-SHA256(
|
||||||
ikm = master_secret,
|
ikm = master_secret,
|
||||||
salt = kid,
|
salt = kid,
|
||||||
info = "secspider:" + codeID + ":" + version
|
info = "secspider:" + name + ":" + version
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -263,7 +252,7 @@ wrap_key = HKDF-SHA256(
|
|||||||
|
|
||||||
收益:
|
收益:
|
||||||
|
|
||||||
- 同一 `master_secret` 下,不同 `codeID/version` 的包不会直接共钥
|
- 同一 `master_secret` 下,不同 `name/version` 的包不会直接共钥
|
||||||
- 支持按 `kid` 做宿主侧密钥轮换
|
- 支持按 `kid` 做宿主侧密钥轮换
|
||||||
|
|
||||||
## 密钥轮换策略
|
## 密钥轮换策略
|
||||||
@@ -363,7 +352,7 @@ wrap_key = HKDF-SHA256(
|
|||||||
3. 检查 `format == secspider/1`
|
3. 检查 `format == secspider/1`
|
||||||
4. 按 `kid` 获取签名公钥
|
4. 按 `kid` 获取签名公钥
|
||||||
5. 对头字段和 payload 执行 `Ed25519` 验签
|
5. 对头字段和 payload 执行 `Ed25519` 验签
|
||||||
6. 验签通过后,按 `kid/codeID/version` 派生 `wrap_key`
|
6. 验签通过后,按 `kid/name/version` 派生 `wrap_key`
|
||||||
7. 解开 `ek` 得到 `content_key`
|
7. 解开 `ek` 得到 `content_key`
|
||||||
8. 使用 `content_key + nonce` 解密 `payload`
|
8. 使用 `content_key + nonce` 解密 `payload`
|
||||||
9. 对解密后的源码做 `sha256` 校验,必须与 `hash` 一致
|
9. 对解密后的源码做 `sha256` 校验,必须与 `hash` 一致
|
||||||
@@ -432,7 +421,7 @@ class SecSpiderRuntime:
|
|||||||
4. 生成随机 `nonce`
|
4. 生成随机 `nonce`
|
||||||
5. 可选压缩源码
|
5. 可选压缩源码
|
||||||
6. 使用 `AES-256-GCM` 加密源码
|
6. 使用 `AES-256-GCM` 加密源码
|
||||||
7. 基于 `master_secret + kid + codeID + version` 派生 `wrap_key`
|
7. 基于 `master_secret + kid + name + version` 派生 `wrap_key`
|
||||||
8. 用 `wrap_key` 包裹 `content_key`
|
8. 用 `wrap_key` 包裹 `content_key`
|
||||||
9. 生成规范化包头
|
9. 生成规范化包头
|
||||||
10. 对头部和 payload 做 `Ed25519` 签名
|
10. 对头部和 payload 做 `Ed25519` 签名
|
||||||
|
|||||||
Reference in New Issue
Block a user