公钥密码学中模运算的巧妙计算方法

公钥密码学的一个核心: x e   m o d   m x^e \bmod m xemodm
大名鼎鼎的RSA算法即使用该公式代表的大素数分解问题,在一般应用场景中,x、e和m都是非常大的整数,比如2048个bit位,下面用一个简单的例子说明计算过程。
Example:
2 8   m o d   7 2^8\bmod 7 28mod7
计算 3 8 3^8 38在模数7中等价类中最小的正数,一种方式是直接计算:
2 8 = 256 ≡ 4   m o d   7 2^8=256\equiv 4 \bmod 7 28=2564mod7
显然,这样计算是十分困难的,因为首先需要计算2的8次幂,然后除7得到余数。因此,可以利用模运算中等价类的性质,即对于一个给定模数m,选择等价类中任何一个元素用于计算的结果都是一样的

那么,首先执行两个部分指数运算:
2 8 = 2 4 ⋅ 2 4 = 16 ⋅ 16 2^8=2^4\cdot2^4=16\cdot16 28=2424=1616
然后将中间结果16替换为同一等价类中的其他元素,对16来说,在模7中最小的正等价元素是2,因为 16 = 2 ⋅ 7 + 2 16=2\cdot7+2 16=27+2,有:
2 8 = 16 ⋅ 16 ≡ 2 ⋅ 2 = 4   m o d   7 2^8=16\cdot16\equiv2\cdot2=4\bmod7 28=161622=4mod7
现在,我们可以轻而易举地算出,最后结果为 4 ≡ 4   m o d   7 4\equiv4\bmod7 44mod7
然而,为何等价类中所有成员的行为等价,具体到例子中,为何可以让2代替16进行运算呢?话不多说,直接上图,数形结合:
在这里插入图片描述
两个16相乘,得到16个16,其中包含16个2和32个7,在模运算中,7可以直接去掉了,剩下16个2,也就是14个2和2个2相加,此时14个2可以看作4个7,又可以去掉了,最后剩2个2,也就是4,即最终结果。
在这里插入图片描述
如果您能清楚地认识到这一点,这将为您的模运算能力更上一层,我用另一个角度再次阐述这个特性:
1.如果是模运算中的加法,很显然,各个等价类得到的结果相同,任何一个数都可以拆分为 n ⋅ m + a n\cdot m+a nm+a其中m为模数,a 为余数。可以把所有的加法施加到余数a上去,当和数超过模数时,减去模数的整数倍直到和数低于模数。
2.模运算中的乘法, ( n ⋅ m + a ) ⋅ k (n\cdot m + a) \cdot k (nm+a)k显然相乘时乘数 k k k 不仅仅要作用于被乘数中的余数 a a a ,还要作用于模数的整数倍 n ⋅ m n\cdot m nm ,但对于模数的整数倍部分,乘后得数 k ⋅ n ⋅ m k\cdot n \cdot m knm依然是模数 m m m 的整数倍,也就是说我们只需要关注余数 a a a 和 乘数 k k k 得数的部分。现在,请考虑这个问题,余数 a a a 是不是就是原数 n ⋅ m + a n\cdot m + a nm+a 的一个等价类?进一步延伸,其余的等价类是否可以写为 ( n + b ) ⋅ m + a (n+b)\cdot m + a (n+b)m+a,其余等价类再乘 k k k 是否能得到同样的结果呢?

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值