让我们首先快速回想一下RSA如何工作,省略一些琐碎的细节。请记住,我们经常使用一个数字对一些数字取模,而并不是所有的整数。这里的等式“a +b≡c(mod n)”,等价于“(a + b)%n = c%n”。注意,“(mod n)”部分不适用于右侧“c”,但实际上适用于“≡”和所有其他“≡”上面。这使得它很难阅读,但我保证会谨慎使用它。现在回到RSA:
证明者提出以下数字:
p,q:两个随机的私密素数n := p qd:1 < d < n – 1 的随机数e:d e ≡ 1 (mod (p-1)(q-1)) 公钥是 (e,n),私钥是 d。素数 p 和 q 可以丢弃,但是不能暴露。
消息m通过下面公式加密
E(m):= m e%n 并且c = E(m)通过解密
D(c):= c d%n。 因为cd≡(me%N)d≡med(mod n),m的指数就是对(P-1)(Q-1)这组数取模,我们得到med ≡m(mod n)。此外,RSA的安全性依赖于这样的假设:n不能轻易被因式分解,因此d不能从e计算(如果我们知道p和q,这将是容易的)。
RSA 的一个牛逼的特性是同态乘法。通常来讲,如果你可以交换两个操作的顺序而不影响计算结果,那么我们就说这两个操作是同态的。在同态加密中,这就是你可以对加密数据进行计算的一个属性。完全同态加密是存在的,但是现在还没有应用到实际中,它能够对任何基于加密数据的程序完成计算。在这里对于 RSA 来说,我们只讨论组乘法。更正式地:E(x)E(y)≡xe y e ≡(xy)e≡E(xy)(mod n),文字描述就是:两个加密消息的的乘积等于两个信息乘机的加密。
这种同态性已经允许某种零知识的乘法证明:证明者知道一些秘密数字x和y并计算它们的乘积,但只发送加密版本a= E(x),b = E(y)和c = E(xy)到验证者。验证者现在检查(ab)%n≡c%n 是否成立,此时验证者只知道加密版的乘积以及乘积是否被正确的计算,但是她不知道两个乘数和真正的乘积。如果你用加法来替代乘法,那就是一个主要操作为添加余额的
区块链方向了。
版权申明:本内容来自于互联网,属第三方汇集推荐平台。本文的版权归原作者所有,文章言论不代表链门户的观点,链门户不承担任何法律责任。如有侵权请联系QQ:3341927519进行反馈。