openssl을 사용하여 ec 공개 키의 x 및 y 구성 요소 가져 오기


12

openssl을 사용하여 곡선 'secp128r1'에서 ECC에 대한 KeyPair를 생성하고 있습니다.

내가 따르는 단계 :

  • 먼저 명령을 사용하여 개인 키를 생성했습니다.

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

  • 그런 다음 명령을 사용하여 해당 공개 키를 보았습니다.

    openssl ec -in private.pem-텍스트 -noout

    결과는 다음과 같습니다.

    EC 키 읽기

    개인 키 : (128 비트) 개인
    :
    00 : 9f : bf : 2b : bd : 06 : 86 : 3a : a1 : bc : 7c : 3e : 90 : 57 : 40 :
    f4 : bc
    펍 :
    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 옥텟 옥텟 반올림 cooordinates 의미한다.
dave_thompson_085

2
@dave_Thompson-답변을 제공해야한다고 생각합니다. 좋은 질문과 좋은 정보 (그리고 정확한 사이트 !!!) 였으므로 좋은 답변의 혜택을 받아야합니다.
jww

답변:


1

우선, secp128r1 이 오래되었습니다. 오늘날의 표준에 대해 더 나은 보안을 제공하는 곡선을 사용하십시오. Daniel J. Bernstein과 Tanja Lange의 안전 곡선 을 참조하십시오 .

q 크기의 필드에 정의 된 타원 곡선 과 모든 요소 -point-에는 두 개의 좌표 XY가 있습니다. 타원 곡선 Secp128r1 2 갖는다 128 -2 97 -1 크기 ℓ, 작은 2 ^ 128 점 미만, 즉 참조. 이것은 128 비트 표현이 필요하다는 것을 의미합니다.

커브의 한 지점이기도 한 공개 키에는 두 개의 좌표가 있으므로 두 개의 128 비트를 저장해야합니다.

우리는 타원 곡선의 식을 보면 Y 2 = X 3 + AX + B 여기서,

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

방정식에서 X 를 알고 있으면 Y 를 찾을 수 있습니다 . 우리가 현장에서 일하고 있기 때문에 Y 는 최대 2 개의 제곱근을 가질 수 있습니다. Y 2y 또는 -y 를 제곱근으로 갖습니다 . 이 지식을 사용하여 점의 표현을 압축 할 수 있으며이를 점 압축 이라고 합니다 . x 좌표와 1 비트 만으로 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 <= ℓ 사이의 스칼라 정수입니다.

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

따라서 위의 숫자 (포인트가 아님)는 개인 키입니다.

일부 웹 도구를 사용하여이 정보를 추출 할 수도 있습니다.

참고 : 개인 키를 공개하지 마십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.