哪个密钥被认为是私有的和哪个公共的重要吗?

信息安全 公钥基础设施 RSA
2021-08-31 16:15:34

在数学上,哪一组字符是 private_key 哪一组是 public_key 有区别吗?

@Edit 在询问的那一刻,我正在考虑 RSA,而不是一般的非对称加密。

2个回答

不一定重要...
在 RSA 中,您可以使用 d(私有)或 e(公共)来加密和解密。这不适用于所有密码系统。例如,DSA 不允许这样做。

所以从技术上讲,如果你交换 e 和 d 的值并不重要。

...但是
性能:
但实际上您通常希望验证(使用 e)快速。然后接受签名(使用 d)更慢。

通常选择公共指数是一些简单而小的二进制表示。数字65537 (0b10000000000000001) 经常被选为公共指数。还有一个大得多(与模数大小相同,所以现在大约 2048 位)的数字作为私钥。

另请参阅:https ://crypto.stackexchange.com/questions/3110/impacts-of-not-using-rsa-exponent-of-65537

安全性:
并且:你不能真正翻转这个(大的公共指数,小的私人指数),因为有针对小私人指数的公开攻击。维基:维纳的攻击

另请参阅:https ://crypto.stackexchange.com/questions/3271/why-should-the-rsa-private-exponent-have-the-same-size-as-the-modulus

一般来说,是的。对于许多非对称密码系统,其中一个密钥可以从另一个密钥中派生出来,因此无法选择将哪一个密钥保密。

许多非对称密码算法都是基于计算离散对数的难度。私钥是整数k,公钥是某个公共参数g的值g k在离散对数计算对于大数不可行的空间中,但求幂相当快。例如,数字以大数p为模就是这种情况:gk计算g k  mod  p很简单,但是求解方程g k  mod  p  =  y当p被适当地选择时k是不可行的(根据算法具有附加属性的素数)。然后,对于可接受的密钥大小,很容易从私钥计算公钥,但是没有已知的方法可以在人类规模的时间内从公钥计算私钥。基于离散对数难度的两种流行算法是DSADiffie-Hellman(包括它们的椭圆曲线变体——DSA 和 DH 依赖于在有限域上的椭圆曲线中计算对数的难度,ECDSA 和 ECDH)。

有一个流行的密码系统家族,其中私钥和公钥存在于相同的数学空间中,并且操作对它们进行相同的处理:RSARSA的核心是M  ↦  M k  mod  n运算,其中k是解密和签名的私钥d和加密和签名验证的公钥en是公共参数,RSA的安全性要求为每个密钥对选择不同的n )。仅给定en计算d如果选择正确的值是不可行的。可以生成两个指数可互换的 RSA 密钥对。但是,很少这样做,因为为k选择较小的值会带来性能优势。因此,在实践中,RSA 对公钥e使用较小的值,对私钥d使用相应的值小值必须是公钥,因为如果私钥很小,很容易通过暴力破解找到(d无法从e计算,但很容易验证d的猜测是否与已知值匹配en,因此安全性依赖于d ) 的巨大搜索空间