RSA 破解同一模数的其他私钥

  把那些别人认为显然的而我死也想不出来的东西,都记下来

Task

  做作业的时候遇到了这么个题:

Alice and Bob love each other, so they decide to use a single RSA modulus N N N for their key pairs. Of course each of them does not know the private key of the other. Mathematically, Alice and Bob have their own key pairs ( e A , d A ) (e_A,d_A) (eA,dA) and ( e B , d B ) (e_B,d_B) (eB,dB) sharing the same N N N. Demonstrate how Bob can derive the private key of Alice.

  大意是说,Alice 和 Bob 用传统的 RSA 进行交流,但用的是同一个模数 N N N。问 Bob 如何利用这一点来破解 Alice 的私钥。

\\
\\
\\

Solution1

  从实际的角度来看:
  既然 Bob 拥有 N N N,那他肯定也拥有 N N N 的构造方法,也就是他知道 φ ( N ) \varphi(N) φ(N)(例如 N = p q N=pq N=pq,其中 p , q p,q p,q 都是质数,那么 φ ( N ) = ( p − 1 ) ( q − 1 ) \varphi(N)=(p-1)(q-1) φ(N)=(p1)(q1))。而对于 Alice 有 e A d A ≡ 1 ( m o d φ ( N ) ) e_Ad_A \equiv 1 \pmod{\varphi(N)} eAdA1(modφ(N)),那么直接 exgcd 解逆元就完事了。

  (就这?就这?上 google 查了下,还真就这。。。

Solution 2

  但如果就这么简单地过掉这个题,也太无聊了。。。

  事实上 Solution 1 是有一个很强的前提条件,就是知道 φ ( N ) \varphi(N) φ(N),于是就没什么可做的了。
  但如果去掉这个条件,那就变成一个有趣的数论题了。

  现在的问题是:已知 Alice 和 Bob 使用了同样的模数 N N N,Bob 拥有 e A , e B , d B e_A,e_B,d_B eA,eB,dB,求 d A d_A dA。(这个模数、公钥私钥可以认为是第三方机构提供的,或是地上捡来的,反正你无法知道 N N N 的构成信息。)

\\
\\

  思路就是:既然无法在模 φ ( N ) \varphi(N) φ(N) 下求逆元,那就想办法在 φ ( N ) \varphi(N) φ(N) 的倍数下求逆元。因为有一个结论:

Lemma1:若 e A d A ≡ 1 ( m o d k m ) e_Ad_A \equiv 1 \pmod{km} eAdA1(modkm),则 e A d A ≡ 1 ( m o d m ) e_Ad_A \equiv 1 \pmod m eAdA1(modm)

  即若两个数在模 k m km km 下互为逆元,则在模 m m m 下也为逆元。证明显然,把同余式写成等式就出来了。
  因此我们只要找出 φ ( N ) \varphi(N) φ(N) 的一个倍数 k φ ( N ) k\varphi(N) kφ(N),使得 e A e_A eA 在模 k φ ( N ) k\varphi(N) kφ(N) 下有逆元,那么这个逆元就是要求的 d A d_A dA

  而我们知道, e B d B − 1 e_Bd_B-1 eBdB1 是一个天然的 φ ( N ) \varphi(N) φ(N) 的倍数,因为 e B d B ≡ 1 ( m o d φ ( N ) ) e_Bd_B \equiv 1 \pmod{\varphi(N)} eBdB1(modφ(N)),这是 RSA 保证的。我们从这里开始。
   e A e_A eA 无法直接在模 e B d B − 1 e_Bd_B-1 eBdB1 下求逆元,因为它俩可能不互质,那就约去 d 1 = gcd ⁡ ( e A , e B d B − 1 ) d_1=\gcd(e_A,e_Bd_B-1) d1=gcd(eA,eBdB1),变成 e A e_A eA 在模 e B d B − 1 d 1 \frac{e_Bd_B-1}{d_1} d1eBdB1 下求逆元。
  这时候仍然可能没逆元,因为 e A e_A eA e B d B − 1 d 1 \frac{e_Bd_B-1}{d_1} d1eBdB1 可能仍然不互质。那就继续求 d 2 = gcd ⁡ ( e A , e B d B − 1 d 1 ) d_2=\gcd(e_A,\frac{e_Bd_B-1}{d_1}) d2=gcd(eA,d1eBdB1),变成 e A e_A eA 在模 e B d B − 1 d 1 d 2 \frac{e_Bd_B-1}{d_1d_2} d1d2eBdB1 下求逆元。
  ……
  重复这个过程,直至 e A e_A eA 跟这个模数互质。
  这是一定可以达到的。因为,初始的时候,假设 e B d B − 1 = k φ ( N ) e_Bd_B-1=k\varphi(N) eBdB1=kφ(N),而由于 gcd ⁡ ( e A , φ ( N ) ) = 1 \gcd(e_A,\varphi(N))=1 gcd(eA,φ(N))=1(RSA 的性质),因此 d 1 = gcd ⁡ ( e A , e B d B − 1 ) = gcd ⁡ ( e A , k ) d_1=\gcd(e_A,e_Bd_B-1)=\gcd(e_A,k) d1=gcd(eA,eBdB1)=gcd(eA,k),因此模数除以 d 1 d_1 d1 也就相当于模数变成 k d 1 φ ( N ) \frac{k}{d_1}\varphi(N) d1kφ(N)。以后的步骤同理,模数一直都会是 φ ( N ) \varphi(N) φ(N) 的倍数。如果除到模数变成 φ ( N ) \varphi(N) φ(N) 了,那也不会继续进行下去了,因为 gcd ⁡ ( e A , φ ( N ) ) = 1 \gcd(e_A,\varphi(N))=1 gcd(eA,φ(N))=1

  假设最终得到的模数为 m m m,那么就用 exgcd 解 e A d A ≡ 1 ( m o d m ) e_Ad_A \equiv 1 \pmod{m} eAdA1(modm),按照 Lemma 1 以及上面说的“ m m m 一定是 φ ( N ) \varphi(N) φ(N) 的倍数”,解出来的 d A d_A dA 就是 Alice 的私钥了。

结论

  也就是说,在传统的 RSA 中,如果你发现别人跟你是同一个模数,那无论你知不知道这个模数的具体信息,你都可以直接解出别人的私钥了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值