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

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

Patricia Arquette
Patricia Arquette原创
2024-10-31 17:56:38218浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn