Golang Go语言中 请问 ecdsa.GenerateKey 使用同样的 seed 会生成两种密钥对是正常的吗?

发布于 1周前 作者 caililin 来自 Go语言

RT

在 1.20 之前的版本,用同样的seed只会生成一种密钥对,1.20 开始就出现这个现象了。

完整代码在下面,因为 go.dev 有缓存,做了两个缓存结果,两个的代码是一样的,只有第 45 行的打印文字不同。

这段是和预期一样的 https://go.dev/play/p/-xTC8xOiFtp

这段不符合预期 https://go.dev/play/p/_rY-hh0sEze


Golang Go语言中 请问 ecdsa.GenerateKey 使用同样的 seed 会生成两种密钥对是正常的吗?

更多关于Golang Go语言中 请问 ecdsa.GenerateKey 使用同样的 seed 会生成两种密钥对是正常的吗?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

3 回复

更多关于Golang Go语言中 请问 ecdsa.GenerateKey 使用同样的 seed 会生成两种密钥对是正常的吗?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Go语言的crypto/ecdsa包中,ecdsa.GenerateKey函数用于生成一个ECDSA(椭圆曲线数字签名算法)密钥对。关于你提到的使用相同的seed是否会生成两种密钥对的问题,答案是否定的。

在正常情况下,如果使用相同的seed来调用ecdsa.GenerateKey函数,应该会生成完全相同的密钥对。这是因为随机数生成器(PRNG,伪随机数生成器)在给定相同的seed时,会产生相同的随机数序列。ECDSA密钥对的生成依赖于这些随机数,因此,相同的seed会导致生成相同的私钥和相应的公钥。

如果你在使用相同的seed时观察到不同的密钥对,这通常意味着:

  1. 代码中可能存在某种错误,比如seed值在传递给GenerateKey之前被意外修改。
  2. 可能使用了不同的随机数生成器配置或环境,这影响了PRNG的行为(尽管这种情况非常罕见)。
  3. 有可能是对密钥对生成过程的误解或误判,比如比较密钥对的方式不正确。

因此,如果你遇到了这种情况,建议首先检查你的代码,确保seed值在生成密钥对前后保持一致,并且没有其他因素干扰随机数生成过程。如果问题仍然存在,可以考虑在Go社区或相关论坛中寻求更具体的帮助。

回到顶部