/ / Bestimmen der Hash-Funktion, die in der digitalen Signatur verwendet wird - Hash, rsa, pkcs # 1

Bestimmen der Hash-Funktion, die in der digitalen Signatur verwendet wird - Hash, rsa, pkcs # 1

Ich habe eine digitale Signatur (RSA-PKCS # 1). Nach dem Entschlüsseln mit dem öffentlichen RSA-Schlüssel bekomme ich die folgenden 128 Bytes

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

Auffüllen von PKCS # 1 entfernt, 51 Bytes übrig:

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

Ich möchte zwei Dinge dazu:

  1. Kann die verwendete Hash-Funktion ermittelt werden? Die codierte Algorithmus-ID sollte dem eigentlichen Körper des Digests vorangestellt werden. Kann der Algorithmus anhand der rohen Bytes ermittelt werden?

  2. Wo beginnt der eigentliche Digest (wie lange dauert der Kopf / Digest)?

Antworten:

1 für die Antwort № 1

Dies scheint EMSA-PKCS1-v1_5 zu sein, wie in beschrieben RFC 3447, was bedeutet, dass Sie nach dem Entfernen der Kopfzeile und der Auffüllung eine DER-Kodierung von a haben AlgorithmIdentifier gefolgt vom Hashwert selbst.

Aus dem RFC:

  1. Für die sechs Hash-Funktionen, die in Anhang B.1 erwähnt werden, die DER Kodierung T der DigestInfo Wert ist gleich dem folgenden:

    [...]

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

In Ihrem Beispiel ist der Hashwert also der SHA-256-Hashstart 77511bf4d7....