Car*_*dez 3 cryptography hsm ethereum
我通过Graphene库在HSM上生成了一个密钥,除了当我尝试通过获取它的'pointEC'属性(相当于CKA_EC_POINT)来获取公钥原始值时,我得到了134个字符串:
044104c9d5b656518b5b7e0d747b86328c37a0d507de9b3863a43e77b559ab60c0f9b15985f83a8c20588164c0634f98eb4a4cf8ce70020e94ae21a247904fac8b1010
现在,我了解了这个标准的X和Y整数,但是我读到需要一些数学运算才能使它们有效以生成以太坊地址。我也知道'04'表示它是未压缩的公钥,但是我不知道为什么'4104'会不断弹出或它的含义是什么。这些只是表示相同数据的不同方式吗?我可以将最后的128个字符散列为一个有效的以太坊地址吗?
您将看到BER / DER编码的未压缩点。值的第一个字节04是不是未压缩点指示器。那是第三个字节。值的第一个字节04编码ASN.1 OCTET STRING的标记字节(对于大多数开发人员也称为字节数组)。您可以在此处查看结构。
具有十六进制值41的字节是后面的字节大小:1字节用于04未压缩的点指示符,32字节用于静态大小的 X坐标,而32字节用于Y坐标。
因此,可以,如果需要X坐标和Y坐标,则可以采用最后64个字节并将其分成两部分。128个字符只是这些字节的十六进制表示-但是您应该担心字节。
当然,您应该做的是解析ASN.1,确定并验证长度,获取未压缩的点,对其进行解码,并检查其是否在曲线上以验证您的输入。如果EC密钥包含正确的参数,则该密钥是有效的。但是,对于以太坊/比特币,该曲线是隐式已知的(secp256k1)。