PromleeBlog
sitemap
aboutMe

posting thumbnail
타원 곡선 암호화
Elliptic Curve Cryptography

📅

🚀

곱셈 표기법 vs 덧셈 표기법 (Multiplication vs Additive) 🔗

Multiplicative NotationOperationAdditive Notation
ggGeneratorPP
ghg \cdot hMultiplication/AdditionP+QP + Q
gx=ggg (x times)g^x = g \cdot g \cdots g \ \text{(x times)}Exponentiation/Scalar MultiplicationxP=P+P++P (x times)xP = P + P + \cdots + P \ \text{(x times)}
곱셈 표기법은 주로 모듈러 연산과 같은 분야, 덧셈 표기법은 타원곡선 암호학과 같은 분야에서 사용된다.
예를 들어, 디피-헬만 키 교환에서는 곱셈 표기법을 사용하여 gagb=ga+bg^a \cdot g^b = g^{a+b}를 계산한다.
반면에 타원곡선 암호학에서는 덧셈 표기법을 사용하여 aP+bP=(a+b)PaP + bP = (a+b)P를 계산한다.

🚀

덧셈 표기법을 이용한 DSA (DSA with Additive Notation) 🔗

키 생성 (RSA Key Generation) 🔗

  1. 순서 qq를 가지는 (
    덧셈적
    ) 순환 그룹 GG를 선택한다.
  2. GG에서 생성자 PP를 선택한다.
  3. ZqZ_q^*에서 임의의 정수 xx를 선택한 후 Q=xPQ = xP를 계산한다.
  4. 공개 키 pk=(q,P,Q)pk = (q, P, Q), 개인 키 sk=xsk = x를 반환한다.

서명 (DSA Signature) 🔗

개인 키 sk=xsk = x와 메시지 MM이 주어졌을 때
  1. ZqZ_q^*에서 임의의 kk를 선택한다.
  2. r=kP(modq)r = kP \pmod{q}s=k1(H(M)+xr)(modq)s = k^{-1}(H(M) + xr) \pmod{q}를 계산한다.
  3. 서명 σ=(M,r,s)\sigma = (M, r, s)를 반환한다.

검증 (DSA Signature Verification) 🔗

공개 키 pk=(q,P,Q)pk = (q, P, Q)와 메시지 MM에 대한 서명 σ=(M,r,s)\sigma = (M, r, s)가 주어졌을 때
  1. w=s1(modq)w = s^{-1} \pmod{q}를 계산한다.
  2. u1=H(M)w(modq)u_1 = H(M)w \pmod{q}u2=rw(modq)u_2 = rw \pmod{q}를 계산한다.
  3. v=u1P+u2Q(modq)v = u_1P + u_2Q \pmod{q}를 계산한다.
  4. v=?r(modq)v \stackrel{?}{=} r \pmod{q}를 확인한다. 이 조건이 성립하면 1을 반환하고, 그렇지 않으면 0을 반환한다.

정확성 (DSA Signature correctness) 🔗

u1P+u2Q=(u1+u2x)P=(s1H(M)+s1xr)Pu_1P + u_2Q = (u_1 + u_2x)P = (s^{-1}H(M) + s^{-1}xr)P
=k(H(M)+xr)1(H(M)+xr)P=kP= k(H(M) + xr)^{-1}(H(M) + xr)P = kP
➡️

덧셈 표기법을 이용한 DSA에서 고려할 점 🔗

  1. (안전한)덧셈 그룹을 어떻게 생성할 것인가
  2. 모듈러 연산을 어떻게 처리할 것인가

🚀

타원 곡선 (Elliptic Curve) 🔗

👨‍💻
E:Y2=X3+AX+BE: Y^2 = X^3 + AX + B
Weierstrass 형태의 방정식 해 집합
여기서 상수 AABB는 타원곡선의 계수로, 4A3+27B204A^3 + 27B^2 \neq 0이어야 한다.
또한 타원곡선은 추가적인 점 O\mathcal{O}을 가진다.

예시 (타원 곡선) 🔗

  1. E:Y2=X33X+3E: Y^2 = X^3 -3X+3
    image
  2. E:Y2=X36X+5E: Y^2 = X^3 -6X+5
    image

🚀

수학적 구조: 유한필드 (Mathematical Structure: Finite Field) 🔗

필드 Fp\mathbb{F}_p는 덧셈, 곱셈 뺄셈, 그리고 0이 아닌 요소들에 대한 나눗셈이 가능한 수학적 구조이다.
또한 결합 법칙, 교환 법칙, 분배 법칙이 성립한다.
실수 집합, 복소수 집합은 필드이지만 정수 집합은 필드가 아니다.
Zp={0,1,2,,p1}\mathbb{Z}_p = \{0, 1, 2, \cdots, p-1\}pp
소수
일 때 유한필드이다.
다항식 유한 필드 GF(pn)GF(p^n)pnp^n 요소를 가지는 필드 (계수가 pp인 차수 nn의 다항식의 집합)이다.
(Zp[X]modP(X)\mathbb{Z}_p[X] \mod{P(X)}에서 P(X)P(X)는 차수 nn의 기약 다항식이다.)

