hashsigs-ts完整使用指南:generateKeyPair、sign、verify四大核心方法全解析
hashsigs-ts完整使用指南generateKeyPair、sign、verify四大核心方法全解析【免费下载链接】hashsigs-tsHash-based signatures in typescript, WOTS项目地址: https://gitcode.com/gh_mirrors/ha/hashsigs-tshashsigs-ts 是一个用 TypeScript 编写的哈希签名库实现了 WOTSWinternitz One-Time Signature Plus一次性哈希签名算法天然具备抗量子计算攻击的安全特性。本文带你完整走一遍它的四大核心方法generateKeyPair、sign、verify 和 verifyWithRandomizationElements帮助你在项目中快速完成密钥生成、消息签名与验签。一、快速开始安装与初始化 项目支持通过 npm 直接安装见 package.jsonnpm install hashsigs-ts如需克隆源码阅读实现可执行git clone https://gitcode.com/gh_mirrors/ha/hashsigs-ts初始化一个 WOTS 实例只需传入一个哈希函数例如 keccak_256import { WOTSPlus } from hashsigs-ts; import { keccak_256 } from noble/hashes/sha3; const wotsPlus new WOTSPlus(keccak_256); // 默认 hashLen32chainLen16构造函数位于 src/wotsplus.ts#L94-L124其中chainLenWinternitz 参数 w必须为 2 的幂且取 4 或 16以满足 XMSSRFC 8391兼容约束。w 越大签名越小、计算越慢默认 16 是最佳平衡点。二、generateKeyPair生成 WOTS 密钥对 方法实现见 src/wotsplus.ts#L209-L237const { publicKey, privateKey } wotsPlus.generateKeyPair(privateSeed, publicSeed);入参两个 32 字节的种子privateSeed私钥种子、publicSeed公钥种子通常由安全随机数生成原理将两个种子拼接后哈希得到私钥再基于公钥种子派生出 67 个随机化元素逐条推进哈希链 15 步得到 67 段公钥分量产出公钥为 64 字节前 32 字节是 publicSeed后 32 字节是所有公钥分量的哈希私钥为 32 字节。⚠️一次性签名警告WOTS 的每个密钥对只能安全地签名一次。实际工程中需搭配 XMSS 等树状签名结构扩展签名次数。三、sign对消息进行签名 ✍️方法实现见 src/wotsplus.ts#L240-L267const messageHash keccak_256(originalMessage); // 先哈希到 32 字节 const signature wotsPlus.sign(privateKey, publicSeed, messageHash);签名前的三步理解消息必须恰好 32 字节与哈希输出等长长消息请先自行哈希将消息转换为base-16 表示得到 64 个链下标追加3 段校验和防选择明文攻击见 wotsplus.ts#L361-L373 的 checksum 计算。最终返回一个包含67 个 32 字节分量的数组总长 2144 字节每个分量就是对应哈希链上某一步的输出。四、verify验证签名真伪 ️方法实现见 src/wotsplus.ts#L276-L296const isValid wotsPlus.verify(publicKey, messageHash, signature); // true / false验签逻辑非常直观源码注释 wotsplus.ts#L269-L275 有完整说明从公钥中拆出 publicSeed 与公钥哈希由 publicSeed 重新生成随机化元素把每个签名分量沿哈希链补齐剩余步数还原出公钥分量对 67 段分量整体哈希与公钥中的哈希比对一致则验签通过。篡改消息、公钥或签名的任何一个字节都会导致哈希比对失败。五、verifyWithRandomizationElements高性能验签 如果同一公钥要验签多次例如批量交易验证可以先用 generateRandomizationElements 预生成随机化元素再调用 verifyWithRandomizationElements省去每次验签重复派生元素的开销。该方法常用于智能合约等对 gas 敏感的场景PRF 派生可复用于多条签名验证。六、核心参数速查表 参数默认值说明hashLen32哈希输出字节数keccak256messageLen32待签名消息长度先哈希chainLen16Winternitz 参数 w仅支持 4 或 16numMessageChunks64消息链分段数numChecksumChunks3校验和分段数signatureSize2144 字节签名总长67×32publicKeySize64 字节公钥总长参数自动推导逻辑见 src/wotsplus.ts#L101-L124。七、测试与可信度 ✅项目使用 Vitest 测试可直接运行验证npm test # 运行测试 npm run coverage # 生成覆盖率报告要求 ≥80%测试文件 src/wotsplus.test.ts 覆盖了密钥生成、空签名拒绝、正常验签等场景并用公开的 WOTS 测试向量 test/test_vectors/wotsplus_keccak256.json 做跨实现一致性校验确保算法行为与标准参考实现完全一致。八、许可协议说明 项目采用AGPL-3.0-or-later开源协议详见 COPYING 与 README.md商用前请注意该协议的开源义务要求。总结hashsigs-ts 把后量子安全的 WOTS 哈希签名浓缩为四个易用的方法generateKeyPair建密钥、sign出签名、verify做验签、verifyWithRandomizationElements提性能。配合 XMSS 树结构它能为链上资产、离线签名与长期安全存储提供抵御量子计算威胁的可靠方案。【免费下载链接】hashsigs-tsHash-based signatures in typescript, WOTS项目地址: https://gitcode.com/gh_mirrors/ha/hashsigs-ts创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考