如何生成一对非对称加密密钥?

How are pairs of asymmetric encryption keys generated?

我最近在我的计算机科学课程中学习了 public/private 密钥加密,以及它在数据方面的工作原理 encryption/decryption。我们还介绍了如何将其用于数字签名。然而,我们并没有详细介绍实际密钥是如何自己生成的。

我知道它以一个非常大的数字开头,然后通过某种 keygen 算法传递,该算法 returns 两个不同的密钥,一个是私有的,另一个是 public .这些算法是已知的还是黑盒系统?一个用户是否始终拥有与其关联的同一对密钥,或者它们是否随时更改?

这似乎是一个非常数学的问题,因为键是链接的,但一个不能从另一个推导出来。

RSA the generated two numbers p and q are very large prime numbers more or less the same size, which are used to calculate N which derives the public/private keys using modulo arithmetic.

下面answer in crypto.stackexchange.com describes in more details how we can start from a random (large) number and use Fermat test and Miller-Rabin tests达到一个极有可能是质数的数。

I know that it begins with a very large number, which is then passed through some kind of keygen algorithm which returns two distinctive keys, one of which is private and the other is public.

嗯,这并不完全正确。大多数非对称算法当然是基于大数的,但这不是必需的。例如,有基于散列的算法,而散列是基于 bits/bytes,而不是数字。

但是,是的,对于非对称算法,通常包含一个特定的算法来执行密钥对生成。例如,非对称加密由三元组 GenEncDec 组成,其中 Gen 表示密钥对生成。而密钥对当然由一个public和一个私有部分组成。

RSA 基本上是从生成两个大的随机素数开始的,它不一定以单个数字开始。

Are these algorithms known or are they black box systems?

它们是众所周知的,它们是系统安全的基础。您不能只使用任何数字来执行,例如 RSA。请注意,对于 RSA,可能有不同的算法和配置;并非每个系统都会使用相同的 Gen.

And does one user always have the same pair of keys linked to them or do they ever change at any point?

这取决于系统的密钥管理。通常有一些刷新或重新生成密钥的方法。例如 X.509 证书往往有一个结束日期(到期日或过期日期),所以你甚至不能永远使用相应的私钥;您必须时不时地刷新证书和密钥。

It just seems like a very mathematical issue, as the keys are linked, yet one is not deducible from the other.

这通常是不正确的。 public 密钥通常很容易从私钥中导出。对于 RSA,public 指数可能未知,但通常设置为固定数字 (65537)。这与模数(也是私钥的一部分)一起构成 public 密钥。对于椭圆曲线密钥,首先生成一个私有随机值,public 密钥直接从中导出。

你当然不能从 public 密钥中导出私钥;那将毫无意义 - 如果可以的话,它不会非常私密。