我如何在Go中进行确定性RSA

时间:2017-05-05 03:36:44

标签: go cryptography rsa

我有两个go服务,让我们称它们为A和B.B拥有一个RSA密钥对,而A只知道公钥。我希望他们知道他们是否就某些价值达成一致。

我想通过B使用公钥对加密V进行加密并让A进行比较来实现这一目标,但所有crytpo/rsa函数都采用RNG来增加熵和制作V的每个哈希值不同。这意味着我无法比较哈希。

go标准库中是否有一个函数可以确定地散列V?

注意:我可以通过使用每次哈希V时使用相同值的新RNG实现此目的,但我希望能够从其他语言计算此哈希值,这将使我与Go的RNG绑定。

2 个答案:

答案 0 :(得分:1)

  

我想通过B使用公钥对加密V进行加密并让A进行比较来实现这一目标......

你使用了错误的原语。

如果您希望私钥的所有者证明他们拥有某些数据,请让他们签署该数据。收件人可以使用公钥验证签名。

使用SignPSS和VerifyPSS方法执行此操作。签名不是确定性的,但不一定是 - 收件人仍然可以验证它。

答案 1 :(得分:0)

查看EncryptOAEP的文档:

  

随机参数用作熵源,以确保两次加密相同的消息不会导致相同的密文。

因此,随机数据不会影响读者仅使用公钥解密消息的能力。每次加密相同的值时,密文字节都会有所不同,这是一件好事。

在这些文档中查看有关加密/解密OAEP的示例。它应该足以让你朝着正确的方向前进。