后量子安全签名实战指南:quip-miner 的 sr25519 + ML-DSA-44 混合密钥体系
【免费下载链接】quip-minerThe quip network mining stack. This includes a coordinator and links all of the official quip network miners.项目地址: https://gitcode.com/gh_mirrors/qu/quip-miner
quip-miner 是 Quip 网络的官方挖矿栈,它最与众不同的一点,是把后量子安全签名直接落进了生产环境:每个矿工账户同时持有 sr25519 与 NIST 标准 ML-DSA-44 两套密钥,任何一份被破解都不足以伪造签名。本文用大白话带你拆解这套混合密钥体系如何生成、如何签名、如何保护私钥,3 步就能上手生成你自己的混合签名账户。
为什么挖矿账户要上后量子签名?
传统公钥体系(包括 Substrate 生态通用的 sr25519)建立在一个假设上:离散对数难题足够难。而量子计算机一旦成熟,Shor 算法可能直接击穿这类假设——链上资产面临"先存后取"(harvest now, decrypt later)风险。
quip-miner 的思路很务实:不赌哪一边会赢,而是让两条腿同时走路🦵
- 经典腿:sr25519(25519 曲线上的 Schnorr 签名),兼容 Substrate 生态;
- 后量子腿:ML-DSA-44(FIPS 204 标准的格密码签名方案,抗量子攻击);
- 验证规则:两段签名必须同时有效,缺一即拒。
攻击者就算未来掌握了量子算力,还得同时攻破经典与格密码两条防线,难度呈指数级叠加。这就是"混合密钥体系"的核心价值。
一套混合密钥是怎么运作的?
整套流程的源码都集中在 shared/hybrid_signer.py,逻辑可以拆成三步。
1️⃣ 一枚 32 字节主种子,派生出两套密钥
你只需保管一个32 字节的主种子(master seed)。它通过 HKDF-SHA256 密钥派生函数扩展成两个互不相关的子种子:
| 派生用途 | 输出 | 生成的密钥 |
|---|---|---|
info="classical" | classical_seed (32B) | sr25519 密钥对 |
info="pq" | pq_seed (32B) | ML-DSA-44 密钥对(FIPS 204 KeyGen) |
同一个主种子在任何机器上重放,都会得到完全相同的两套密钥——这意味着密钥迁移、备份都不需要搬密钥本身,只需保管那 32 字节。
2️⃣ 拼接出 2484 字节的"双保险"签名
混合签名的形状是固定且可校验的,源码中用常量钉死了尺寸:
- 混合公钥= sr25519 公钥 (32B) ‖ ML-DSA-44 公钥 (1312B) =1344 字节
- 混合签名= sr25519 签名 (64B) ‖ ML-DSA-44 签名 (2420B) =2484 字节
签名前还会对消息做"域分离"预处理:0x01 ‖ "hybrid-sr25519-mldsa44-v1\0" ‖ ctx ‖ msg(见prepare_message函数)。这层前缀保证混合签名永远不可能被误当作纯 sr25519 签名使用,杜绝跨协议的签名重放。
3️⃣ 账户地址:从混合公钥哈希而来
链上账户(AccountId32)不是 sr25519 公钥本身,而是:
blake2_256("quip-account-v1" ‖ 混合公钥1344B)→ 32 字节账户 ID → SS58 编码
域字符串quip-account-v1在 tests/test_hybrid_signer.py 中被"钉死"测试——改一个字节就等于全链换钥匙,所以双方都有测试防止意外漂移。
快速上手:3 步生成你的混合签名密钥
整个流程对新手非常友好,核心就是"一条命令 + 一行配置":
第 1 步:生成混合密钥库
quip-miner keygen --out ~/.quip-miner/signing.json命令会打印 SS58 地址、账户 ID 和前缀公钥,密钥库落盘为 JSON(写入逻辑见 quip_cli.py 的keygen子命令)。
第 2 步:在配置中指向密钥库
在 quip-miner.example.toml 中只需一行:
signer_key = "~/.quip-miner/signing.json"第 3 步:启动挖矿,签名自动走混合路径
客户端构建外卡时会按签名类型自动分流(substrate/client.py 的build_signed_extrinsic):识别到Hybrid类型就走手动 SCALE 组装的混合签名通道,矿工全程无感知。开发环境还支持//Alice等预置开发者种子,见 substrate/miner_bootstrap.py。
工程细节:quip-miner 内置了哪些安全防线?
这套体系把"密钥即资产"的防护做到了字节级,密钥库实现见 shared/keystore_hybrid.py:
- 🔒0600 权限原子写入:主种子从文件被创建的那一刻起就是仅属主可读写(
O_EXCL+ 初始权限),不存在"先写后改权限"的泄露窗口; - 🛡️加载时防篡改校验:每次加载都会从主种子重新派生密钥,并与 JSON 中缓存的公钥逐字节比对——有人偷偷改动缓存公钥,文件会直接拒绝加载,而不是等到链上拒签才发现问题;
- 🎲随机化(hedged)签名:两个分量默认采用随机化签名,同一条消息每次签名结果不同,但仍能通过同一公钥验证,降低签名侧信道信息;
- 📐尺寸即契约:签名长度不是 2484 字节、公钥不是 1344 字节,验证立即失败——畸形输入走快速拒绝路径。
实测:混合签名下的挖矿运行表现
签名开销会不会拖累挖矿性能?以下是仓库内置基准测试的真实数据。第一张图展示了 100 个区块中各矿工(CPU/QPU)的出块耗时与分布,绿色线为 3 区块移动平均:
第二张图是 QPU 与不同 SA 采样配置的解质量、耗时、成功率对比,可以看出混合签名并未成为瓶颈:
写在最后
quip-miner 给行业打了个样:后量子安全不必"等标准落地",经典 + 格密码的混合签名就能以极小的工程代价把安全基线抬高一个数量级。它的三套核心模块值得一读:
- 混合签名实现:shared/hybrid_signer.py
- 密钥库与安全落盘:shared/keystore_hybrid.py
- 抽象签名接口:shared/signer.py
想要深入测试细节(防篡改、确定性、字节级对齐),tests/test_hybrid_signer.py 是最好的活文档。下一步你可以跑通quip-miner keygen,亲手生成一枚双保险地址,体验后量子签名在挖矿链路上的完整闭环。
【免费下载链接】quip-minerThe quip network mining stack. This includes a coordinator and links all of the official quip network miners.项目地址: https://gitcode.com/gh_mirrors/qu/quip-miner
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考