타원 곡선 방정식의 매개 변수 얻기

Aug 21 2020

바이너리가 서명되어 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'

답변

4 kelalaka Aug 21 2020 at 20:10

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 PUB 186-4 또는 SEC 2 : 권장 타원 곡선 도메인 매개 변수 에서 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$ is :

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$, 0x02for 00x03for 1.

4 MaartenBodewes Aug 21 2020 at 20:24

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.

그런 다음 ANSI X9.62 (페이웨어) 및 NIST 특별 간행물 186-4 : DSS (디지털 서명 표준) 섹션 D.1.2.4에 의해 표준화되었습니다 . 이 후자의 문서는 186-5 (현재 초안)에 의해 감독 될 수 있지만 이름이나 매개 변수 자체는 변경되지 않습니다.

그만큼 $n$곡선의 순서입니다. 여전히 누락 된 것은 공동 요소$h$,하지만 일반적으로 값 1로 설정되며 특정 이유로 생략 될 수 있습니다. 시드는 간단히 무시할 수 있습니다. 값이 파생 된 임의의 값을 표시합니다. 다른 곡선은이를 위해 "내 소매 번호 없음"을 사용하거나 모두 피합니다.

일반적으로 라이브러리에는 소스 또는 리소스 내에 이러한 매개 변수가 직접 포함됩니다. 여기에는 이름 지정된 매개 변수를 문자열 또는 OID (객체 식별자) 로 제공하여 매개 변수 (라이브러리 특정 형식으로 가능)를 검색 할 수있는 테이블이 포함되는 경우가 많습니다 .