Hash 数字签名中哈希函数的确定

Hash 数字签名中哈希函数的确定,hash,rsa,pkcs#1,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 3

我有一个数字签名(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
我想了解两件事:

  • 是否可以确定使用的哈希函数?编码的算法ID应该在摘要的实际正文之前,是否可以从原始字节中分辨出它是什么算法

  • 实际摘要从哪里开始(标题/摘要有多长)


  • 这似乎是EMSA-PKCS1-v1_5,如中所述,这意味着在删除标头和填充后,将对
    算法标识符进行DER编码,后跟哈希值本身

    从RFC:

  • 对于附录B.1中提到的六个散列函数,DER
    DigestInfo
    值的编码T等于以下值:

    [……]

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


  • 因此,在您的示例中,散列值是SHA-256散列起始值
    77511bf4d7…

    这似乎是EMSA-PKCS1-v1_5,如中所述,这意味着在删除标头和填充后,您有一个
    算法标识符的DER编码,后跟散列值本身

    从RFC:

  • 对于附录B.1中提到的六个散列函数,DER
    DigestInfo
    值的编码T等于以下值:

    [……]

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

  • 因此,在您的示例中,散列值是SHA-256散列起始值
    77511bf4d7…