티스토리 뷰
ECC (elliptic curve cryptography)를 사용한 digital signature 알고리즘.
특히 TLS에서 디피힐먼 방식의 키교환 알고리즘을 채택했을 경우 서버 authentication(해당 서버가 ssl 인증서에 들어있는 public key의 counterpart인 private key를 진짜 가졌음을 검증)을 위해 함께 사용되는 알고리즘 중 하나이다.
(RSA를 키교환 알고리즘으로 채택했을 경우와 달리, 디피 힐먼은 키교환만 할 뿐 authentication을 하지는 못하기 때문에)
* ECC
Elliptic Curve Cryptography Tutorial - Understanding ECC through the Diffie-Hellman key Exchange
파라미터 세팅
1. curve parameter = ( CURVE, G, n )
elliptic curve = Ep(a,b):y2=x3+ax+bmodpEp(a,b):y2=x3+ax+bmodp
GG = base point
nn = multiplicative order of G (n×G=0n×G=0)
2. public key, private key
dd = private key.
QQ = public key.
d×G=Qd×G=Q.
"dot" 연산을 d번 했을 때 곡선 위의 한점이자 public Key인 좌표 Q가 나온다.
3. 메세지 mm

서명 생성하기 (Signature)
1. zz 계산하기
ee = Hash ( message )
zz = LnLn leftmost bits of ee
2. 랜덤 integer kk 결정하고, 곡선 위의 좌표 (x1,y1)(x1,y1) 를 계산한다.
k는 1과 n-1 사이의 값이어야 한다.
(x1,y1)=k×G(x1,y1)=k×G
3. 서명 (r,s)(r,s) 계산하기
r=x1modnr=x1modn
s=k−1(z+rd)modns=k−1(z+rd)modn
이제 메세지 m과 서명인 (r,s) pair 가 상대방에게 전달된다.
* 이때 public하게 공유되는 값은 (Curve, GG, nn)와 공개키 QQ,
서버만 알고 있는 private 값은 개인키 dd와 값 kk 이다!
verify 하기
1. zz 계산하기
ee = Hash ( message )
zz = LnLn leftmost bits of ee
2. 중간값 u1u1, u2u2 계산하기
u1u1 = zs−1modnzs−1modn
u2u2 = rs−1modnrs−1modn
3. 좌표 (x1,y1)(x1,y1) 를 계산하기
(x1,y1)(x1,y1) = u1×G+u2×Qu1×G+u2×Q
* 이렇게 좌표 (x1,y1)(x1,y1) 를 구할 수 있는 이유는..
u1×G+u2×Qu1×G+u2×Q
= u1×G+u2×d×Gu1×G+u2×d×G
= (u1+u2×d)G(u1+u2×d)G
= (zs−1+rds−1)G(zs−1+rds−1)G
= (z+rd)s−1G(z+rd)s−1G
= (z+rd)(z+rd)−1kG(z+rd)(z+rd)−1kG. (* s=k−1(z+rd)modns=k−1(z+rd)modn 이었으므로)
= kGkG
4. 이때 구한 좌표 (x1,y1)(x1,y1) 이 valid 하다면 verify 통과이다.
r=?x1modnr=?x1modn
참고 : ECDSA 위키피디아
'시리즈 > Security' 카테고리의 다른 글
HTTPS (0) | 2021.10.21 |
---|---|
TLS handshake 와 Cipher Suites (0) | 2021.10.21 |
디지털 암호화 (0) | 2021.10.16 |