在 RSA 生成的两个数字 p 和 q 非常大的素数或多或少相同的大小,用于计算 N 它使用派生公钥/私钥 模运算 。
p
q
N
下列 在crypto.stackexchange.com中回答 更详细地描述了我们如何从随机(大)数字开始并使用 费马测试 和 米勒 - 拉宾测试 达到很可能是素数的数字。
我知道它以一个非常大的数字开头,然后通过某种keygen算法传递,该算法返回两个不同的键,其中一个是私有的,另一个是公共的。
嗯,这不完全正确。大多数非对称算法当然基于大数,但这不是必需的。例如,有基于散列的算法,散列基于位/字节,而不是数字。
但是,对于非对称算法,通常包含执行密钥对生成的特定算法。例如,非对称加密由三元组成 Gen , Enc 和 Dec 哪里 Gen 表示密钥对生成。密钥对当然包括公共部分和私人部分。
Gen
Enc
Dec
RSA基本上是通过生成两个大的随机素数开始的,它不一定以一个数字开头。
这些算法是已知的还是黑盒子系统?
它们是已知的,它们是系统安全的基础。您不能仅使用任何数字来执行,例如RSA。请注意,对于RSA,可能存在不同的算法和配置;不是每个系统都会使用相同的 Gen 。
并且一个用户是否总是拥有链接到他们的同一对密钥,或者他们在任何时候都会改变?
这取决于系统的密钥管理。通常有一些刷新或重新生成密钥的方法。例如,X.509证书往往有结束日期(到期日期或到期日期),因此您甚至无法永远使用相应的私钥;你必须时不时刷新证书和密钥。
它看起来像是一个非常数学的问题,因为键是相互关联的,但是另一个键不能从中推导出来。
这通常是不正确的。公钥通常很容易从私钥派生。对于RSA,公共指数可能不知道,但通常设置为固定数字(65537)。这与模数一起 - 也是私钥的一部分 - 成为公钥。对于Elliptic Curve键,首先生成一个私有随机值,并直接从它派生公钥。
您当然永远不会从公钥中获取私钥;这没有任何意义 - 如果可以的话,它不会非常私密。