其他分享
首页 > 其他分享> > Bristol的第22篇密码学

Bristol的第22篇密码学

作者:互联网

密码学52件事

Number 22:如何用蒙哥马利算法表示一个数字和多个相乘的数字?

这篇依旧是密码学实现细节部分中的.

大多数内容来自于[1].

安全和效率?

密码学的目标是设计高度安全的密码学协议,但是同时这些协议也应该被有效率的实现.这样就可以一次一次快速执行而不会因为用户变得而慢下来,例如,在线商场和网络银行都有这种需求.因此我们采取了一些措施来减少加密的成本.这些代价较高的操作就包括正整数模数的算法,因为除法比较费时.

模余操作的代价

从现在开始我们给出\(x \mod n\)的概念,就是\(x\)除以\(n\)的余数,因此它是一个小于\(n\)的非负的整数.(等价于在\(Z/nZ\)的\(x\)类,等等).注意这里Z/nZ是指模n下的所有剩余类集合的集合,也是一个群.

让\(a,b \in Z\),假设我们知道\(a \mod n\)和\(b \mod n\).在许多密码学应用中,我们希望计算结果\(ab \mod n\).简单的方法就是先计算\(ab\),然后再模\(n\).但是如果我们需要很多个乘法,那么我们就需要多次的模.这会增加代价.例如,在RSA中,消息\(m\)的密文通过这样计算出来:\(c = m^e \mod pq\),其中\(p,q\)是大素数.通过乘\(e\) 次计算\(m\),每次要模\(pq\).最好是把复杂的模约简推迟到计算的最后.但是同时我们仅仅计算\(m^e\)再模\(n\),我们就会得到一个超级大的数.所以还是不行,我们需要更多的思考.

"蒙哥马利算法空间"

蒙哥马利将注意力集中在简化的模数上,典型的是2的幂.因此我们可以计算\(ab \mod n\):

为什么要是2的幂?假如说\(x\)是一个用二进制写成的整数(计算机),和\(r = 2^k\).对一些整数\(k > 0\).

算法

让\(a,b,n,r\)都是正整数,其中\(gcd(n,r) = 1\),\(r>n\).我们计算\(ab \mod n\).

说明一下为什么计算的快:

正确性证明

\(u = abr \mod n\)

\(u = abr \mod n\)

\(= arbrr^{-1} \mod n\)

\(= tr^{-1} \mod n\)

\(= trr^{-1}/r \mod n\)

\(= t*(1+nn^{'})/r \mod n\)

\(=((t + nn't)/r + mn) \: \mathrm{mod} \: n = (t + (n't + mr)n)/r \: \mathrm{mod} \: n\)

注意我们最后一步没有模\(n\).是因为\(n > r > 0\),我们知道\(n^2<rn,n^2+rn<2rn,(n^2+rn)/r<2n\).我们就只需要进行判断是否大于\(n\)就行.

这就给出了算法的正确性.

[1]http://www.hackersdelight.org/MontgomeryMultiplication.pdf

另一种解释?

可以看下Introduction to Modern Cryptography 2nd Edition中的B.2附录.里面说的很简单粗暴.

标签:ab,Bristol,22,overline,算法,计算,密码学,mod
来源: https://www.cnblogs.com/zhuowangy2k/p/10891211.html