我正在尝试用我自己的数字计算出一个非常简单的RSA
算法,但我似乎遇到了问题。
我选择了素数13和17,模数为221. φ(221)=12∗16=192
然后我选择公共指数r = 19,并使用extended euclidean algorithm
我发现私有指数s = 91。 (19⋅91= 1 mod 192)
现在我将消息42加密为:42^19 mod 221=172
。使用172^91 mod 221
进行解密确实会返回42的原始值。但是,如果我使用19作为指数(172^19 mod 221
),我也会回到42,这显然不是应该发生的。我哪里出错了?
答案 0 :(得分:3)
19次幂乘以19×19 = 169(mod 192)取幂。问题是,为什么x 169 = x(mod 221)x = 42,以及x的其他许多值?
让我们专注于multiplicative group modulo 221。由于221 = 13×17,该组具有12×16 = 192个元素,并且它与C 12 ×C 16 (其中C n 同构>是n阶的循环群。
注意x 169 = x(mod 221)相当于x 168 = 1(mod 221)。我们定义f(x)= x 168 。
因此f(x)= 1(mod 221)乘以乘法组221的一半。
但x 169 = x·x 168 ,因此对于乘法组的一半,我们有x 169 = x(mod 221)
检查不在乘法组中的29个模221的整数,我们看到它们中的21个同时也存在。这可以进一步调查。所以总共使用指数19“解密”所有消息的一半(96 + 21 = 117)。
这是否意味着此RSA系统已损坏?我不这么认为;看到公共指数可以解密一半的消息,你需要知道221的因子分解是13×17。攻击者也可以选择随机指数。
更新:可以通过选择不同的公共指数来避免此问题吗?
由于192 = 2 6 ×3,指数不能是2或3的倍数,因此它必须是e = 6k±1。它的平方是e²=(6k±1)²=36k²±12k + 1 = 12k(3k±1)+ 1.我们看到在呼叫情况下e²= 1(mod 12)。
因此,该模数的公共指数的选择优于19:使用公共指数解密将至少对一半的消息起作用(当e²= 9(16)时),并且在很多情况下几乎为所有消息(当e²= 1(16)时)。