ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

hashsigs-ts快速上手教程:3行TypeScript代码跑出第一个WOTS+哈希签名

hashsigs-ts快速上手教程:3行TypeScript代码跑出第一个WOTS+哈希签名 hashsigs-ts快速上手教程3行TypeScript代码跑出第一个WOTS哈希签名【免费下载链接】hashsigs-tsHash-based signatures in typescript, WOTS项目地址: https://gitcode.com/gh_mirrors/ha/hashsigs-ts想亲手体验抗量子计算的哈希签名吗本文带你用 hashsigs-ts 这个 TypeScript 哈希签名库3 行代码完成第一个 WOTSWinternitz One-Time Signature Plus签名与验签全程不超过 5 分钟 为什么关注 WOTS 哈希签名抗量子安全WOTS 属于基于哈希的签名Hash-based Signatures安全性只依赖哈希函数的单向性不受量子计算机破解大数分解/离散对数的威胁是后量子密码学的热门方向 一次一签极致简单它属于一次性签名方案签名即消耗一次私钥的使用额度逻辑纯粹、易审计纯 TypeScript 实现hashsigs-ts 核心代码集中在 src/wotsplus.ts运行时仅依赖轻量哈希库noble/hashes浏览器、Node、边缘环境都能跑⚠️ 一次性签名意味着同一个私钥只能签一条消息。要签多条消息需要配合 XMSS 等树结构方案来管理多套一次性密钥。一键安装 hashsigs-tsnpm install hashsigs-ts如果你还想阅读源码或跑测试可以直接克隆仓库git clone https://gitcode.com/gh_mirrors/ha/hashsigs-ts项目入口导出在 src/index.tsWOTSPlus类和HashFunction类型均从此处导出。3行代码生成密钥 → 签名 → 验签下面是完整可运行的最小示例核心逻辑就是 3 行import { WOTSPlus } from hashsigs-ts; import { keccak_256 } from noble/hashes/sha3; const wotsPlus new WOTSPlus(keccak_256); // 准备两个 32 字节种子可理解为私钥种子和公开种子 const privateSeed keccak_256(new TextEncoder().encode(my secret seed)); const publicSeed keccak_256(new TextEncoder().encode(my public seed)); const message keccak_256(new TextEncoder().encode(Hello WOTS!)); // ① 生成密钥对 ② 签名 ③ 验签 const { publicKey, privateKey } wotsPlus.generateKeyPair(privateSeed, publicSeed); const signature wotsPlus.sign(privateKey, publicSeed, message); const isValid wotsPlus.verify(publicKey, message, signature); // ✅ true三个方法各司其职步骤方法作用① 生成密钥generateKeyPair由私钥种子 公开种子推导出 32 字节私钥和 64 字节公钥② 签名sign把消息转成 w 进制索引在哈希链上取对应位置输出 67 段签名③ 验签verify从签名位置继续推链还原公钥分段并比对返回布尔值WOTS 参数速查表new WOTSPlus(hashFn, hashLen?, chainLen?)的默认与约束如下参数推导见 构造函数参数默认值说明hashLen32 字节哈希输出长度Keccak-256 正好 32 字节messageLen32 字节必须传入哈希后的消息不是原文长度chainLenw16哈希链长度只允许 4 或 16XMSS 兼容约束见 validateParameters公钥大小64 字节公开种子 公钥分段哈希签名大小2144 字节67 段 × 32 字节64 个消息分段 3 个校验和分段 一句话记忆w越大签名越小但计算越慢16 是官方测试向量采用的默认值。验证你的实现跑一遍测试向量仓库自带与 Keccak-256 配套的 JSON 测试向量覆盖密钥、公钥分段、消息与完整签名测试向量数据test/test_vectors/wotsplus_keccak256.json测试用例src/wotsplus.test.ts 中逐条调用verify与verifyWithRandomizationElements双通道校验克隆仓库后执行npm install # 安装依赖 npm test # 运行 Vitest 测试 npm run coverage # 查看覆盖率报告阈值 80%配置见 [vitest.config.ts](https://link.gitcode.com/i/4cf4881c609fe91edc076ea78a485a74)常见问题FAQQ为什么 message 必须恰好 32 字节AWOTS 只对定长输入签名messageLen hashLen 32。签名前先对任意长度的原文做一次keccak_256即可这也是示例里先哈希原文的原因。Q私钥长度不对会怎样Asign 会直接抛出private key length must be 32 bytes属于快速失败设计便于排查。Qverify 和 verifyWithRandomizationElements 有什么区别A两者验签逻辑一致后者允许你传入预先计算好的随机化元素r序列省去重复生成开销适合批量验签场景源码见 verifyWithRandomizationElements。Q可以直接签多条消息吗A不能。WOTS 是一次性签名同一私钥复用会导致私钥泄露。多消息场景请搭配 XMSS 类树形方案。项目结构一览hashsigs-ts/ ├── src/ │ ├── index.ts # 包入口导出 WOTSPlus │ ├── wotsplus.ts # WOTS 核心实现密钥/签名/验签 │ └── wotsplus.test.ts # Vitest 测试用例 ├── test/ │ └── test_vectors/ │ └── wotsplus_keccak256.json # Keccak-256 官方风格测试向量 ├── package.json # npm 包 quip.network/hashsigs ├── tsup.config.ts # 构建 CJS ESM 双格式产物 └── vitest.config.ts # 测试与覆盖率配置写在最后hashsigs-ts 用不到 400 行 TypeScript 把后量子密码里著名的 WOTS 算法讲得明明白白生成密钥、签名、验签 三步配合 JSON 测试向量 就能完成从读代码到跑通的完整闭环。现在就去npm install hashsigs-ts打出你的第一个哈希签名吧 ✍️许可说明本项目采用 AGPL-3.0-or-later 开源协议全文见 COPYING商用前请留意其网络副本条款。【免费下载链接】hashsigs-tsHash-based signatures in typescript, WOTS项目地址: https://gitcode.com/gh_mirrors/ha/hashsigs-ts创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表