从导入的 ASN.1 格式的椭圆曲线密钥中获取密钥参数
Get key parameters from imported Elliptic Curve key in ASN.1 format
我需要编写代码以获取 ASN.1 格式的输入椭圆曲线密钥。
下一个输入字节数组:
308187020100301306072A8648CE3D020106082A8648CE3D030107046D306B0201010420E699203AC5BCFE36402EBD0AC9E8E21CC6FAD5828A61297EA747468FFF4DBB20A144034200047E05188A03EA81E853B9F6AC5F20DCA1A1CA828FD7CD5D92161FB2120C35EAC52EAB079ED01A510123057C322DDFF95E239D6063055BC90858D161D71DE707F8
在线解析器显示下一个结构:
要根据需要使用密钥,我需要从该结构中获取 public value X
、public value Y
和 private value
,至少我是这么认为的。但是我不知道怎么办。
我搜索了有关 OBJECT IDENTIFIER 1.2.840.10045.2.1
和 OBJECT IDENTIFIER 1.2.840.10045.3.1.7
的信息。我找到了 this document。但是没有描述ASN.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。
哦,是的,public 密钥是未压缩的点格式。不要忘记从位串中去掉 00
。
解析愉快。
我需要编写代码以获取 ASN.1 格式的输入椭圆曲线密钥。
下一个输入字节数组:
308187020100301306072A8648CE3D020106082A8648CE3D030107046D306B0201010420E699203AC5BCFE36402EBD0AC9E8E21CC6FAD5828A61297EA747468FFF4DBB20A144034200047E05188A03EA81E853B9F6AC5F20DCA1A1CA828FD7CD5D92161FB2120C35EAC52EAB079ED01A510123057C322DDFF95E239D6063055BC90858D161D71DE707F8
在线解析器显示下一个结构:
要根据需要使用密钥,我需要从该结构中获取 public value X
、public value Y
和 private value
,至少我是这么认为的。但是我不知道怎么办。
我搜索了有关 OBJECT IDENTIFIER 1.2.840.10045.2.1
和 OBJECT IDENTIFIER 1.2.840.10045.3.1.7
的信息。我找到了 this document。但是没有描述ASN.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。
哦,是的,public 密钥是未压缩的点格式。不要忘记从位串中去掉 00
。
解析愉快。