X509 签名值大小
X509 signatureValue size
问题是如果signatureValue
是基于散列的,为什么这么大?
假设签名算法是sha256RSA
。
按照下面的步骤是不是应该更小:
- 从
tbsCertificate
计算 SHA256 哈希。输出 => 256 位。
- 使用 RSA 私钥对 256 位哈希进行签名。输出 => 256 位?
但是如果您看到 signatureValue
的大小,它可能有 2048、4096 [更大?] 位。
签名大小不取决于用于散列签名数据的散列算法。它仅取决于密钥大小。
RSA 签名基于模幂,即 sig = m ^ d mod N
,其中:
m
是要签名的消息
d
私有指数(其大小为 N / 2
,即 RSA 2048 为 1024 位)。
N
模数
sig
签名值
对于这样的计算,最终结果是 m ^ d
结果除以模数(大致为 RSA 密钥大小)的余数。 m
和 d
是相当大的值,当你一个接一个地供电时,该值将很大,甚至不适合模数长度,这就是为什么使用最后一个 mod
操作.而且你可以看到,没有 "hash" 这样的术语。有时(当使用非常小的值时),结果值大小可能小于模数大小。在这种情况下,将填充签名值以匹配模数长度。
从原始签名可以推断出RSA密钥大小,但无法推断出签名中嵌入的哈希算法,这就是为什么签名包含非对称算法和哈希名称,例如sha256RSA
,否则,您将必须在消息中的某处存储哈希算法。由于组合(非对称算法和散列算法)是有限的且非常小,因此为此类组合分配唯一的 OID 就足够了。
问题是如果signatureValue
是基于散列的,为什么这么大?
假设签名算法是sha256RSA
。
按照下面的步骤是不是应该更小:
- 从
tbsCertificate
计算 SHA256 哈希。输出 => 256 位。 - 使用 RSA 私钥对 256 位哈希进行签名。输出 => 256 位?
但是如果您看到 signatureValue
的大小,它可能有 2048、4096 [更大?] 位。
签名大小不取决于用于散列签名数据的散列算法。它仅取决于密钥大小。
RSA 签名基于模幂,即 sig = m ^ d mod N
,其中:
m
是要签名的消息d
私有指数(其大小为N / 2
,即 RSA 2048 为 1024 位)。N
模数sig
签名值
对于这样的计算,最终结果是 m ^ d
结果除以模数(大致为 RSA 密钥大小)的余数。 m
和 d
是相当大的值,当你一个接一个地供电时,该值将很大,甚至不适合模数长度,这就是为什么使用最后一个 mod
操作.而且你可以看到,没有 "hash" 这样的术语。有时(当使用非常小的值时),结果值大小可能小于模数大小。在这种情况下,将填充签名值以匹配模数长度。
从原始签名可以推断出RSA密钥大小,但无法推断出签名中嵌入的哈希算法,这就是为什么签名包含非对称算法和哈希名称,例如sha256RSA
,否则,您将必须在消息中的某处存储哈希算法。由于组合(非对称算法和散列算法)是有限的且非常小,因此为此类组合分配唯一的 OID 就足够了。