Dhr*_*wal 13 ecc cryptography openssl
我正在使用 openssl 从曲线“secp128r1”生成ECC的密钥对
我遵循的步骤:
首先我使用命令生成了一个私钥
openssl ecparam -genkey -name secp128r1 -noout -out private.pem
然后我使用命令查看了相应的公钥
openssl ec -in private.pem -text -noout
它显示的输出为:
读取 EC 密钥
私钥:(128 位)
priv:
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 位长,因此不能按原样使用(/拆分)
谢谢
首先,secp128r1已经过时了。使用为当今标准提供更好安全性的曲线。请参阅Daniel J. Bernstein 和 Tanja Lange 的safecurves 。
\n在大小为q的字段上定义的椭圆曲线,每个元素点都有两个坐标X和Y。椭圆曲线 Secp128r1 有 2 128 -2 97 -1 大小 \xe2\x84\x93,即点数略低于 2^128。这意味着我们需要 128 位表示。
\n公钥也是曲线上的一个点,有两个坐标,因此,我们需要存储两个128位的。
\n如果我们看一下椭圆曲线的方程Y 2 = X 3 + aX + b其中
\n a = FFFFFFFD FFFFFFFF FFFFFFFF FFFFFF\n b = E87579C1 1079F43D D824993C 2CEE5E\nRun Code Online (Sandbox Code Playgroud)\n如果我们从方程中知道X ,我们就可以找到Y。由于我们在一个领域中工作,Y最多可以有两个平方根。Y 2将以y或-y作为平方根。这些知识可用于压缩点的表示,称为点压缩。只需x坐标和一位来选择y或-y。现在看基点(参见Certicom 推荐)
\n base point = 03 161FF752 8B899B2D 0C28607C A52C5B86\n = 04 161FF752 8B899B2D 0C28607C A52C5B86 CF5AC839 5BAFEB13 C02DA292 DDED7A83 \nRun Code Online (Sandbox Code Playgroud)\n第一个八位位组决定结构
\n04意味着没有压缩03表示存在压缩并选择y为正值02表示有压缩,选择y为负数现在转入OP的参数;
\n\n\nRun Code Online (Sandbox Code Playgroud)\npub:\n04:\n04:ce:24:34:d4:cb:f2:58:94:2f:8a:5f:06:d7:3f:ed: -->X\n5a:50:ef:fb:cc:b7:49:62:16:62:9e:aa:d5:30:a8:a5 -->Y\n
第一个八位字节04意味着没有压缩。第一行是公钥的X坐标,第二行是公钥的Y坐标。
那么私钥n呢?它只是一个介于 0<= n <=\xe2\x84\x93之间的标量-整数-
\n\n\n特权:\n00:9f:bf:2b:bd:06:86:3a:a1:bc:7c:3e:90:57:40:f4:bc
\n
因此,上面的数字——而不是点——就是你的私钥。
\n您还可以使用一些网络工具来提取此信息。
\n\n\n\n注意:请不要暴露您的私钥。
\n
| 归档时间: |
|
| 查看次数: |
6481 次 |
| 最近记录: |