所以我理解,对于RSA加密,你将两个大素数相乘得到一个非常大的复合数,这是你的公钥。两个大素数是你的私钥,所以你想保持这两个素数的秘密,你可以这样做,因为计算机无法猜测它们,因为你必须每次增加1个猜测很长一段时间,因为每个素数都是如此之大。
但是我的问题是:为什么复合数字不会起作用呢?如果私钥中的一个大素数是一个大型复合词,你还不得不通过递增2,3,5,7,11等来猜测它吗?我知道像这样增量只要增加1就不会增加,但是它仍然需要很长时间,因为你不知道是否增加2,3,5,7等等。
虽然如果递增2不起作用,你可以确定私钥< publickey / 2,如果增加3不起作用,你可以确定私钥< publickey / 3,等等。
但无论如何,有人能告诉我为什么复合数字对加密没有好处吗?你会怎么猜一个大型复合材料?
答案 0 :(得分:3)
质数的使用与分解的难度无关 - 分解大型复合数字(如RSA密钥的模数)的最有效方法是General Number Field Sieve,这比简单地尝试更有效。除以连续的数字。
事实上,你的声明它不适用于复合数字并不是真的 - 虽然RSA通常使用两个素数执行,它仍然可以使用两个以上的不同质数,并且因为每个复合数是一个产品素数,您可以选择两个复合数字(假设它们是不同素数的乘积,并且没有共同因素),算法仍然有效。
例如,如果我们选择两个具有不同素因子且没有共同因子的复合数:
a = 15 (= 3 * 5)
b = 77 (= 7 * 11)
这相当于4-prime RSA:
p = 3
q = 5
r = 7
s = 11
到目前为止,如此好,但是你继续说“素数是你的私钥”,这也不是真的 - 私钥实际上是模数n = p * q
的组合(这是也是公钥的一部分)和私人指数,这是d
的数字,e * d = 1 mod phi(n)
e
,其中phi
是公共指数(通常是只有65537),而d
是Euler's totient function。计算phi(n)
后,可以丢弃原始素数。
问题是计算n
需要知道n = p * q
的素因子。在普通的RSA n
我们已经知道a
的素因子,但是如果我们改为选择两个复合数(如上面的b
和n = a * b
)并使用{{ 1}}我们需要将这些数字考虑在内以便计算phi(n)
。由于RSA本身的安全性依赖于分解大型复合数的难度,如果我们没有直接从其素因子构造模数,那么计算私有指数是不可行的,这是你必须使用素数的真正原因。比复合数字。
答案 1 :(得分:-1)
因为,就像你说的那样,用素数你必须加1。因此,如果我的数字是13,那么我需要13步才能达到13,因为它是素数,所以我将增加1。但是,如果我有14号,我只需要7步就可以到达那里,因为我可以选择两个人。数字越大,它们的差异越大。而且我承认你不知道你需要增加什么,但即使增加2仍然比一个增加