🚀

유한 필드 위의 타원곡선 (Elliptic Curve over Finite Field) 🔗

타원곡선은 유한필드 Fp\mathbb{F}_p 위에서 정의될 수 있다.

예시 (유한 필드 위의 타원곡선) 🔗

E:Y2=X3+3X+8  over  F13E : Y^2 = X^3 + 3X + 8 \;\text{over}\; \mathbb{F}_{13}
...
E(F13)={O,(1,5),(1,8),(2,3),(2,10),(9,6),(9,7),(12,2),(12,11)}\therefore E(\mathbb{F}_{13}) = \{\mathcal{O}, (1, 5), (1, 8), (2, 3), (2, 10), (9, 6), (9, 7), (12, 2), (12, 11)\}

🚀

타원 곡선 위의 덧셈 정리 (Addition on Elliptic Curve Points) 🔗

타원곡선 위의 두 점 P=(x1,y1)P = (x_1, y_1), Q=(x2,y2)Q = (x_2, y_2)에 대해 P+Q=R=(x3,y3)P + Q = R = (x_3, y_3)를 계산하는 방법
👍
x3=s2x1x2x_3 = s^2 - x_1 - x_2
y3=s(x1x3)y1y_3 = s(x_1 - x_3) - y_1
여기서 기울기 s=y2y1x2x1s = \frac{y_2 - y_1}{x_2 - x_1}이다.

예시 (타원곡선 위의 덧셈) 🔗

E:Y2=X3+3X+8  over  F13E : Y^2 = X^3 + 3X + 8 \;\text{over}\; \mathbb{F}_{13}
E(F13)E(\mathbb{F}_{13})에서 두 점 P=(9,7)P = (9, 7)Q=(1,8)Q = (1, 8)가 주어졌을 때,
s=8719=18=15=8(mod13)(  58=40=1(mod13))s = \frac{8 - 7}{1 - 9} = \frac{1}{-8} = \frac {1}{5} = 8 \pmod{13} (\because \; 5 \cdot 8 = 40 = 1 \pmod{13})
x3=s2x1x2=8291=6410=54=2(mod13)x_3 = s^2 - x_1 - x_2 = 8^2 - 9 - 1 = 64 - 10 = 54 = 2 \pmod{13}
y3=s(x1x3)y1=8(92)7=877=49=10(mod13)y_3 = s(x_1 - x_3) - y_1 = 8(9 - 2) - 7 = 8 \cdot 7 - 7 = 49 = 10 \pmod{13}
P+Q=(9,7)+(1,8)=(2,10)=R\therefore P + Q = (9, 7) + (1, 8) = (2, 10) = R

타원 곡선 덧셈은
ECC
(Elliptic Curve Cryptography)에서 사용되는 기본 연산이다.

🚀

타원 곡선 위의 두 배 연산 (Doubling on Elliptic Curve Points) 🔗

타원곡선 위의 점 P=(x1,y1)P = (x_1, y_1)에 대해 2P=R=(x3,y3)2P = R = (x_3, y_3)를 계산하는 방법
👍
x3=s22x1x_3 = s^2 - 2x_1
y3=s(x1x3)y1y_3 = s(x_1 - x_3) - y_1
여기서 기울기 s=3x12+A2y1s = \frac{3x_1^2 + A}{2y_1}이다.

예시 (타원곡선 위의 두 배 연산) 🔗

E:Y2=X3+3X+8  over  F13E : Y^2 = X^3 + 3X + 8 \;\text{over}\; \mathbb{F}_{13}
E(F13)E(\mathbb{F}_{13})에서 점 P=(9,7)P = (9, 7)가 주어졌을 때,
s=392+327=243+314=24614=11=1s = \frac{3 \cdot 9^2 + 3}{2 \cdot 7} = \frac{243 + 3}{14} = \frac{246}{14} = \frac{-1}{1} = -1
(246=1(mod13),14=1(mod13))(\because 246 = -1 \pmod{13}, 14 = 1 \pmod{13})
x3=s22x1=(1)229=118=17=4=9(mod13)x_3 = s^2 - 2x_1 = (-1)^2 - 2 \cdot 9 = 1 - 18 = -17 = -4 = 9 \pmod{13}
y3=s(x1x3)y1=1(99)7=07=7=6(mod13)y_3 = s(x_1 - x_3) - y_1 = -1(9 - 9) - 7 = 0 - 7 = -7 = 6 \pmod{13}
2P=(9,7)+(9,7)=(9,6)=R\therefore 2P = (9, 7) + (9, 7) = (9, 6) = R

