首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >求椭圆曲线方程的参数

求椭圆曲线方程的参数
EN

Cryptography用户
提问于 2020-08-21 12:06:17
回答 2查看 1.3K关注 0票数 2

我有一个用ECDSA384签名的二进制文件,我需要使用一个特定的密码库来验证它。

需要做的第一件事是初始化EC公钥,这涉及到“手动”设置几个参数。这些参数构成了以下EC方程:

\operatorname{GF}(p): y^2=x^3+ax+b \pmod{p}.上的椭圆曲线方程

我需要参数abpn。(不知道n是什么)

我使用的密钥是PEM格式的。我知道可以通过以下操作提取EC参数:

代码语言:javascript
复制
openssl ec -in ec384.pem -noout -text

我得到了

代码语言:javascript
复制
read EC key
Private-Key: (384 bit)
priv:
    5d:b1:ef:88:fe:7b:f2:af:d8:cc:3a:04:89:09:34:
    15:c4:17:7b:41:72:ee:32:7b:54:9a:e2:aa:fa:1d:
    d1:47:1a:ef:fe:dc:d3:6b:51:fa:bd:c2:5e:66:c4:
    42:d0:16
pub:
    04:5e:ff:47:19:80:be:93:5f:8f:51:14:45:d5:40:
    41:79:ca:48:be:85:97:bd:e2:0f:2b:a0:b2:7d:6c:
    37:74:39:44:ff:50:67:74:30:a8:10:ac:89:a6:6a:
    80:5a:1a:c9:82:ff:2a:51:84:38:c8:f6:af:e0:46:
    e7:9f:d5:66:1b:20:75:7f:87:42:46:d9:6e:12:4f:
    74:38:4d:f4:9f:b1:13:27:9a:10:a8:0c:6b:4b:1f:
    f6:6c:bf:32:ee:a3:10
ASN1 OID: secp384r1
NIST CURVE: P-384

尽管如此,我仍然不能从输出中得到我需要的参数。我不太清楚这些参数是从键更改到键,还是它们是所使用的曲线所固有的,在我的例子中是P-384

我怎样才能得到我需要的参数?

编辑-可能有助于

除了这些奇妙的答案之外,我还发现这可能会有所帮助:

pythonecpy包含以下信息:

代码语言:javascript
复制
pip3 install ecpy
python3
>>> import ecpy.curves as ec
>>> ec.Curve.get_curve_names()
['stark256', 'frp256v1', 'secp521r1', 'secp384r1', ...]
>>> p384 = ec.Curve.get_curve('secp384r1')
>>> hex(p384.a)
'0xffff...ffc'
>>> hex(p384.b)
'0xb3312f...3ec2aef'
>>> hex(p384.order)
'0xfffffff...cc52973'
>>> hex(p384.field)  # This is the modulus
'0xfffffff...00ffffffff'
EN

回答 2

Cryptography用户

回答已采纳

发布于 2020-08-21 13:10:41

04表示公钥的未压缩形式。

前半部分是x-coordinate,下半部分是公钥的y-coordinate。

代码语言:javascript
复制
x= 5e:ff:47:19:80:be:93:5f:8f:51:14:45:d5:
   40:41:79:ca:48:be:85:97:bd:e2:0f:2b:a0:
   b2:7d:6c:37:74:39:44:ff:50:67:74:30:a8:
   10:ac:89:a6:6a:80:5a:1a:c9:

y =82:ff:2a:51:84:38:c8:f6:af:e0:46:e7:9f:
   d5:66:1b:20:75:7f:87:42:46:d9:6e:12:4f:
   74:38:4d:f4:9f:b1:13:27:9a:10:a8:0c:6b:
   4b:1f:f6:6c:bf:32:ee:a3:10

您要查找的参数在最后一部分中定义。

代码语言:javascript
复制
ASN1 OID: secp384r1
NIST CURVE: P-384

这些参数可以在FIPS酒吧186-4第2节:推荐的椭圆曲线域参数中作为六元组找到。

T = (p, a, b, G, n, h)
代码语言:javascript
复制
p = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 
    FFFFFFFF FFFFFFFE FFFFFFFF 00000000 00000000 FFFFFFFF

p = 2^{384} − 2^{128} − 2^{96} + 2^{32} − 1

定义了E: y^2 = x^3 + ax + bF_p上的曲线b

代码语言:javascript
复制
a = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
    FFFFFFFF FFFFFFFE FFFFFFFF 00000000 00000000 FFFFFFFC

b = B3312FA7 E23EE7E4 988E056B E3F82D19 181D9C6E FE814112
    0314088F 5013875A C656398D 8A2ED19D 2A85C8ED D3EC2AEF

压缩形式的基点G (03)表示

代码语言:javascript
复制
G = 03 AA87CA22 BE8B0537 8EB1C71E F320AD74 6E1D3B62 8BA79B98
       59F741E0 82542A38 5502F25D BF55296C 3A545E38 72760AB7

基准点G以未压缩形式(04)指示

代码语言:javascript
复制
G = 04 AA87CA22 BE8B0537 8EB1C71E F320AD74 6E1D3B62 8BA79B98
       59F741E0 82542A38 5502F25D BF55296C 3A545E38 72760AB7
       3617DE4A 96262C6F 5D9E98BF 9292DC29 F8F41DBD 289A147C
       E9DA3113 B5F0B8C0 0A60B1CE 1D7E819D 7A431D7C 90EA0E5F

n是基点G的顺序

代码语言:javascript
复制
n = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
    C7634D81 F4372DDF 581A0DB2 48B0A77A ECEC196A CCC52973

辅助性因子h是:

代码语言:javascript
复制
h = 01

辅助性因子由h = \frac{|E(\mathbb{F_p})|}{n}分解而成

的OpenSSL

打印

使用OpenSSL命令-线椭圆曲线操作也可以打印这些值。

代码语言:javascript
复制
openssl ecparam -name secp384r1 -out secp384r1.pem
openssl ecparam -in secp384r1.pem -text -param_enc explicit -noout

压缩

0x020x03表示Y-Y的区别。因为在椭圆曲线中,Y^2 = X^3 + aX + b,如果(X,Y)是点,那么(X,-Y)也是曲线上的一个点。这是由于椭圆曲线方程中Y的平方所致。

最不重要的Y0x02用于00x03用于1设计的区别。

票数 5
EN

Cryptography用户

发布于 2020-08-21 13:24:33

ASN1 OID: secp384r1 NIST曲线: P-384

这些参数被称为命名参数,它们完全指定使用的参数。他们不会改变每把钥匙。Sec 1曲线最初是Certicom的指明、指名和注册曲线。

上述规范中缺少的是OID:

  • 长形ASN.1 OID:{iso(1) identified-organization(3) certicom(132) curve(0) ansip384r1(34)}
  • 短形式点记法:1.3.132.0.34.

然后由ANSX9.62 (payware)和NIST特别出版物186-4:数字签名标准(DSS)节D.1.2.4对它们进行标准化。请注意,后一种文档可能会被186种替代--目前正在起草中--但这不会改变名称或参数本身。

n是曲线的阶数。仍然缺少的是辅助因子h,但是它通常被设置为1,并且可能因为这个特殊原因而被忽略。可以简单地忽略该种子:它显示了从其中导出值的随机值。其他曲线则使用“不加袖子号码”,或者完全避免使用。

通常,库直接在源或资源中包含这些参数。它们通常包含表,您可以通过将命名参数作为字符串或OID (对象标识符)来检索参数(可能是库特定的格式)。

票数 4
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/83465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档