HSM返回67个字节的ECDSA-secp256k1公钥,这是什么意思?

时间:2019-04-18 13:52:29

标签: cryptography ethereum hsm

我通过Graphene库在HSM上生成密钥,除了当我尝试通过获取其'pointEC'属性(相当于CKA_EC_POINT)来获取公钥原始值时,我得到了134个字符串:

044104c9d5b656518b5b7e0d747b86328c37a0d507de9b3863a43e77b559ab60c0f9b15985f83a8c20588164c0634f98eb4a4cf8ce70020e94ae21a247904fac8b1010

现在,对于这个标准,我知道有一个X和Y整数,但是我读到一些数学运算才能使它们有效地生成以太坊地址。我也知道'04'意味着它是一个未压缩的公钥,但是我不知道为什么'4104'会不断弹出或它的含义是什么。这些只是表示相同数据的不同方式吗?我可以取最后128个字符并将其哈希为有效的以太坊地址吗?

1 个答案:

答案 0 :(得分:4)

您看到的是一个 BER / DER编码的未压缩点。值04的第一个字节是 not 未压缩点指示符。那是第三个字节。值04的第一个字节为ASN.1 OCTET STRING(对于大多数开发人员也称为字节数组)的标记字节进行编码。您可以查看结构here

具有十六进制值41的字节是后面的字节的大小:04未压缩点指示符为1字节,静态大小 X为32字节-坐标,Y坐标为32个字节。

是的,如果需要X坐标和Y坐标,则可以采用最后64个字节并将其分成两部分。 128个字符只是这些字节的十六进制表示-但是您只需要担心这些字节即可。

当然,您应该要做的是解析ASN.1,确定并验证长度,获取未压缩的点,对其进行解码,然后检查其是否在曲线上< / em>以验证您的输入。如果EC密钥包含正确的参数,则该密钥是有效的。然而,对于以太坊/比特币来说,曲线是隐含的(secp256k1)。