RSA公共指数也在解密消息

时间:2013-02-27 09:41:47

标签: algorithm rsa

我正在尝试用我自己的数字计算出一个非常简单的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,这显然不是应该发生的。我哪里出错了?

1 个答案:

答案 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

  • 由于168 = 0(mod 12),f将C 12 中的每个元素映射到中性元素1.
  • 由于168 = 8(mod 16),f将C 16 的所有偶数元素映射到中性元素1,这是该组的一半。

因此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)。

  • 如果k = 4j,e²= 48j(12j±1)+ 1 = 1(mod 16)
  • 如果k = 4j + 1,e²=(48j + 12)(12j + 3±1)+ 1 = 48j(12j + 3±1)+ 144j + 36±12 + 1 =5∓4(mod 16 ),e = 6k +1e²= 1(16),e = 6k-1e²= 9(16)。
  • 如果k = 4j + 2,则e²=(48j + 24)(12j + 6±1)+ 1 = 48j(12j + 6±1)+ 288j + 144±24 + 1 = 1±8 = 9( mod 16)
  • 如果k = 4j + 3,e²=(48j + 36)(12j + 9±1)+ 1 = 48j(12j + 9±1)+ 432j + 324±36 + 1 = 5±4(mod 16 ),e = 6k +1e²= 9(16),e = 6k-1e²= 1(16)。

因此,该模数的公共指数的选择优于19:使用公共指数解密将至少对一半的消息起作用(当e²= 9(16)时),并且在很多情况下几乎为所有消息(当e²= 1(16)时)。