为什么我从 PKCS8 格式加载密钥时需要通过 Secure Random

问题描述 投票:0回答:1

我正在 Rust 中使用 Ring lib 来生成

ECDSA_P256
并且我正在传递
SystemRandom
,并且我正在获取 PKCS8 密钥对格式。到目前为止,没有任何问题。

let rng = SystemRandom::new();
let pkcs8_bytes = signature::EcdsaKeyPair::generate_pkcs8(&signature::ECDSA_P256_SHA256_ASN1_SIGNING, &rng)
.map_err(|e| Error::KeyGenerationFailed(e.to_string()))?;

对我来说,问题是当我从 PKCS8 格式加载密钥对时,它再次要求通过安全随机,例如:

let rng = SystemRandom::new();
let key_pair = signature::EcdsaKeyPair::from_pkcs8(
      &signature::ECDSA_P256_SHA256_ASN1_SIGNING,
      pkcs8_bytes.as_ref(),
      &rng,
).map_err(|e| Error::KeyGenerationFailed(e.to_string()))?;

如果我只是从字节重新加载密钥对,为什么我需要传递 new

SystemRandom
? 我知道对于同一个 Kaypair,随机数应该始终相同,但是对于每个 Sign 操作,它应该不同,还是我错了?

rust random cryptography public-key
1个回答
0
投票

这是因为 Rust 方法还根据存在的公钥对私钥进行验证。毕竟,它正在尝试将密钥组合在一起。它通过执行签名/验证操作来实现这一点,您已经知道它需要安全的随机实现。

准确地说,对

new
函数的调用是在 from_pkcs8 函数末尾处按
here
所示进行的。

© www.soinside.com 2019 - 2024. All rights reserved.