从ASN.1格式的导入Elliptic Curve密钥中获取关键参数

时间:2017-04-07 10:07:32

标签: cryptography asn.1 elliptic-curve

我需要编写以ASN.1格式输入Elliptic Curve密钥的代码。

输入字节数组是下一个:

  

308187020100301306072A8648CE3D020106082A8648CE3D030107046D306B0201010420E699203AC5BCFE36402EBD0AC9E8E21CC6FAD5828A61297EA747468FFF4DBB20A144034200047E05188A03EA81E853B9F6AC5F20DCA1A1CA828FD7CD5D92161FB2120C35EAC52EAB079ED01A510123057C322DDFF95E239D6063055BC90858D161D71DE707F8

在线解析器向我展示了下一个结构:

Result of online ASN.1 parser

要根据需要使用密钥,我需要从此结构中获取public value Xpublic value Yprivate value,至少我是这么认为的。但我不知道如何。

我搜索了有关OBJECT IDENTIFIER 1.2.840.10045.2.1OBJECT IDENTIFIER 1.2.840.10045.3.1.7的信息。我找到了this document。但是没有ASN.1结构字段的描述。

如何从导入的数据中获取所需的参数?

1 个答案:

答案 0 :(得分: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,这是一个更松散定义的,因此更难以解析结构)。不幸的是,PKCS#8定义了BER。

哦,是的,公钥是未压缩的点格式。不要忘记从位串中剥离00

快乐解析。