蒙哥马利大整数模幂算法

  前几天写了一篇博客《25行代码实现完整的RSA算法》,是关于用Python代码实现一个完整的RSA算法的代码,整个代码中最核心、最浪费时间的代码部分就是关于求解大整数模幂算法这里。整个算法也叫“蒙哥马利幂模”算法。
  首先简单介绍一下蒙哥马利相关的几个算法,具体详细介绍可以参考《蒙哥马利算法详解》。蒙哥马利算法并不是一个独立的算法,而是三个相互独立又相互联系的算法集合,其中包括:

  • 蒙哥马利乘模,是用来计算$$x⋅y (mod N)$$
  • 蒙哥马利约减,是用来计算$$t⋅ρ^{-1} (mod N)$$
  • 蒙哥马利幂模,是用来计算$$x^{y} (mod N)$$

  在这三个算法中,蒙哥马利幂模是RSA加密算法的核心部分。本篇文章为了简单起见就不介绍前两个“蒙哥马利乘模”和“蒙哥马利约减”算法了。主要介绍第三个“蒙哥马利幂模”的计算方法过程,以及通过一个小例子进行说明这个算法的具体计算过程,至于证明方法我就不在这里介绍,大家只要能看到这个例子以后,能把代码写出来就能写完整的RSA算法了。如果想看已经实现的代码请参考这里,或者这里。在这两篇博文里都有完整的代码实现方法。下面介绍“蒙哥马利幂模”的详细计算过程:
  RSA公钥密码的加密算法与解密算法都要计算“模幂乘运算”$$a^b(modN)$$。
设b的二进制数字表示为$$b_{r-1}...b_1b_0$$,即:
      $$b=b_0+b_1×2+...+b_{r-1}×2^{r-1}$$。
于是:
      $$a^b≡a^{b_0}×(a^2)^{b_1}×...×(a^{2^{r-1}})^{b_{r-1}}(mod N)$$
令$$A_0=a$$,$$A_i≡(A_{i-1})^2(mod N)$$,i = 1, 2... r - 1,则有:
    $$a^b ≡ {A_0}^{b_0} × {A_1}^{b_1} × ... × {A_{r-1}}^{b_{r-1}} (mod N)$$
其中,在这里
$$$${A_i} ^ {b_i}=\begin{cases}
A_i, & 若b_i=1\
1, & 若b_i=0
\end{cases} i=0,1...r-1$$$$
下面通过一个例子来说明以上的公式:
  例1:取p=43,q=59,n = 43 × 59 = 2537 , φ(n) = (43 - 1) × (59 - 1) = 2436 , 选取e = 13。字母表(a,b,....,z)依次用00,01,...,25表示,各占2位,设明文段m=2106,也就是m = vg,那么密文$$c = 2106^{13} mod 2537$$。计算如下:13的二进制表示为1101,即$$13=1×2^3 + 1×2^2 + 0×2^1 + 1×2^0 = 2^3 + 2^2 + 1$$。
  $$A_0 = 2106 ≡ -431 (mod 2537)$$,
  $$A_1 = (-431)^2 ≡ 560 (mod 2537)$$,
  $$A_2 = (560)^2 ≡ -988 (mod 2537)$$,
  $$A_3 = (-988)^2 ≡ -601 (mod 2537)$$,
  $$2106^{13} = (-431) × (-988) × (-601) ≡ 2321 (mod 2537)$$
得到密文c=2321。
  又设收到密文是0981,要把它恢复成明文,计算$${13}^{-1} ≡ 937(mod2436)$$,得d = 937,明文$$m^{'} = 981 ^ {937} (mod 2537)$$。计算如下:937的二进制表示为1110101001,即$$937 = 1 + 2^3 + 2^5 + 2^7 + 2^8 + 2^9$$。
  $$A_0 = 981$$,
  $$A_1 = 981^2 ≡ 838 (mod 2537)$$,
  $$A_2 = 838^2 ≡ -505 (mod 2537)$$,
  $$A_3 = (-505)^2 ≡ -1325 (mod 2537)$$,
  $$A_4 = 1325^2 ≡ 21 (mod 2537)$$,
  $$A_5 = 21^2 ≡ 441 (mod 2537)$$,
  $$A_6 = 441^2 ≡ -868 (mod 2537)$$,
  $$A_7 = (-868)^2 ≡ -65 (mod 2537)$$,
  $$A_8 = (-65)^2 ≡ -849 (mod 2537)$$,
  $$A_9 = (-849)^2≡ 293 (mod 2537)$$,
  $$981^{937} ≡ 981 × 1325 × 441 × 981 × 981 × 293 ≡ 704(mod 2537)$$,
得明文:$$m' = 0704$$,即he。
  如果想看到一个正式的加密解密代码请点击我的第一篇博客《25行代码实现完整的RSA算法》,在这里你才能真正领略“蒙哥马利算法”在互联网支付与通信时代所发挥的重大的作用。今天我们敢在手机上、电脑上以及服务器上面很放心地对自己的银行卡进行操作,全都依赖rsa算法的威力。

转载于:https://www.cnblogs.com/xqbase/p/8830099.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值