encryption - 如何生成一对非对称加密 key ?

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

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

我知道它以一个非常大的数字开始,然后通过某种 key 生成算法传递,该算法返回两个不同的 key ,一个是私有(private)的,另一个是公共(public)的。这些算法是已知的还是黑盒系统?一个用户是否始终拥有与其关联的同一对 key ,或者它们是否随时更改?

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

asymmetric encryption key generation

最佳答案

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 对生成。例如,非对称加密由三重GenEncDec 组成,其中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/

相关文章:

c++ - cryptlib cryptSignCert 失败

c++ - '字节' : ambiguous symbol error when using of Crypto++ and Windows SDK

python - 带有 python 加密的 InvalidSignature

java - 解密使用 Java 加密的 MySQL 字段

python - Python 中的 AES 加密 - 使用 pycryptodome 和加密技术时的不同结果

cryptography - 彩虹表作为大型素数分解的解决方案

encryption - GoLang 解密一个命令而不是执行它

flutter - 如何在 dart 中使用 AES CBC 256bit 和 PKCS5Padding 进行加密和解密以及检索参数

c - 我的 Vignere Cipher 产生段错误,我是否读取或写入了非法内存位置,或者我是否错误地使用了指针?

go - 如何检查随机性?