ESSO

Ethernos 数字签名与哈希标准

版本:1.0.0
状态:生效
发布机构:Ethernos Studio - Security Lab
规范编号:ESSO-10410
适用范围:Ethernos 全生态软件签名、校验、包管理器及第三方兼容实现
最后更新:2026-06-17


目录

  1. 范围与目标
  2. 规范性引用
  3. 术语与定义
  4. 哈希算法标准
  5. 签名算法标准
  6. 密钥管理规范
  7. 签名格式与流程
  8. 验证协议
  9. 证书与公钥格式
  10. 算法迁移策略
  11. 附录

1. 范围与目标

本规范定义 Ethernos 生态系统中软件完整性校验与身份验证所必须使用的密码学算法标准,包括:

本规范为 ESSO-10430(包管理器证书规范)及 ESSO-11420(网络来源处理规范)提供密码学层面的实现依据。


2. 规范性引用


3. 术语与定义

术语 定义
哈希(Hash) 将任意长度输入映射为固定长度输出的单向密码学函数,用于完整性校验。
数字签名(Digital Signature) 使用私钥对数据摘要进行加密运算,生成可验证来源与完整性的密码学证据。
Ed25519 基于 Edwards-curve 25519 的 EdDSA 签名方案,提供 128 位安全强度。
密钥对(Key Pair) 由公钥与私钥组成的非对称密码学密钥集合,公钥公开,私钥保密。
密钥指纹(Key Fingerprint) 公钥的密码学哈希值,用于快速标识与比对公钥。
签名载荷(Signing Payload) 被送入签名算法的规范化数据内容,通常为待签名对象的规范化 JSON 或二进制摘要。
双重签名(Dual Signature) 由发布者签名与官方认证机构签名共同组成的签名结构,提供两层独立验证。

4. 哈希算法标准

4.1 强制算法:SHA-256

SHA-256(Secure Hash Algorithm 256-bit)为 Ethernos 生态当前强制使用的唯一哈希算法。

4.2 哈希表示规范

4.3 未来算法:SHA-3 / Keccak-256

若 SHA-256 出现密码学弱点或碰撞攻击可行化:


5. 签名算法标准

5.1 强制算法:Ed25519

Ed25519 为 Ethernos 生态当前强制使用的唯一数字签名算法。

5.2 选择理由

5.3 禁用算法

以下算法在 Ethernos 生态中被明确禁止用于新签发:


6. 密钥管理规范

6.1 密钥生成

6.2 密钥存储

6.3 密钥轮换

6.4 官方根密钥


7. 签名格式与流程

7.1 签名载荷构造

签名前,必须将待签名对象按以下步骤处理为签名载荷:

  1. 提取字段:移除签名对象中的 signatures 字段,保留其余所有字段;
  2. 规范化序列化:按 RFC 8785(JSON Canonicalization Scheme, JCS) 进行规范化 JSON 序列化;
    • 对象键按 Unicode 码点排序;
    • 无多余空白字符;
    • 数字使用最短精确表示;
  3. 编码:将规范化 JSON 字符串编码为 UTF-8 字节序列;
  4. 摘要(可选):直接对 UTF-8 字节序列进行 Ed25519 签名,或先计算 SHA-256 摘要再签名。推荐直接对原始字节签名。

7.2 签名结构

签名在 JSON 中的表示:

{
  "key_id": "a1b2c3d4e5f6a7b8",
  "algorithm": "Ed25519",
  "signature": "base64_encoded_signature"
}

7.3 双重签名流程

发布者签名
    │
    ▼
生成签名载荷
    │
    ▼
使用发布者私钥签名 → 生成 publisher.signature
    │
    ▼
提交至官方认证服务器
    │
    ▼
官方验证发布者签名有效
    │
    ▼
使用官方根密钥私钥签名 → 生成 authority.signature
    │
    ▼
合并为双重签名结构,写入 .cert 文件

8. 验证协议

8.1 验证步骤

客户端验证签名时,必须执行以下步骤:

  1. 获取公钥:从 cert.cavvy.ethernos.net/{fingerprint}.json 中提取对应 key_id 的公钥;
  2. 重构载荷:按 7.1 节规则重构签名载荷(移除 signatures,JCS 规范化);
  3. 验证发布者签名:使用发布者公钥验证 signatures.publisher.signature
  4. 验证官方签名:使用硬编码或预置的官方根公钥验证 signatures.authority.signature
  5. 结果判定:两层签名均通过视为验证成功;任一层失败视为验证失败。

8.2 失败处理

失败场景 客户端行为
公钥不存在或已撤销 拒绝安装,提示密钥无效。
签名值格式错误 拒绝安装,提示证书损坏。
签名验证失败 拒绝安装,提示内容可能被篡改。
算法字段非 Ed25519 拒绝安装,提示不支持的算法。
官方签名缺失 视为未通过官方认证,按未验证源处理。

9. 证书与公钥格式

9.1 公钥注册格式

在指纹元信息文件(.json)中注册的公钥:

{
  "key_id": "a1b2c3d4e5f6a7b8",
  "algorithm": "Ed25519",
  "public_key": "MCowBQYDK2VwAyEA...",
  "activated_at": "2025-01-15T08:00:00Z",
  "status": "active"
}

9.2 证书文件格式

参见 ESSO-10430 第 5.2 节。本规范仅约束其中密码学相关字段的算法与格式。


10. 算法迁移策略

10.1 迁移触发条件

以下任一条件触发算法迁移评估:

10.2 迁移流程

  1. 发布新规范版本(如 2.0.0),定义新算法标准;
  2. 官方服务器同时支持新旧算法至少 12 个月;
  3. 客户端更新以支持新算法,优先使用新算法验证;
  4. 过渡期结束后,旧算法签发的证书标记为过期;
  5. 完全退役旧算法支持。

11. 附录

附录 A:Ed25519 实现参考

语言 推荐库
C/C++ libsodium, OpenSSL 3.x
Rust ed25519-dalek, ring
Go crypto/ed25519 (标准库)
Python PyNaCl, cryptography
JavaScript tweetnacl-js

附录 B:测试向量

客户端实现应使用 RFC 8032 附录 A 中的测试向量验证 Ed25519 实现正确性。

附录 C:版本历史

版本 日期 变更内容
1.0.0 2026-06-17 初始规范发布,确立 SHA-256 与 Ed25519 为基线算法。

规范制定:Ethernos Studio - Security Lab
生效日期:2026-06-17