为什么在RSA中将$ \ phi(n)$保密是很重要的?

#1 楼

根据totient函数的定义,我们具有以下关系:

$$ \ varphi {(n)} =(p-1)(q-1)= pq-p-q + 1 = (n + 1)-(p + q)$$

然后可以很容易地得出以下结论:

$$(n + 1)-\ varphi {(n)} = p + q $$
$$(n + 1)-\ varphi {(n)}-p = q $$

从RSA的定义中您知道:

$$ n = pq $$

将一个替换为另一个,可以得出:

$$ n = p \ left(n + 1-\ varphi {(n)}-p \ right)= -p ^ 2 +(n + 1-\ varphi {(n)})p $$

经过重新排列,我们得到:

$$ p ^ 2-(n +1-\ varphi {(n)})p + n = 0 $$

这是$中的二次方程p $,带有:

$$ \ begin {align} a&= 1 \\ b&=-(n + 1-\ varphi {(n)})\\ c&= n \ end {align} $$

可以使用众所周知的二次公式轻松解决:

$$ p = \ frac {-b \ pm \ sqrt {| b | ^ 2-4ac}} {2a} = \ frac {(n + 1-\ varphi {(n)})\ pm \ sqrt {| n + 1-\ varphi {(n)} | ^ 2-4n }} {2} $$

由于对称性,tw o $ p $的解决方案实际上将是$ n $的两个主要因素。下面是一个简短的示例,让$ n = 13 \乘以29 = 377 $和$ \ varphi {(n)} =(13-1)\ times(29-1)= 12 \ times 28 = 336 $。使用上面显示的二次方程,我们需要为该方程使用以下系数:

$$ \ begin {align} a&= 1 \\ b&=-(377 + 1-336) = -42 \\ c&= 377 \ end {align} $$

因此我们有以下二次方程式可以解决:

$$ p ^ 2-42p + 377 = 0〜\ implies〜p = \ frac {42 \ pm \ sqrt {| -42 | ^ 2-4-4 \ times 377}} {2} = \ frac {42 \ pm 16} {2} $$

最后,我们计算了两个解决方案,它们是预期的$ 377 $的两个主要因子:



总而言之,对$ \ varphi {(n)} $的了解可以使人在时间$ O(1)$中分解$ n $。其他答案是等效的,因为知道$ d $可以达到相同的结果(RSA的任何安全属性都将丢失),但是出于完整性考虑,我认为最好显示出如何使用此信息来分解$ n $ 。

评论


$ \ begingroup $
打败我...完美的解释。
$ \ endgroup $
– Nik Bougalis
2012-12-20 13:15

$ \ begingroup $
这太好了。做得太好了。
$ \ endgroup $
–多项式
2012年12月20日13:40

$ \ begingroup $
我认为,比起隐藏因子分解,保持私有指数机密是一个更重要的原因-RSA的目标不是隐藏$ n $的因子分解,而是安全地加密或签名。
$ \ endgroup $
–PaŭloEbermann
2012年12月21日在9:02

$ \ begingroup $
@PaŭloEbermann的确如此,这个答案之所以要与CodesInChaos的答案相辅相成(在他的第二点上有所扩展)。也就是说,$ n $可以在任何给定协议中用于多个密码基元(不仅是RSA),因此,假设您知道$ \ varphi {(n)} $(其本身是伪造的),您将希望获得$ p $和$ q $也可以帮助攻击协议的这些部分,具体取决于您作为攻击者的目标。
$ \ endgroup $
–托马斯
2012年12月21日在10:02

#2 楼



如果您知道$ \ phi(n)$,那么在给定$ e $和$ n $的情况下计算秘密指数$ d $很简单。
实际上,这就是普通RSA期间发生的情况密钥生成。您使用$ e \ cdot d = 1 \ mod \ phi(n)$,并使用扩展的Euclidian算法求解$ d $。

有关RSA密钥生成的维基百科:


将$ d $确定为:
$ d = e ^ {-1} \ mod \ phi(n)$
即$ d $是$ e的乘法逆$ mod $ \ phi(n)$。


在$(de)= 1 \ mod \ phi(n)$
的情况下,这更清楚地表示为d的求解。通常使用扩展的欧几里得算法来计算。
$ d $保留为私钥指数。



