我最近在计算机科学课程中学习了公钥/私钥加密,以及它在数据加密/解密方面的工作原理。我们还介绍了它如何用于数字签名。但是,我们没有详细说明实际密钥是如何自己生成的。
我知道它以一个非常大的数字开头,然后通过某种 keygen 算法传递,该算法返回两个不同的密钥,其中一个是私有的,另一个是公共的。这些算法是已知的还是黑盒系统?一个用户是否总是有相同的一对密钥链接到他们,或者他们是否在任何时候都改变过?
这似乎是一个非常数学的问题,因为密钥是相互关联的,但不能从另一个推导出来。
我最近在计算机科学课程中学习了公钥/私钥加密,以及它在数据加密/解密方面的工作原理。我们还介绍了它如何用于数字签名。但是,我们没有详细说明实际密钥是如何自己生成的。
我知道它以一个非常大的数字开头,然后通过某种 keygen 算法传递,该算法返回两个不同的密钥,其中一个是私有的,另一个是公共的。这些算法是已知的还是黑盒系统?一个用户是否总是有相同的一对密钥链接到他们,或者他们是否在任何时候都改变过?
这似乎是一个非常数学的问题,因为密钥是相互关联的,但不能从另一个推导出来。
我知道它以一个非常大的数字开头,然后通过某种 keygen 算法传递,该算法返回两个不同的密钥,其中一个是私有的,另一个是公共的。
嗯,这并不完全正确。大多数非对称算法当然是基于大数的,但这不是必需的。例如,有基于散列的算法,而散列基于位/字节,而不是数字。
但是,是的,对于非对称算法,通常包含一个特定的算法来执行密钥对生成。例如,非对称加密由三元组组成Gen
,Enc
其中Dec
表示Gen
密钥对生成。密钥对当然由公共部分和私人部分组成。
RSA 基本上从生成两个大的随机素数开始,它不一定以单个数字开头。
这些算法是已知的还是黑盒系统?
它们是已知的,它们是系统安全的基础。您不能只使用任何数字来执行,例如 RSA。请注意,对于 RSA,可能有不同的算法和配置;并非每个系统都会使用相同的Gen
.
一个用户是否总是有相同的一对密钥链接到他们,或者他们是否在任何时候都改变过?
这取决于系统的密钥管理。通常有一些刷新或重新生成密钥的方法。例如 X.509 证书往往有一个结束日期(到期日期或到期日期),因此您甚至不能永远使用相应的私钥;您必须不时刷新证书和密钥。
这似乎是一个非常数学的问题,因为密钥是相互关联的,但不能从另一个推导出来。
这通常是不正确的。公钥通常很容易从私钥导出。对于 RSA,公共指数可能未知,但通常设置为固定数字 (65537)。这与模数(也是私钥的一部分)一起构成公钥。对于椭圆曲线密钥,首先生成一个私有随机值,然后直接从中派生公共密钥。
当然,您永远不能从公钥中导出私钥;这是没有意义的——如果可以的话,它不会很私密。
在RSA中,生成的两个数字是或多或少相同大小的非常大的素数,用于计算p
使用模算术派生的公钥/私钥。q
N
crypto.stackexchange.com中的以下答案更详细地描述了我们如何从一个随机(大)数开始,并使用Fermat 检验和Miller-Rabin 检验来达到一个很可能是素数的数。