我最近在计算机科学类(class)中学习了公钥/私钥加密,以及它在数据加密/解密方面的工作原理。我们还介绍了如何将其用于数字签名。然而,我们并没有详细介绍实际 key 是如何自己生成的。
我知道它以一个非常大的数字开始,然后通过某种 key 生成算法传递,该算法返回两个不同的 key ,一个是私有(private)的,另一个是公共(public)的。这些算法是已知的还是黑盒系统?一个用户是否始终拥有与其关联的同一对 key ,或者它们是否随时更改?
这似乎是一个非常数学的问题,因为 key 是链接在一起的,但一个不能从另一个推导出来。
最佳答案
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.
嗯,这并不完全正确。大多数非对称算法当然是基于大数的,但这不是必需的。例如,有基于散列的算法,而散列基于位/字节,而不是数字。
但是,是的,对于非对称算法,通常包含一个特定的算法来执行 key 对生成。例如,非对称加密由三重Gen
、Enc
和Dec
组成,其中Gen
表示 key 对生成。当然, key 对由公共(public)部分和私有(private)部分组成。
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?
这取决于系统的 key 管理。通常有一些刷新或重新生成 key 的方法。例如 X.509 证书往往有一个结束日期(到期日或过期日期),所以你甚至不能永远使用相应的私钥;您必须时不时地刷新证书和 key 。
It just seems like a very mathematical issue, as the keys are linked, yet one is not deducible from the other.
这通常是不正确的。公钥通常很容易从私钥推导出来。对于 RSA,公共(public)指数可能未知,但通常设置为固定数字 (65537)。这与模数(也是私钥的一部分)一起构成了公钥。对于椭圆曲线 key ,首先生成一个私有(private)随机值,然后直接从中导出公钥。
当然,您永远无法从公钥中推导出私钥;那将毫无意义 - 如果可以的话,它不会非常私密。
关于encryption - 如何生成一对非对称加密 key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47625227/