给出$ \ phi(n)$和$ n $,很容易将$ n $分解为因数。通过求解等式$ n = p \ cdot q $和$ \ phi(n)=(p-1)\ cdot(q-1)$来计算$ p $和$ q $。


#3 楼

请记住,使用RSA,数字$ N $是两个大秘密素数的乘积。我们称它们为$ P $和$ Q $。我们会将它们视为未知数:
$$ N = P \ cdot Q $$
还要记住,我们知道:
$$ \ phi(N)=(P-1) \ cdot(Q-1)$$
现在已知$ N $作为公钥的一部分。如果攻击者也知道$ \ phi(N)$,则恢复$ P $和$ Q $变得微不足道。让我们开始吧:
$$ \ phi(N)=(P-1)\ cdot(Q-1)\ Leftrightarrow $$
$$ \ phi(N)=(P \ cdot Q)- Q-P + 1 $$
但是请记住$ N = P \ cdot Q $所以我们有:
$$ \ phi(N)= N-Q-P + 1 \ Leftrightarrow $$
$$ P + Q = N-\ phi(N)+ 1 $$
现在让我们用$ P $和$ N $来表示$ Q $:
$$ P + \ frac {N} {P} = N-\ phi(N)+ 1 \ Leftrightarrow $$
$$ \ frac {P ^ 2} {P} + \ frac {N} {P} = N-\ phi(N)+ 1 \ Leftrightarrow $$
$$ \ frac {P ^ 2 + N} {P} = N-\ phi(N)+ 1 \ Leftrightarrow $$
$$ P ^ 2 + N = P \ cdot(N-\ phi(N)+ 1)\ Leftrightarrow $$
$$ P ^ 2-P \ cdot(N-\ phi(N)+ 1)+ N = 0 $$
这看起来像二次函数,其中$ P $是我们的变量,而$ a = 1 $,$ b =-(N-\ phi(N)+ 1)$和$ c = N $,因此使用二次公式来计算两个解,如下所示:$$ \ frac {-b \ pm \ sqrt {b ^ 2-4ac}} {2a} $$
这两个解是秘密素数$的值P $和$ Q $。换句话说,知道$ N $和$ \ phi(N)$的攻击者可以轻松恢复$ P $和$ Q $,从而重新创建RSA公钥和私钥。
这就是为什么保持这一点很重要的原因$ P $,$ Q $和$ \ phi(N)$的秘密,请不要泄露。

评论


$ \ begingroup $
这有点遗漏“为什么我们需要这些素数作为秘密”。 RSA的目标不是隐藏因式分解,而是成为活板式单向功能。
$ \ endgroup $
–PaŭloEbermann
2012年12月21日在9:07

$ \ begingroup $
这很公平;我本可以添加一个注释,但事实是,应该保密$ P $和$ Q $,原始问题是:“为什么$ ϕ(n)$保密是重要的,在RSA中?”
$ \ endgroup $
– Nik Bougalis
2012年12月21日在18:21

#4 楼

因为使用$ \ varphi(n)$和$ e $,您可以计算$ d $(这是RSA密钥的秘密部分),因为$ d $是$ e \ bmod {\ varphi的模乘乘法逆(n)} $

#5 楼

RSA论文在其IX-B部分给出了一个简单的论点;

计算$ \ phi(n)$而不考虑$ n $

可以计算出$ \ phi(n)$,那么他可以通过计算$ e $的逆数d(以$ \ phi(n)$为模)来破坏系统。

他们认为找到$ \ phi( n)$比分解不容易,因为它将启用分解,如下所示:



$(p + q)$可以从$ n $和$ \ phi获得(n)$作为$$ \ phi(n)=(p-1)(q-1)= n-(p + q)+ 1 $$

$(pq)$从$(p + q)^ 2-4n $获得,因为$(pq)$是它的平方根。

然后可以找到$ q $作为$$ q = \ frac { (p + q)-(pq)} {2}。因此,$$

通过计算$ \ phi(n)$来破坏系统并不比分解容易。 >

断裂部分;本文的结论中有一段很好的段落;


该系统的安全性需要更详细地研究。特别是,
分解大数的困难应该仔细研究。鼓励读者
找到一种方法来“破坏”系统。一旦该方法抵御了所有
攻击足够长的时间,就可以在合理的使用量下使用




剩下的就是历史了,在RSA密码系统的二十年攻击中可以找到很短的历史