2017-04-07 32 views
0

我需要編寫代碼以ASN.1格式獲取作爲輸入的橢圓曲線密鑰。從導入的ASN.1格式的橢圓曲線密鑰中獲取關鍵參數

輸入字節數組是下一個:

308187020100301306072A8648CE3D020106082A8648CE3D030107046D306B0201010420E699203AC5BCFE36402EBD0AC9E8E21CC6FAD5828A61297EA747468FFF4DBB20A144034200047E05188A03EA81E853B9F6AC5F20DCA1A1CA828FD7CD5D92161FB2120C35EAC52EAB079ED01A51C322DDFF95E239D6063055BC90858D161D71DE707F8

在線分析器顯示我的下一個結構:

Result of online ASN.1 parser

要使用密鑰,因爲我想我需要從這個結構得到public value X,public value Yprivate value,至少我認爲是這樣。但是我不知道怎麼做。

我搜索了關於OBJECT IDENTIFIER 1.2.840.10045.2.1OBJECT IDENTIFIER 1.2.840.10045.3.1.7的信息。我找到了this document。但是沒有描述ASN.1結構的領域。

如何從導入的數據中獲取所需的參數?

回答

1

它通常被稱爲PKCS#8結構,即「私鑰信息語法規範」。它只包含未加密的 PKCS#8私鑰的一部分。

因此,這是在PKCS#8

PrivateKeyInfo ::= SEQUENCE { 
    version Version, 
    privateKeyAlgorithm AlgorithmIdentifier {{PrivateKeyAlgorithms}}, 
    privateKey PrivateKey, 
    attributes [0] Attributes OPTIONAL 
} 

的AlgorithmIdentifier中是taken from PKCS#5

AlgorithmIdentifier { ALGORITHM-IDENTIFIER:InfoObjectSet } ::= SEQUENCE { 
    algorithm ALGORITHM-IDENTIFIER.&id({InfoObjectSet}), 
    parameters ALGORITHM-IDENTIFIER.&Type({InfoObjectSet} 
    {@algorithm}) OPTIONAL 
} 

Elliptic Curve Private Key structure

ECPrivateKey ::= SEQUENCE { 
    version  INTEGER { ecPrivkeyVer1(1) } (ecPrivkeyVer1), 
    privateKey  OCTET STRING, 
    parameters [0] ECParameters {{ NamedCurve }} OPTIONAL, 
    publicKey [1] BIT STRING OPTIONAL 
} 

哦,和DER編碼的Distinguished Encoding Rules (study version) - 你可能無法排除BER com完整的,這是一個更鬆散的定義,因此更難解析結構)。不幸的是,PKCS#8定義了BER。

哦,是的,公鑰是非壓縮點格式。不要忘記從位串中去掉00

快樂解析。