确定数字签名中使用的散列函数

时间:2013-04-20 09:22:57

标签: hash rsa pkcs#1

我有一个数字签名(RSA - PKCS#1)。在使用RSA公钥解密后,我得到以下128字节

00 01 ff ff ff .. ff 00 30 31 30 0d 06 09 60 86 48 01 65 03 04 02 01 05 00 04 20 77 51 1b f4 d7 17 d7 ad 8c 2d e5 89 2a ca e0 6d a3 c0 7d 13 4d d7 b8 01 14 87 03 00 69 e4 9b b3

删除PKCS#1填充,剩下51个字节:

30 31 30 0d 06 09 60 86 48 01 65 03 04 02 01 05 00 04 20 77 51 1b f4 d7 17 d7 ad 8c 2d e5 89 2a ca e0 6d a3 c0 7d 13 4d d7 b8 01 14 87 03 00 69 e4 9b b3

我想要两件事:

  1. 是否可以确定使用的哈希函数?编码算法ID应该预先添加到摘要的实际主体中,是否可以从原始字节中分辨出它是什么算法?

  2. 实际摘要从哪里开始(头/摘要有多长)?

1 个答案:

答案 0 :(得分:1)

这似乎是RFC 3447中描述的EMSA-PKCS1-v1_5,这意味着在删除标头和填充之后,您有一个AlgorithmIdentifier的DER编码,后跟哈希值本身。

来自RFC:

  
      
  1. 对于附录B.1中提到的六个哈希函数,DER   DigestInfo值的编码T等于以下内容:

         

    [...]

         

    SHA-256:(0x)30 31 30 0d 06 09 60 86 48 01 65 03 04 02 01 05 00 04 20 || H.

  2.   

因此,在您的示例中,哈希值是从77511bf4d7...开始的SHA-256哈希。