根据我对公钥加密的理解,服务器根据两个大质数的乘积生成公钥, p
和 q
,产生 n
.
n
然后发送到希望安全连接到服务器的客户端。
客户端选择一个随机数 x
并计算 x^3 modulo n
并将其传回服务器。
然后服务器计算 x
使用 p
和 q
然后是 x
用作加密所有流量的私钥,客户端和服务器都知道这一点,而不会暴露它。
问题
对于每个想要连接到服务器的客户端,服务器需要为每个连接创建一个公钥。在繁忙的服务器上,这将需要生成许多 p
和 q
的。
虽然计算机速度很快,但 p
和 q
是 2^1024
范围内的大数确定这些数字是否为质数需要很多努力,如果与服务器建立大量连接(想想 Google、Facebook 等),则需要反复努力。
另外如果 的随机选择 p
或 q
结果是非质数,那么服务器将需要选择另一个随机数并确定该数是否为质数。这看起来可能有相当多的计算时间被浪费了。
因此服务器不必为每个连接计算两个随机素数,服务器是否可以/是否从安装在服务器上的预先计算的素数列表中选择?如果是这样,我们可以相信这些素数实际上是素数,并且是随机选择的吗?
最佳答案
你误解了PKI,服务器不会为每个客户端和连接创建一个新的公钥。
此外,WRT 创建 RSA 素数请参阅 Rob Napier 对问题的评论:
"generating large primes is not nearly as expensive as you likely think."
and his link generating large prime numbers for RSA.
关于security - 计算机是否部署了预先计算的素数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34656015/