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

时间:2017-12-04 01:22:49

标签: encryption cryptography public-key-encryption private-key key-generator

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

我知道它以一个非常大的数字开头,然后通过某种keygen算法传递,该算法返回两个不同的键,其中一个是私有的,另一个是公共的。这些算法是已知的还是黑盒子系统?并且一个用户是否总是拥有链接到他们的同一对密钥,或者他们在任何时候都会改变?

这似乎是一个非常数学的问题,因为键是相互关联的,但是一个不能从另一个中推导出来。

asymmetric encryption key generation

2 个答案:

答案 0 :(得分:4)

  

我知道它以一个非常大的数字开头,然后通过某种keygen算法传递,该算法返回两个不同的键,其中一个是私有的,另一个是公共的。

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

但是,对于非对称算法,通常包含执行密钥对生成的特定算法。例如,非对称加密由三GenEncDec组成,其中Gen表示密钥对生成。密钥对当然包括公共部分和私人部分。

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

  

这些算法是已知的还是黑盒系统?

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

  

并且一个用户是否总是拥有链接到他们的同一对密钥,或者他们是否曾经在任何时候进行更改?

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

  

这似乎是一个非常数学的问题,因为键是相互关联的,但是另一个键不能从其中推断出来。

这通常不正确。公钥通常很容易从私钥派生。对于RSA,公共指数可能不知道,但通常设置为固定数字(65537)。这与模数一起 - 也是私钥的一部分 - 成为公钥。对于Elliptic Curve键,首先生成一个私有随机值,并直接从它派生公钥。

当然,您永远不能从公钥中获取私钥;这没有任何意义 - 如果可以的话,它就不会非常私密。

答案 1 :(得分:1)

RSA中,生成的两个数字pq是非常大的素数,或多或少相同的大小,用于计算导出公众的N /私钥使用modulo arithmetic

以下answer in crypto.stackexchange.com更详细地介绍了我们如何从随机(大)数字开始,并使用Fermat testMiller-Rabin tests来获得很可能是素数的数字。