通过阅读各种材料,无论我理解什么,公钥 - 私钥对都是不对称加密的基础,也是选择2个素数(大致是你的私钥)并乘以它们(大致是你的公钥)的东西,我如果您知道私钥,则可能会生成公钥.这是正确的还是我错了什么?
[编辑]
让我更加困惑的是,只能使用私钥(使用.NET类RSACryptoServiceProvider)将RSA密钥序列化为XML .不确定这个限制是否有意!
在大多数非对称加密系统实现中,唯一确保的事实是您无法从公钥中找到私钥.反过来说,在大多数情况下从私钥中找到公钥是微不足道的.
例如,在RSA中,您可以使用以下私钥创建公钥:
openssl rsa -in private.pem -pubout -out public.pem
误导的是术语:"私钥"指的是2个不同的概念,无论你是在谈论理论,还是在谈论实际实现:
该理论的私钥是夫妻(d,n)的这股完美对称(数学)的关系(E,N) .如果您要比较这些,则无法从另一个计算.
的实际私钥(如在例如OpenSSL实现),是指包含一个文件(d,n)的同时也为解码速度目的的几个重要的中间值.除此之外,公钥e的理论上"未知"部分通常按惯例固定为常用值(0x10001
默认情况下为openssl,虽然可以更改,但强烈建议仅遵循非常具体的值) .因此,从私钥中推导出公钥(e,n)是微不足道的,原因不止一个.
这取决于加密系统.
在RSA中,我们(引用维基百科):
公钥由模数n和公共(或加密)指数e组成.私钥由模数n和私有(或解密)指数d组成,必须保密.
现在,如果我们有n和d(私钥),我们只缺少公钥的e.但是e通常相当小(少于三位数),甚至是固定的(常见值为65537).在这些情况下,获取公钥是微不足道的.
对于Elliptic Curve Diffie-Hellman,私钥是d,而公钥dG(G也是公共的),所以它也是微不足道的.
这取决于算法,你的意思是"私钥".
RSA私钥通常存储在"中国剩余定理"表中.例如,RSAPrivateKey
PKCS#1中定义的结构以及许多其他加密标准重用的结构采用这种形式.这种形式包括两个秘密数字通常表示p
和q
,从该欧拉被计算.使用totient和private exponent,可以快速计算公共指数.
在任何情况下,大多数RSA密钥对使用65537作为公共指数,并且模数总是作为私钥的一部分携带.