问题是,如果signatureValue
是基于哈希值的,为什么这么大?假设签名算法为sha256RSA
。它不应该按照以下步骤缩小:
tbsCertificate
计算SHA256哈希。输出=> 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
操作。您会看到,没有诸如“哈希”之类的术语。有时(使用非常小的值时),结果值的大小可能小于模数大小。在这种情况下,将填充签名值以匹配模数长度。
从原始签名可以推断出RSA密钥的大小,但不能推断嵌入在签名中的哈希算法,这就是为什么签名包含非对称算法和哈希名称(例如sha256RSA
)的原因,否则,您将必须存储哈希算法消息中的某处。由于组合(非对称算法和哈希算法)是有限的并且很小,因此足以为这些组合分配唯一的OID。