楕円曲線の方程式のパラメータを取得します
で署名されたバイナリECDSA384
があり、特定の暗号化ライブラリを使用して検証する必要があります。
最初に行う必要があるのは、EC公開鍵を初期化することです。これには、いくつかのパラメーターを「手動で」設定することが含まれます。これらのパラメーターは、次のEC方程式を作成するパラメーターです。
楕円曲線方程式 $\operatorname{GF}(p): y^2=x^3+ax+b \pmod{p}.$
パラメータが必要です $a$、 $b$、 $p$ そして $n$。(何がわからない$n$ です)
私が使用しているキーはPEM
フォーマットです。ECパラメータは次のようにして抽出できることを知っています。
openssl ec -in ec384.pem -noout -text
そして私は得る
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
。
必要なパラメータを取得するにはどうすればよいですか?
編集-役立つかもしれません
素晴らしい答えとは別に、私はこれが役立つかもしれないことを発見しました:
python
ライブラリは、ecpy
例えば、この情報が含まれています。
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'
回答
04
公開鍵の非圧縮形式を示します。
前半は $x$-コーディネートして後半は $y$-公開鍵の調整。
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
あなたが探しているパラメータは最後の部分で定義されています。
ASN1 OID: secp384r1
NIST CURVE: P-384
パラメータは、FIPS PUB186-4またはSEC2 :推奨される楕円曲線ドメインパラメータに6つとして記載されています。
$$T = (p, a, b, G, n, h)$$
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 + b$ 以上 $F_p$ 定義されています $b$;
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
)は
G = 03 AA87CA22 BE8B0537 8EB1C71E F320AD74 6E1D3B62 8BA79B98
59F741E0 82542A38 5502F25D BF55296C 3A545E38 72760AB7
ベースポイント $G$非圧縮形式(04
)は
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$
n = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
C7634D81 F4372DDF 581A0DB2 48B0A77A ECEC196A CCC52973
と補因子 $h$ は:
h = 01
補因子はによって計算されます $$h = \frac{|E(\mathbb{F_p})|}{n}$$
OpenSSLを介した印刷
OpenSSLコマンドライン楕円曲線操作を使用して、値を印刷することもできます
openssl ecparam -name secp384r1 -out secp384r1.pem
openssl ecparam -in secp384r1.pem -text -param_enc explicit -noout
圧縮
0x02
または0x03
の区別を示します$Y$ または $-Y$。楕円曲線なので$$Y^2 = X^3 + aX + b$$ もし $(X,Y)$ その時のポイントです $(X,-Y)$曲線上の点でもあります。これはの二乗によるものです$Y$ 楕円曲線方程式で。
の最下位ビットによって設計された区別 $Y$、0x02
for 0
、および0x03
for 1
。
ASN1 OID:secp384r1
NIST CURVE:P-384
これらのパラメーターはいわゆる名前付きパラメーターと呼ばれ、使用されるパラメーターを完全に指定します。キーごとに変更されることはありません。Sec 1カーブは、Certicomによって最初に指定され、名前が付けられ、登録されています。
上記の仕様から欠落しているのはOIDです。
- 長い形式のASN.1OID :
{iso(1) identified-organization(3) certicom(132) curve(0) ansip384r1(34)}
; - 短い形式のドット表記:
1.3.132.0.34
。
その後、ANSI X9.62(ペイウェア)およびNIST特別刊行物186-4:デジタル署名標準(DSS)セクションD.1.2.4によって標準化されました。この後者のドキュメントは、現在ドラフト中の186-5によって置き換えられる可能性がありますが、名前やパラメータ自体は変更されないことに注意してください。
ザ・ $n$は曲線の次数です。まだ欠けているのは補因子です$h$、ただし、これは通常、値1に設定され、その特定の理由で省略される場合があります。シードは単純に無視できます。シードは、値が派生したランダムを示します。他の曲線は、これに「私の袖の数を何も上げない」を使用するか、それを完全に回避します。
通常、ライブラリにはこれらのパラメータがソース内またはリソース内に直接含まれています。多くの場合、名前付きパラメーターを文字列またはOID(オブジェクト識別子)として指定することにより、パラメーターを(場合によってはライブラリ固有の形式で)取得できるテーブルが含まれています。