🚀

타원 곡선 위의 스칼라 곱셈 (Scalar Multiplication on Elliptic Curve Points) 🔗

모듈러 거듭제곱을 위한 알고리즘을 고려해야 함

예시 (모듈러 거듭제곱을 위한 알고리즘) 🔗

Right to Left Algorithm
PP와 양의 정수 x=(xl1,xl2,,x0)2x = (x_{l-1}, x_{l-2}, \cdots, x_0)_2가 주어졌을 때,
R = O, T = P 
for i from 0 to l-1 do
	if x_i = 1 then
		R = R + T
	T = 2T
end for
return R

🚀

타원 곡선의 장점 (Advantages of Elliptic Curve) 🔗


🚀

타원 곡선 DSA: ECDSA (Elliptic Curve Digital Signature Algorithm) 🔗

키 생성 (ECDSA Key Generation) 🔗

  1. 타원 곡선 EE를 사용하여 다음을 선택한다.
    • 모듈러스 pp
    • 타원 곡선 계수 aabb
    • 소수 차수 qq의 순환 그룹을 생성하는 점 PP (생성자)
  2. ZqZ_q^*에서 임의의 정수 xx를 선택한 후 Q=xPQ = xP를 계산한다.
  3. 공개 키 pk=(p,a,b,q,P,Q)pk = (p, a, b, q, P, Q), 개인 키 sk=xsk = x를 반환한다.

서명 (ECDSA Signature) 🔗

개인 키 sk=xsk = x와 메시지 MM이 주어졌을 때
  1. ZqZ_q^*에서 임의의 kk를 선택한다.
  2. R=kPR = kP를 계산한 후 r=xRr = x_R(점 RRxx 좌표)를 둔다.
  3. s=k1(H(M)+xr)(modq)s = k^{-1}(H(M) + xr) \pmod{q}를 계산한다.
  4. 서명 σ=(M,(r,s))\sigma = (M, (r, s))를 반환한다.

검증 (ECDSA Signature Verification) 🔗

공개 키 pk=(p,a,b,q,P,Q)pk = (p, a, b, q, P, Q)와 메시지 MM에 대한 서명 σ=(M,(r,s))\sigma = (M, (r, s))가 주어졌을 때
  1. w=s1(modq)w = s^{-1} \pmod{q}를 계산한다.
  2. u1=H(M)w(modq)u_1 = H(M)w \pmod{q}u2=rw(modq)u_2 = rw \pmod{q}를 계산한다.
  3. R=u1P+u2QR = u_1P + u_2Q를 계산한다.
  4. r=?xR(modq)r \stackrel{?}{=} x_R \pmod{q}를 확인한다. 이 조건이 성립하면 1을 반환하고, 그렇지 않으면 0을 반환한다.

정확성 (ECDSA Signature correctness) 🔗

R=u1P+u2Q=(u1+u2x)P=(w(H(M)+xr))PR = u_1P + u_2Q = (u_1 + u_2x)P = (w(H(M) + xr))P
=k(H(M)+xr)1(H(M)+xr)P=kP= k(H(M)+xr)^{-1}(H(M)+xr)P = kP
r=\Rightarrow r = kPkPxx 좌표 = RRxx 좌표(modq)\pmod{q}

🚀

추가> 타원 곡선 ElGamal (Elliptic Curve ElGamal) 🔗

키 생성 (EC ElGamal Key Generation) 🔗

  1. 타원 곡선 EE를 사용하여 다음을 선택한다.
    • 모듈러스 pp
    • 타원 곡선 계수 aabb
    • 소수 차수 qq의 순환 그룹을 생성하는 점 GG (생성자)
  2. ZqZ_q^*에서 임의의 정수 xx를 선택한 후 X=xGX = xG를 계산한다.
  3. 공개 키 pk=(p,a,b,q,G,X)pk = (p, a, b, q, G, X), 개인 키 sk=xsk = x를 반환한다.

암호화 (EC ElGamal Encryption) 🔗

공개 키 pk=(p,a,b,q,G,X)pk = (p, a, b, q, G, X)와 평문 MM이 주어졌을 때
  1. ZqZ_q^*에서 임의의 원소 rr를 선택한다.
  2. C1=rGC_1 = rG, C2=M+rXC_2 = M + rX를 계산한다.
  3. 암호문 C=(C1,C2)C = (C_1, C_2)를 반환한다.

복호화 (EC ElGamal Decryption) 🔗

개인 키 sk=xsk = x와 암호문 C=(C1,C2)C = (C_1, C_2)가 주어졌을 때
  1. M=C2xC1M = C_2 - xC_1를 계산한다.(=M+rXx(rG)=M+rXrX= M + rX - x(rG) = M + rX - rX)
  2. 평문 MM을 반환한다.