Public-Key
DER簽名和SEC格式是什麼
我經常在比特幣文件和教程中看到這兩個元素,但我還沒有在網際網路上找到 DER 簽名和 SEC 格式的正確定義。
這
可分辨編碼規則 (DER) 格式用於對比特幣中的 ECDSA 簽名進行編碼。ECDSA 簽名是使用私鑰和簽名消息的雜湊生成的。它由兩個 32 字節的數字組成
(r,s)
。正如Pieter 在此處所描述的,DER 簽名格式具有以下組件:
0x30
byte:標頭字節,表示複合結構- 一個字節來編碼以下數據的長度
0x02
: 表示整數的頭字節- 一個字節來編碼以下
r
值的長度r
大端整數形式的值0x02
: 表示整數的頭字節- 一個字節來編碼以下
s
值的長度s
大端整數形式的值請注意,如果它們的第一個字節大於,則
r
ands
值必須在前面加上。在值位於範圍的上半部分(稱為“高”)的情況下,這會導致可變的簽名長度。具有高值的簽名是非標準的,通常不會出現在野外。另請注意,在極少數情況下or可以短於 32 個字節,這是合法的,並且會導致簽名更短。請注意,在比特幣交易中,在 DER 簽名的末尾添加一個字節,表示使用的 SigHash 類型。0x00``0x7F``r``r``s
r``s
證監會
高效加密標準 (SEC) 編碼用於序列化 ECDSA 公鑰。比特幣中的公鑰是由兩個座標組成的 ECDSA 點
(x,y)
。x
並且y
可能小於 32 字節,在這種情況下,它們必須用 0 填充到 32 字節(H/T 編碼愛好者)。比特幣使用兩種格式,未壓縮和壓縮:未壓縮:
0x04
byte:標頭字節,指示 ECDSA 點- 座標為
x
32 字節大端整數- 座標為
y
32 字節大端整數壓縮:
由於座標
(x,y)
必須滿足 secp256k1 曲線方程,因此可以從該值計算出y² = x³ + 7
的兩個可能值。因此,我們可以將公鑰表示為與要使用兩個值中的哪一個的指示符組合的座標。y``x``x``y
0x02
/0x03
byte:頭字節,表示壓縮的ECDSA點,0x02
為偶數y
,0x03
為奇數y
- 座標為
x
32 字節大端整數