使用openssl获取ec公钥的x和y分量


12

我正在使用openssl从曲线'secp128r1' 生成ECC的KeyPair

我遵循的步骤:

  • 首先,我使用命令生成了私钥

    openssl ecparam -genkey -name secp128r1 -noout -out private.pem

  • 然后我使用命令查看了相应的公钥

    openssl ec -in private.pem -text -noout

    显示为:

    读取EC密钥

    私钥:(128位)私钥

    00:9f:bf:2b:bd:06:86:3a:a1:bc:7c:3e:90:57:40:
    f4:bc
    pub:
    04:04:ce :24:34:d4:cb:f2:58:94:2f:8a:5f:06:d7:
    3f:ed:5a:50:ef:fb:cc:b7:49:62:16:62:9e :aa:d5:
    30:a8:a5

    ASN1 OID:secp128r1

我想从此处生成的公钥中显式地确定x和y分量,请问有人可以建议这样做的正确方法吗?
上述公开密钥是264位长,因此不能采取(/分)它作为是
由于


5
伪造security.stackexchange.com/questions/60926/…;根据tools.ietf.org/html/rfc5480#section-2.2,第一个八位位组(04)表示未压缩,其后是X,Y坐标,每个字段的大小均精确地四舍五入为八位位组,此处为16个八位位组。
dave_thompson_085

2
@dave_Thompson-我认为您应该提供答案。这是一个很好的问题,并且提供了很好的信息(以及在正确的网站上!!!),您应该得到一个好的答案。
jww 2015年

Answers:


1

首先,secp128r1已过时。使用可以为当今标准提供更好安全性的曲线。请参阅Daniel J.Bernstein和Tanja Lange 撰写的安全曲线

椭圆曲线定义在大小的字段q和每-point-具有两个坐标元件Xÿ。椭圆曲线Secp128r1的大小为2 128 -2 97 -1,即点数在2 ^ 128以下。这意味着我们需要128位表示形式。

公钥也是曲线上的一个点,它具有两个坐标,因此,我们需要存储两个128位。

如果我们看一下椭圆曲线的方程ÿ 2 = X 3 + AX + B,其中

 a = FFFFFFFD FFFFFFFF FFFFFFFF FFFFFF
 b = E87579C1 1079F43D D824993C 2CEE5E

如果我们知道X从公式我们可以发现ÿ。由于我们在一个领域中工作,因此Y最多可以具有两个平方根。Y 2将具有y-y作为平方根。该知识可用于压缩点的表示,这称为点压缩。只需x坐标和一位即可选择y-y。现在查看基点(请参阅Certicom建议

 base point = 03 161FF752 8B899B2D 0C28607C A52C5B86
            = 04 161FF752 8B899B2D 0C28607C A52C5B86 CF5AC839 5BAFEB13 C02DA292 DDED7A83 

一个八位位组确定结构

  • 04 表示没有压缩
  • 03表示有压缩并选择y
  • 02表示有压缩并选择y

现在进入OP的参数;

pub:
04:
04:ce:24:34:d4:cb:f2:58:94:2f:8a:5f:06:d7:3f:ed: -->X
5a:50:ef:fb:cc:b7:49:62:16:62:9e:aa:d5:30:a8:a5  -->Y

第一个八位位组04表示没有压缩。第一行是公钥的X坐标,第二行是公钥的Y坐标。

私钥n呢?它只是0 <= n <=ℓ 之间的标量-integer-

私人:00:9f:bf:2b:bd:06:86:3a:a1:bc:7c:3e:90:57:40:f4:bc

因此,上述数字(不是重点)是您的私钥。

您还可以使用一些Web工具来提取此信息。

注意:请不要公开您的私钥。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.