首页 > 后端开发 > Golang > 为什么 golang.org/x/crypto/ed25519 返回 BitTorrent BEP-0044 测试数据的意外公钥?

为什么 golang.org/x/crypto/ed25519 返回 BitTorrent BEP-0044 测试数据的意外公钥?

Patricia Arquette
发布: 2024-10-31 17:56:38
原创
345 人浏览过

Why Does golang.org/x/crypto/ed25519 Return Unexpected Public Keys for BitTorrent BEP-0044 Test Data?

ed25519.公共结果差异

问题描述

使用Golang包golang.org/x/crypto/ed25519,尝试检索与给定私钥相对应的公钥会产生与预期不同的结果。具体来说,该库返回私有验证密钥 (PVK) 的最后 32 个字节,而提供的测试数据表明这是不正确的。

解释

差异是由于使用的格式不同而产生的ed25519 私钥。 Golang 实现遵循 RFC 8032 约定,该约定将私钥定义为 32 字节种子与 32 字节公钥的串联。

但是,BitTorrent BEP-0044 测试中提供的私钥data 是种子 SHA512 哈希的 64 字节结果,由于哈希函数的单向性质,这些格式无法直接转换。

解决方案

使用具有给定测试数据的 Golang 库,需要该库的修改版本,以允许根据散列私钥格式自定义生成公钥和签名。这可以通过从库中复制相关代码并修改实现以适应不同的格式来实现。

修改后的代码包括:

  • getPublicKey:从散列生成公钥私钥(种子)。
  • sign:根据散列私钥、公钥和消息计算签名。

使用这些修改后的函数,可以复制预期的测试向量,其中包括公钥和签名。

以上是为什么 golang.org/x/crypto/ed25519 返回 BitTorrent BEP-0044 测试数据的意外公钥?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板