검수요청.png검수요청.png

타원곡선 디지털서명 알고리즘

해시넷
lyo731 (토론 | 기여)님의 2019년 7월 4일 (목) 16:25 판 (새 문서: '''타원곡선 디지털서명 알고리즘'''(ECDSA; Elliptic Curce Digital Signature Algorithm)은 타원곡선암호전자서명에 접목시킨 알고리즘으로 비...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)
이동: 둘러보기, 검색

타원곡선 디지털서명 알고리즘(ECDSA; Elliptic Curce Digital Signature Algorithm)은 타원곡선암호전자서명에 접목시킨 알고리즘으로 비트코인 거래 시 정당한 소유주만이 자금을 쓸 수 있도록 하기 위해 사용하는 암호 알고리즘이다.

개요

1985년 N.KoblitzV. S. Miller가 제안한 타원곡선암호(ECC; Elliptic Curve Cryptosystem)에 기반을 둔 전자서명 알고리즘으로, ECC보다 비트의 길이가 짧기 때문에 생성 속도와 처리 속도가 빠르다. 일반적인 인증 시스템에서 보안 키의 보호가 점점 어려워짐에 따라, 이를 보완하기 위해 발신자에 의해 서명 시 사용되는 개인 키와 수신자가 발신자의 서명을 검증할 때 사용하는 공개 키 한 쌍을 갖는 타원곡선암호전자서명 알고리즘에 접목시켰다. 1998년 미국 국립 표준 협회 ANSI(American National Standards Institute)에서 타원곡선 디지털서명 알고리즘을 미국 표준화해 연방 정보 처리 표준에서 승인되었다.

특징

  • 효율성 : 기존 전자서명 (DSA; Digital Signature Algorithm)보다 공개키의 크기가 보안 수준의 1/2 크기로 작은 것에 비해 서명의 크기는 보안 수준의 4배 정도로 동일하다.

타원곡선암호와 비트코인, 이더리움

블록체인에서는 트랜잭션을 주고받을 때, 발신인의 확인을 위해 전자서명을 필요로 한다. 이 전자서명개인 키로만 생성 가능하고 수신인이 트랜잭션에 쓰여있는 전자서명이 정말 발신인의 전자서명이 맞는지 확인할 수 있어야 하는데, 이 두 조건을 고루 만족시키는 기술이 타원곡선암호이다. 대표적으로 비트코인이더리움에서 ECDSA를 사용하는데, 이때 사용되는 타원곡선의 매개변수는 secp256k1으로 SEC(Serticom Research)에 정의되어 있다. secp256k1은 비트코인이 인기를 끈 뒤, 급격히 사용되었으며 구현이 충분히 최적화되면 타곡선보다 30% 이상 속도가 빨라지는 경우가 많다. 정의된 것들은 이러하다.

a = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
b = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000007
유한군 p값 = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F
private key 값 = n = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141
기준점 G = 02 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798

이렇게 정의되었을 때 상수는 0이므로 곡선 방정식의 축 항 역시도 항상 0이다. 그러므로 곡선 방정식은 이러하다.

y^2 = x^3 + 7

송신자가 서명을 생성해 보내는 절차

  • Step1 : 트랜잭션 만들기
  • Step2 : 개인 키를 타원곡선이 지정하는 범위 내에서 정하기

secp256k1에 정의되어 있는 범위 1 ~ FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364140 내에서 고른다. 이때 유의해야 할 것은 1~n까지의 범위가 아닌, 1~n-1까지의 범위기 때문에 위에 적어둔 n 값의 마지막 D0364141까지가 아닌 -1을 해 준 값 D0364140까지라는 것이다.

  • Step3 : 서명 r 구하기

기준점 G값 중 랜덤한 수를 하나 고르고 그 숫자에 G를 곱해 준다. 계산된 값이 서명 r이 된다.

  • Step4 : 서명 s 구하기

서명 s를 구하는 공식은 이러하다.

k^-1(z+r*private key)mod n
k = 서명 r을 구할 때 고른 랜덤한 수
z = 트랜잭션 정보를 직렬 정렬한 값
r = 위에서 구한 서명 r값
private key = 개인키 값

수신자가 서명을 받고 확인하는 절차

서명을 확인하는 공식은 이러하다.

U1 * G + U2 * public key
U1 = z * w mod n
U2 = r * w mod n
w = s^-1 mod n
publick key는 공개 키이자 복구 키로 이더리움에서는 서명값이 아닌 정수 27 또는 28을 사용한다.

계산해낸 p의 x 좌표값과 서명 r의 값이 같다면 송신자의 서명이 맞다는 의미로 확인이 끝난다.[1] [2]

각주

  1. 그래비티Grabity, 〈타원곡선 암호과 이더리움 전자서명 ( feat. 우주를 줄게 )〉, 《네이버 블로그》, 2019-03-26
  2. 김훈일, 〈타원곡선과 블록체인〉, 《네이버 brunch》, 2018-08-18

참고자료

같이 보기


  검수요청.png검수요청.png 이 타원곡선 디지털서명 알고리즘 문서는 알고리즘에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.