PKI/ASN.1

ECDSA κ°œμΈν‚€ ASN.1 ν˜•μ‹

JayKimπŸ™‚ 2023. 5. 2. 10:30

μ΄λ²ˆμ—λŠ” ECDSA μ•Œκ³ λ¦¬μ¦˜μ—μ„œ μ‚¬μš©ν•˜λŠ” κ°œμΈν‚€ 포맷에 λŒ€ν•΄ μ•Œμ•„ 보자
λ¨Όμ € ECDSA κ°œμΈν‚€ 포맷은 RFC5915 에 μ •μ˜ λ˜μ–΄ μžˆλ‹€.

ASN.1 ν˜•μ‹

   ECPrivateKey { iso(1) identified-organization(3) dod(6)
     internet(1) security(5) mechanisms(5) pkix(7) id-mod(0)
     id-mod-ecprivateKey(65) }

   DEFINITIONS EXPLICIT TAGS ::=

   BEGIN

   -- EXPORTS ALL;

   IMPORTS

   -- FROM New PKIX ASN.1 [RFC5912]

   ECParameters, NamedCurve
     FROM PKIXAlgs-2009
       { iso(1) identified-organization(3) dod(6) internet(1)
         security(5) mechanisms(5) pkix(7) id-mod(0)
         id-mod-pkix1-algorithms2008-02(56) }

   ;

   ECPrivateKey ::= SEQUENCE {
     version        INTEGER { ecPrivkeyVer1(1) } (ecPrivkeyVer1),
     privateKey     OCTET STRING,
     parameters [0] ECParameters {{ NamedCurve }} OPTIONAL,
     publicKey  [1] BIT STRING OPTIONAL
   }

   END

μ£Όμš” λ‚΄μš©μ€ ECPrivateKey 뢀뢄이 ECDSA κ°œμΈν‚€ 파일 ν˜•μ‹μ΄λ‹€.
μ—¬κΈ°μ„œ 보면 항상 κ°œμΈν‚€ νŒŒμΌμ—λŠ” μ£Όμš” 값이 버전, κ°œμΈν‚€, νŒŒλΌλ―Έν„° 그리고 κ³΅κ°œν‚€ μ΄λ ‡κ²Œ 4κ°€μ§€ 값이 μ •μ˜ λœλ‹€.

  • version : ν˜„μž¬ 이 값은 1 의 κ³ μ • 값이 μ‚¬μš© λœλ‹€.
  • privateKey : 이 값이 κ°€μž₯ 보호 λ˜μ–΄μ•Ό ν•  ECDSA 의 κ°œμΈν‚€ 값이닀.
  • parameters : ECC 도맀인 νŒŒλΌλ―Έν„° 이름이닀. μ—¬κΈ°μ„œλŠ” namedCurve 방식을 μ‚¬μš©ν•΄ OID 값이 μ‚¬μš©λœλ‹€. (μ˜΅μ…˜)
  • publicKey : κ³΅κ°œν‚€ κ°’ ( μ˜΅μ…˜ )

참고둜 parameters 와 publicKey 값이 μ˜΅μ…˜μ΄μ œλ§Œ μ‹€μ œ μ‚¬μš©μ— μžˆμ–΄μ„œλŠ” ν•„μˆ˜ κ°’μ²˜λŸΌ μš”κ΅¬ λœλ‹€.

PEM ν˜•μ‹μ˜ 인코딩 헀더

μ‹€μ œλ‘œ κ°œμΈν‚€λ₯Ό μƒμ„±ν•΄μ„œ PEM νŒŒμΌμ„ 생성 ν•˜λ©΄ μ‚¬μš©ν•˜λŠ” ν—€λ”λŠ” λ‹€μŒ 처럼 μ§€μ •ν•œλ‹€.

-----BEGIN EC PRIVATE KEY-----
-----END EC PRIVATE KEY-----

OpenSSL ECDSA κ°œμΈν‚€ 생성

openssl ecparam -name prime256v1 -genkey -noout -out ecdsa_private_key.pem

μ—¬κΈ°μ„œ -name prime256v1 인 secp256r1 νŒŒλΌλ―Έν„°λ₯Ό μ‚¬μš© ν•˜λŠ” 경우λ₯Ό λ‚˜νƒ€λ‚Έλ‹€.

μƒμ„±ν•œ PEM ν˜•μ‹μ„ 보면 λ‹€μŒ 처럼 λ‚˜μ˜¨λ‹€.

-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIGT2Um3gW//u0sWCDZQ/XuD6Qizge3mLOZWXPLJrso9XoAoGCCqGSM49
AwEHoUQDQgAEowFoZg9qlBEGZJ46iWBeLV38Xy2P2FQWOMdNQoceqeevT+e1ZIu4
UZ03ePqB6FToUArLqHfW9O6FlsA9Bt2ZCA==
-----END EC PRIVATE KEY-----

ECDSA PrivateKey 보기

이제 생성 된 κ°œμΈν‚€λ₯Ό BerEditor μ—΄μ–΄ λ³Έ 화면이닀.

μ΄λ ‡κ²Œ μ΄λ―Έμ§€μ—μ„œ 보면 κ°œμΈν‚€, νŒŒλΌλ―Έν„°, κ³΅κ°œν‚€ 값을 확인 ν•  수 μžˆλ‹€.
ν™”λ©΄μ—μ„œλŠ” λΉ„νŠΈ μŠ€νŠΈλ§μ΄μ§€λ§Œ μ‹€μ œλ‘œλŠ” ν—₯사 κ°’μ΄μ—μš”^^

κ°œμΈν‚€ νŒŒμΌμ—λŠ” νŒŒλΌλ―Έν„° OIDλž‘ κ³΅κ°œν‚€ 값이 μ˜΅μ…˜μ΄μ§€λ§Œ μ‹€μ œ 개발 ν•˜λ‹€ 보면 항상 값이 포함이 λ˜μ–΄ μžˆλ‹€.

νŒŒλΌλ―Έν„° μ •λ³΄μ˜ 경우 CHOICE ν˜•μ‹μΈλ° 그말은 λ‹€λ₯Έ 값도 μ‘΄μž¬ν•œλ‹€κ³  보면 λœλ‹€.
이 νŒŒλΌλ―Έν„°μ˜ μ •λ³΄λŠ” RFC5480 μ—μ„œ μ°Έμ‘° ν•˜λ©΄ λœλ‹€.
μ‹€μ œλ‘œ νŒŒλΌλ―Έν„°μ˜ OID κ°’μœΌλ‘œ ν‘œν˜„λ˜λŠ” κ²½μš°κ°€ μΌλ°˜μ μ΄μ§€λ§Œ κ°„ν˜Ή νŒŒλΌλ―Έν„° κ°’μ˜ 정보가 μΆ”κ°€ λ˜κΈ°λ„ ν•œλ‹€.
ν•˜μ§€λ§Œ 이 κ²½μš°λŠ” 잘 μ‚¬μš©λ˜μ§€λŠ” μ•ŠλŠ”λ‹€.

λ°˜μ‘ν˜•