阻止CA私钥根据CA公共密钥计算的原因



在RSA中,您基本上有两个解密和加密产品的素数。通常,您将私有解密密钥和公开加密加密,但是对于CA签名验证,角色被逆转 - CA对签名进行加密并将浏览器解密,因此解密密钥是公开的。这意味着这两个素数是公开的,一旦他们知道,每个人都可以将它们繁殖在一起,并将他们的肮脏手放在超级秘密的CA私钥上。我在这里缺少什么?

通常,您会将解密密钥和公开加密进行公开,但是对于CA签名验证,角色被逆转 - CA对签名进行加密和浏览器解密,因此解密密钥是公开的。

使用仅使用服务器已知的私钥在服务器端完成签名。签名由客户使用公共密钥验证。这意味着只有公共密钥是公开的,而私钥在服务器上保持秘密。

这意味着您假设两个素数都是公开的。

ca加密签名并浏览器解密,因此解密密钥是公共的

no,带有私钥的消息 ;其他人可以使用公共密钥验证消息。

我在这里缺少什么?

混乱可能来自许多人学习签名的工作方式,特别是因为他们了解了RSA的"加密"。是m^e % n和"解密"是m^d % n。然后,您将了解"签名"。是由m^d % n和"验证"完成的私有键盘键。通过执行m^e % n并将预期结果与消息的消化进行比较来完成。结论:签名==解密。

您被教导的原因是,如果您使用的是"明智",那么RSA是一种很难在纸上进行(甚至很难为计算机编写)的算法(甚至很难编写)。有效载荷尺寸(即任何足够大的尺寸,甚至可以容纳MD5哈希(128位),这将需要最小的密钥大小为216位,从而使MODEXP使用5.26e64 < d < 1.06e65

用于RSA加密(PKCS#1 v1.5填充),您可以采用原始消息字节,并用

进行预处理
  • 0x00
  • 0x02
  • (n.length -m.length -3)随机非零值(其中最低8个)
  • 0x00

因此,加密实际上是 (00 02 padding 00 m)^e % n;或更一般的pad(m)^e % n(另一个加密填充选项,OAEP,效果非常不同)。现在解密会逆转,并变为depad(m^d % n)

签名,另一方面使用不同的填充:

  1. 计算T = DER-Encode(SEQUENCE(hashAlgorithmIdentifier, hash(m)))

  2. 构造

  • 0x00
  • 0x01
  • (n.length -t.length -3)零值填充字节
  • 0x00
  • t

再次,更通用的形式只是 pad(m)^d % n。(RSA签名具有第二个填充模式,称为PSS,这完全不同)

现在签名验证偏差。公式是verify(m^e % n)。PKCS#1签名填充(RSASSA-PKCS1-V1_5)的最简单,最正确的形式是:

  • 再次运行签名填充公式。
  • 验证所有字节是否与公共密钥操作的输出所产生的字节相同。

PSS验证截然不同。PSS填充a)添加了PKCS#1-Signature Padding没有的随机性,b)具有验证公式,仅揭示"正确"或"不正确"不透露预期的消息应该是什么。

因此,私钥始终是(n, d),公共密钥始终是(n, e)。签名和解密并不是真的一样(但它们都涉及"私钥操作"。(也可以将私钥视为三重态(p, q, e)或五重奏(p, q, dp, dq, qInv),但让我们保持简单:)

有关更多信息,请参见RFC 8017,这是RSA规范的最新版本(包括OAEP和PSS,以及PKCS#1加密和PKCS#1签名)。

通常,您将解密密钥私有和公开加密,但是对于CA签名验证,角色是逆转的 - CA对签名进行加密和浏览器解密,因此解密密钥是公开的。

否。签名用私钥签名,并用公共密钥进行验证。就隐私而言,钥匙没有逆转。如果有的话,数字签名将毫无价值,而不是具有法律约束力。

这意味着两个素数是公共的

不,

我在这里缺少什么?

大部分。

ca是处理数字证书的信任权。在RSA数字签名中,您可以使用私钥签名和公共密钥来验证签名。您的浏览器具有所有主要CAS的公共钥匙。浏览器使用此公共密钥来验证可信赖的CA签名的Web服务器的数字证书。因此,私钥不是公开的,您无法妥协。您可以进行简单的Google搜索以清楚了解CA和数字证书。

最新更新