Dsa

DER 格式的 X.509 ECDSA 簽名欄位在位串和 r 和 s 序列之間包含“00”

  • April 17, 2020

我通過 openssl 創建了一個帶有 ECDSAwithSHA256(OID=1.2.840.10045.4.3.2) 的 X.509 證書。

ECC 參數為 secp256r1。

以下是簽名算法和簽名值。

30 0A 06 08 2A 86 48 CE 3D 04 03 02 // signatureAlgorithm field
03 49 // the starts of signatureValue indicating bitstring length of 0x49 bytes.
00 // what is this?
30 46 // the sequence of r and s as specified in RFC3279
02 21 00 98 21 1C AE A4 03 EA 1C 3A 9F 4B 9A AB 94 2E 89 97 67 F1 51 76 F8 00 A8 3B 72 57 1D 95 FA C6 B8 // this is r
02 21 00 A9 79 69 AC 04 A0 8C 2E 40 7C EF 81 B4 E2 1B DE 58 BB E4 EB 3D 4A 0D 7E 2D 80 EB FA 89 B5 B6 E8 // this is s

我不明白'00’在這裡做什麼。

是否與 X.690 規範中的以下語句有關?

8.6.2.3如果位串是空的,不得有後續的八位位組,並且初始字節必須是零。

不,00只是表示有多少至少顯著位在比特串的最後一個字節中。

由於比特串包含一個八位字節串(由兩個整數的序列的)它將永遠是零,如在BIT STRING所有位都使用。這是為了BIT STRING本身的BER / DER編碼定義。

至於為何簽名未被指定為字節串本身,好了,我百思不得其解,因為大多數簽名定義為OCTET STRING反正就算他們沒有構造,如RSA簽名。

引用自:https://crypto.stackexchange.com/questions/80036