학습 목표
Diffie-Hellman 키 교환을 정의한다.
중간자 공격(man-in-the-middle attack)을 이해한다.
Elgamal 암호시스템의 개요를 제시한다.
타원곡선 산술을 이해한다.
타원곡선 암호(ECC)의 개요를 제시한다.
비대칭 암호 기반 의사난수 생성 기법 두 가지를 설명한다.
10.1 Diffie-Hellman 키 교환
최초로 발표된 공개키 알고리즘(1976, Diffie & Hellman). 목적은 두 사용자가 대칭 암호에 사용할 비밀키를 안전하게 교환 하는 것이다. 알고리즘 자체는 비밀값의 교환에 한정되며, 그 효과는 이산대수(discrete logarithm) 계산의 어려움에 기반한다.
이산대수
소수 p p p 의 원시근(primitive root) α \alpha α 가 있을 때, α m o d p , α 2 m o d p , … , α p − 1 m o d p \alpha \bmod p,\; \alpha^2 \bmod p,\; \dots,\; \alpha^{p-1} \bmod p α mod p , α 2 mod p , … , α p − 1 mod p 는 1 1 1 부터 p − 1 p-1 p − 1 까지의 모든 정수를 한 번씩 생성한다.
임의의 정수 b b b 에 대해 b ≡ α i ( m o d p ) b \equiv \alpha^i \pmod{p} b ≡ α i ( mod p ) 인 유일한 i i i 를 b b b 의 이산대수 dlog α , p ( b ) \text{dlog}_{\alpha, p}(b) dlog α , p ( b ) 라 한다.
알고리즘
공개 파라미터: 소수 q q q , q q q 의 원시근 α \alpha α
A: 비밀 정수 X A < q X_A < q X A < q 를 랜덤 선택, 공개키 Y A = α X A m o d q Y_A = \alpha^{X_A} \bmod q Y A = α X A mod q 계산
B: 비밀 정수 X B < q X_B < q X B < q 를 랜덤 선택, 공개키 Y B = α X B m o d q Y_B = \alpha^{X_B} \bmod q Y B = α X B mod q 계산
A 계산: K = Y B X A m o d q K = Y_B^{X_A} \bmod q K = Y B X A mod q
B 계산: K = Y A X B m o d q K = Y_A^{X_B} \bmod q K = Y A X B mod q
두 계산의 결과가 동일함은 다음으로 증명된다:
K = ( Y B ) X A m o d q = ( α X B ) X A m o d q = α X A X B m o d q = ( Y A ) X B m o d q K = (Y_B)^{X_A} \bmod q = (\alpha^{X_B})^{X_A} \bmod q = \alpha^{X_A X_B} \bmod q = (Y_A)^{X_B} \bmod q K = ( Y B ) X A mod q = ( α X B ) X A mod q = α X A X B mod q = ( Y A ) X B mod q
공격자는 q q q , α \alpha α , Y A Y_A Y A , Y B Y_B Y B 만 알고 있으므로, 비밀키를 구하려면 이산대수 X B = dlog α , q ( Y B ) X_B = \text{dlog}_{\alpha,q}(Y_B) X B = dlog α , q ( Y B ) 를 계산해야 한다. 큰 소수에서는 이것이 실행 불가능 하다.
q = 353 , α = 3 , X A = 97 , X B = 233 q = 353, \quad \alpha = 3, \quad X_A = 97, \quad X_B = 233 q = 353 , α = 3 , X A = 97 , X B = 233
Y A = 3 97 m o d 353 = 40 , Y B = 3 233 m o d 353 = 248 Y_A = 3^{97} \bmod 353 = 40, \quad Y_B = 3^{233} \bmod 353 = 248 Y A = 3 97 mod 353 = 40 , Y B = 3 233 mod 353 = 248
K = 248 97 m o d 353 = 40 233 m o d 353 = 160 K = 248^{97} \bmod 353 = 40^{233} \bmod 353 = 160 K = 24 8 97 mod 353 = 4 0 233 mod 353 = 160
키 교환 프로토콜
일회성 교환: A가 X A X_A X A , Y A Y_A Y A 를 생성·전송, B가 응답 → 일회용 세션키 생성. q q q 와 α \alpha α 는 사전에 알려져 있거나 첫 메시지에 포함.
장기 공개키 디렉토리: 각 사용자가 장기 X i X_i X i 를 유지하고 Y i Y_i Y i 를 중앙 디렉토리에 공개. 누구든지 상대의 공개값으로 비밀키를 계산하여 암호화된 메시지 전송 가능. 기밀성과 일정 수준의 인증을 제공하지만, 재전송 공격은 방어하지 못한다.
중간자 공격 (Man-in-the-Middle Attack)
프로토콜이 참가자를 인증하지 않기 때문에 중간자 공격에 취약하다.
공격 절차:
Darth가 비밀키 X D 1 X_{D1} X D 1 , X D 2 X_{D2} X D 2 를 생성하고 공개키 Y D 1 Y_{D1} Y D 1 , Y D 2 Y_{D2} Y D 2 를 계산
Alice가 Y A Y_A Y A 를 Bob에게 전송 → Darth가 가로채고 Y D 1 Y_{D1} Y D 1 을 Bob에게 전달
Darth는 K 2 = Y A X D 2 m o d q K_2 = Y_A^{X_{D2}} \bmod q K 2 = Y A X D 2 mod q 계산 (Alice와의 공유키)
Bob이 Y B Y_B Y B 를 Alice에게 전송 → Darth가 가로채고 Y D 2 Y_{D2} Y D 2 를 Alice에게 전달
Darth는 K 1 = Y B X D 1 m o d q K_1 = Y_B^{X_{D1}} \bmod q K 1 = Y B X D 1 mod q 계산 (Bob과의 공유키)
결과: Alice-Darth는 K 2 K_2 K 2 , Darth-Bob은 K 1 K_1 K 1 을 공유. Darth는 모든 통신을 복호화·변조·재암호화 가능.
이 취약점은 전자서명과 공개키 인증서 (13·14장)를 통해 극복할 수 있다.
10.2 Elgamal 암호시스템
1984년 T. Elgamal이 발표한 이산대수 기반 공개키 방식으로, Diffie-Hellman과 밀접하게 관련된다. DSS(13장)와 S/MIME(19장) 등 여러 표준에서 사용된다.
키 생성
공개 파라미터: 소수 q q q , 원시근 α \alpha α
랜덤 정수 X A X_A X A 선택 (1 < X A < q − 1 1 < X_A < q - 1 1 < X A < q − 1 )
Y A = α X A m o d q Y_A = \alpha^{X_A} \bmod q Y A = α X A mod q 계산
개인키: X A X_A X A / 공개키: { q , α , Y A } \{q, \alpha, Y_A\} { q , α , Y A }
암호화 (B → A)
메시지 M M M 을 0 ≤ M ≤ q − 1 0 \le M \le q - 1 0 ≤ M ≤ q − 1 인 정수로 표현
랜덤 정수 k k k 선택 (1 ≤ k ≤ q − 1 1 \le k \le q - 1 1 ≤ k ≤ q − 1 )
일회용 키 K = Y A k m o d q K = Y_A^k \bmod q K = Y A k mod q 계산
암호문 생성:
C 1 = α k m o d q , C 2 = K ⋅ M m o d q C_1 = \alpha^k \bmod q, \quad C_2 = K \cdot M \bmod q C 1 = α k mod q , C 2 = K ⋅ M mod q
복호화 (A)
K = C 1 X A m o d q K = C_1^{X_A} \bmod q K = C 1 X A mod q 로 일회용 키 복원
M = C 2 ⋅ K − 1 m o d q M = C_2 \cdot K^{-1} \bmod q M = C 2 ⋅ K − 1 mod q
K = Y A k m o d q = ( α X A ) k m o d q = α k X A m o d q = ( C 1 ) X A m o d q K = Y_A^k \bmod q = (\alpha^{X_A})^k \bmod q = \alpha^{kX_A} \bmod q = (C_1)^{X_A} \bmod q K = Y A k mod q = ( α X A ) k mod q = α k X A mod q = ( C 1 ) X A mod q
따라서 복호화 시 동일한 K K K 를 복원할 수 있고, C 2 ⋅ K − 1 = K ⋅ M ⋅ K − 1 = M C_2 \cdot K^{-1} = K \cdot M \cdot K^{-1} = M C 2 ⋅ K − 1 = K ⋅ M ⋅ K − 1 = M 이다.
예시 (q = 19 q = 19 q = 19 , α = 10 \alpha = 10 α = 10 , X A = 5 X_A = 5 X A = 5 )
Y A = 10 5 m o d 19 = 3 , 공개키 = { 19 , 10 , 3 } Y_A = 10^5 \bmod 19 = 3, \quad \text{공개키} = \{19, 10, 3\} Y A = 1 0 5 mod 19 = 3 , 공개키 = { 19 , 10 , 3 }
M = 17 M = 17 M = 17 을 암호화 (k = 6 k = 6 k = 6 ):
K = 3 6 m o d 19 = 7 K = 3^6 \bmod 19 = 7 K = 3 6 mod 19 = 7
C 1 = 10 6 m o d 19 = 11 , C 2 = 7 × 17 m o d 19 = 5 C_1 = 10^6 \bmod 19 = 11, \quad C_2 = 7 \times 17 \bmod 19 = 5 C 1 = 1 0 6 mod 19 = 11 , C 2 = 7 × 17 mod 19 = 5
복호화:
K = 11 5 m o d 19 = 7 , K − 1 m o d 19 = 11 K = 11^5 \bmod 19 = 7, \quad K^{-1} \bmod 19 = 11 K = 1 1 5 mod 19 = 7 , K − 1 mod 19 = 11
M = 5 × 11 m o d 19 = 17 M = 5 \times 11 \bmod 19 = 17 M = 5 × 11 mod 19 = 17
같은 k k k 를 두 블록에 사용하면, 한 블록 M 1 M_1 M 1 을 알 때 다른 블록을 쉽게 복원할 수 있다:
M 2 = C 2 , 1 − 1 ⋅ C 2 , 2 ⋅ M 1 m o d q M_2 = C_{2,1}^{-1} \cdot C_{2,2} \cdot M_1 \bmod q M 2 = C 2 , 1 − 1 ⋅ C 2 , 2 ⋅ M 1 mod q
보안: 공격자가 개인키 X A X_A X A 를 복원하려면 X A = dlog α , q ( Y A ) X_A = \text{dlog}_{\alpha,q}(Y_A) X A = dlog α , q ( Y A ) 를 계산해야 한다. p p p 가 최소 300자릿수이고 q − 1 q - 1 q − 1 에 큰 소인수가 포함되면 안전하다.
10.3 타원곡선 산술
RSA의 키 길이가 보안 강화를 위해 계속 증가하면서 처리 부담이 커지고 있다. 이에 대한 대안으로 **타원곡선 암호(ECC)**가 도전하고 있다. ECC의 핵심 매력은 훨씬 작은 키 크기로 동등한 보안 을 제공한다는 점이다.
아벨 그룹 (Abelian Group) 복습
아벨 그룹 { G , ⋅ } \{G, \cdot\} { G , ⋅ } 은 다섯 가지 공리를 만족하는 집합과 이항 연산의 쌍이다:
(A1) 닫힘: a , b ∈ G ⇒ a ⋅ b ∈ G a, b \in G \Rightarrow a \cdot b \in G a , b ∈ G ⇒ a ⋅ b ∈ G
(A2) 결합법칙: a ⋅ ( b ⋅ c ) = ( a ⋅ b ) ⋅ c a \cdot (b \cdot c) = (a \cdot b) \cdot c a ⋅ ( b ⋅ c ) = ( a ⋅ b ) ⋅ c
(A3) 항등원: ∃ e ∈ G \exists\, e \in G ∃ e ∈ G , a ⋅ e = a a \cdot e = a a ⋅ e = a
(A4) 역원: 각 a a a 에 대해 a ′ ∈ G a' \in G a ′ ∈ G , a ⋅ a ′ = e a \cdot a' = e a ⋅ a ′ = e
(A5) 교환법칙: a ⋅ b = b ⋅ a a \cdot b = b \cdot a a ⋅ b = b ⋅ a
Diffie-Hellman은 Z p ∗ \mathbb{Z}_p^* Z p ∗ 위의 곱셈 그룹을 사용하고, ECC는 타원곡선 위의 덧셈 그룹을 사용한다. DH에서 a k m o d q a^k \bmod q a k mod q 에 대응하는 ECC 연산은 k ⋅ P = P + P + ⋯ + P ⏟ k 번 k \cdot P = \underbrace{P + P + \cdots + P}_{k\text{번}} k ⋅ P = k 번 P + P + ⋯ + P 이다.
실수 위의 타원곡선
타원곡선은 (타원이 아니라) 다음과 같은 3차 방정식 으로 정의된다:
y 2 = x 3 + a x + b y^2 = x^3 + ax + b y 2 = x 3 + a x + b
여기에 무한원점(point at infinity) O \mathcal{O} O 를 포함한 점의 집합 E ( a , b ) E(a, b) E ( a , b ) 를 정의한다. 다음 조건을 만족하면 그룹이 형성된다:
4 a 3 + 27 b 2 ≠ 0 4a^3 + 27b^2 \neq 0 4 a 3 + 27 b 2 = 0
덧셈 규칙 (기하학적)
O \mathcal{O} O 는 항등원: P + O = P P + \mathcal{O} = P P + O = P
P = ( x , y ) P = (x, y) P = ( x , y ) 의 역원은 − P = ( x , − y ) -P = (x, -y) − P = ( x , − y ) , P + ( − P ) = O P + (-P) = \mathcal{O} P + ( − P ) = O
두 점 P P P , Q Q Q 의 덧셈: P P P 와 Q Q Q 를 잇는 직선의 세 번째 교점 R R R 에 대해 P + Q = − R P + Q = -R P + Q = − R (x축 대칭)
P P P 와 − P -P − P (동일 x좌표, 수직선): P + ( − P ) = O P + (-P) = \mathcal{O} P + ( − P ) = O
점의 배가: Q Q Q 에서의 접선의 다른 교점 S S S 에 대해 2 Q = − S 2Q = -S 2 Q = − S
덧셈 규칙 (대수적)
서로 다른 두 점 P = ( x P , y P ) P = (x_P, y_P) P = ( x P , y P ) , Q = ( x Q , y Q ) Q = (x_Q, y_Q) Q = ( x Q , y Q ) 에 대해 R = P + Q = ( x R , y R ) R = P + Q = (x_R, y_R) R = P + Q = ( x R , y R ) :
λ = y Q − y P x Q − x P \lambda = \frac{y_Q - y_P}{x_Q - x_P} λ = x Q − x P y Q − y P
x R = λ 2 − x P − x Q , y R = − y P + λ ( x P − x R ) x_R = \lambda^2 - x_P - x_Q, \quad y_R = -y_P + \lambda(x_P - x_R) x R = λ 2 − x P − x Q , y R = − y P + λ ( x P − x R )
점의 배가 P + P = 2 P P + P = 2P P + P = 2 P (y P ≠ 0 y_P \neq 0 y P = 0 ):
λ = 3 x P 2 + a 2 y P \lambda = \frac{3x_P^2 + a}{2y_P} λ = 2 y P 3 x P 2 + a
x R = λ 2 − 2 x P , y R = λ ( x P − x R ) − y P x_R = \lambda^2 - 2x_P, \quad y_R = \lambda(x_P - x_R) - y_P x R = λ 2 − 2 x P , y R = λ ( x P − x R ) − y P
Z p \mathbb{Z}_p Z p 위의 타원곡선
변수와 계수를 Z p \mathbb{Z}_p Z p 로 제한:
y 2 m o d p = ( x 3 + a x + b ) m o d p y^2 \bmod p = (x^3 + ax + b) \bmod p y 2 mod p = ( x 3 + a x + b ) mod p
그룹 형성 조건: ( 4 a 3 + 27 b 2 ) m o d p ≠ 0 (4a^3 + 27b^2) \bmod p \neq 0 ( 4 a 3 + 27 b 2 ) mod p = 0
Z p \mathbb{Z}_p Z p 위에서의 덧셈 규칙은 실수 위와 동일한 대수적 형태를 따르되, 모든 연산을 m o d p \bmod p mod p 로 수행하고 나눗셈은 모듈러 역원 으로 대체한다.
예시: E 23 ( 1 , 1 ) E_{23}(1, 1) E 23 ( 1 , 1 ) 에서 P = ( 3 , 10 ) P = (3, 10) P = ( 3 , 10 ) , Q = ( 9 , 7 ) Q = (9, 7) Q = ( 9 , 7 )
λ = 7 − 10 9 − 3 m o d 23 = − 3 6 m o d 23 = − 1 2 m o d 23 = 11 \lambda = \frac{7 - 10}{9 - 3} \bmod 23 = \frac{-3}{6} \bmod 23 = \frac{-1}{2} \bmod 23 = 11 λ = 9 − 3 7 − 10 mod 23 = 6 − 3 mod 23 = 2 − 1 mod 23 = 11
x R = ( 11 2 − 3 − 9 ) m o d 23 = 109 m o d 23 = 17 x_R = (11^2 - 3 - 9) \bmod 23 = 109 \bmod 23 = 17 x R = ( 1 1 2 − 3 − 9 ) mod 23 = 109 mod 23 = 17
y R = ( 11 ( 3 − 17 ) − 10 ) m o d 23 = − 164 m o d 23 = 20 y_R = (11(3 - 17) - 10) \bmod 23 = -164 \bmod 23 = 20 y R = ( 11 ( 3 − 17 ) − 10 ) mod 23 = − 164 mod 23 = 20
P + Q = ( 17 , 20 ) P + Q = (17, 20) P + Q = ( 17 , 20 )
점의 수 N N N 은 다음 범위에 있다:
p + 1 − 2 p ≤ N ≤ p + 1 + 2 p p + 1 - 2\sqrt{p} \le N \le p + 1 + 2\sqrt{p} p + 1 − 2 p ≤ N ≤ p + 1 + 2 p
G F ( 2 m ) GF(2^m) GF ( 2 m ) 위의 타원곡선
이 경우 사용되는 방정식 형태가 다르다:
y 2 + x y = x 3 + a x 2 + b y^2 + xy = x^3 + ax^2 + b y 2 + x y = x 3 + a x 2 + b
그룹 형성 조건: b ≠ 0 b \neq 0 b = 0 . 하드웨어 구현에 적합하며 (비트 연산만으로 강력한 암호시스템 구축 가능), 소수 곡선(Z p \mathbb{Z}_p Z p )은 소프트웨어에 적합하다.
10.4 타원곡선 암호 (ECC)
타원곡선 이산대수 문제 (ECDLP)
Q = k P ( Q , P ∈ E q ( a , b ) , k < q ) Q = kP \quad (Q, P \in E_q(a,b),\; k < q) Q = k P ( Q , P ∈ E q ( a , b ) , k < q )
k k k 와 P P P 가 주어졌을 때 Q Q Q 를 계산하는 것은 쉽지만 , Q Q Q 와 P P P 가 주어졌을 때 k k k 를 결정하는 것은 어렵다. 이것이 ECC 보안의 근거이며, 가장 빠른 알려진 기법은 Pollard rho 방법 이다.
ECC 키 크기 비교 (NIST SP 800-57)
대칭키 (비트) DH/DSA ( L , N ) (L, N) ( L , N ) RSA (비트) ECC (비트) 80 1024, 160 1024 160–223 112 2048, 224 2048 224–255 128 3072, 256 3072 256–383 192 7680, 384 7680 384–511 256 15360, 512 15360 512+
SP 800-57은 2030년까지 RSA 3072비트, ECC 256비트 이상을 권장한다. 동일 키 길이에서 ECC와 RSA의 계산 비용은 유사하므로, ECC는 더 짧은 키로 계산적 이점 을 가진다.
ECC Diffie-Hellman 키 교환
공통 파라미터: 타원곡선 E q ( a , b ) E_q(a, b) E q ( a , b ) , 베이스 포인트 G G G (큰 위수 n n n )
A: 비밀 n A < n n_A < n n A < n 선택, 공개키 P A = n A × G P_A = n_A \times G P A = n A × G 계산
B: 비밀 n B < n n_B < n n B < n 선택, 공개키 P B = n B × G P_B = n_B \times G P B = n B × G 계산
공유 비밀:
K = n A × P B = n A × ( n B × G ) = n B × ( n A × G ) = n B × P A K = n_A \times P_B = n_A \times (n_B \times G) = n_B \times (n_A \times G) = n_B \times P_A K = n A × P B = n A × ( n B × G ) = n B × ( n A × G ) = n B × P A
p = 211 , E p ( 0 , − 4 ) : y 2 = x 3 − 4 , G = ( 2 , 2 ) , 240 G = O p = 211, \quad E_p(0, -4): y^2 = x^3 - 4, \quad G = (2, 2), \quad 240G = \mathcal{O} p = 211 , E p ( 0 , − 4 ) : y 2 = x 3 − 4 , G = ( 2 , 2 ) , 240 G = O
n A = 121 → P A = 121 ⋅ ( 2 , 2 ) = ( 115 , 48 ) n_A = 121 \;\to\; P_A = 121 \cdot (2,2) = (115, 48) n A = 121 → P A = 121 ⋅ ( 2 , 2 ) = ( 115 , 48 )
n B = 203 → P B = 203 ⋅ ( 2 , 2 ) = ( 130 , 203 ) n_B = 203 \;\to\; P_B = 203 \cdot (2,2) = (130, 203) n B = 203 → P B = 203 ⋅ ( 2 , 2 ) = ( 130 , 203 )
K = 121 ⋅ ( 130 , 203 ) = 203 ⋅ ( 115 , 48 ) = ( 161 , 69 ) K = 121 \cdot (130, 203) = 203 \cdot (115, 48) = (161, 69) K = 121 ⋅ ( 130 , 203 ) = 203 ⋅ ( 115 , 48 ) = ( 161 , 69 )
공유 비밀키는 좌표 쌍이다. 대칭 암호의 세션키로 사용하려면 x x x 좌표 등에서 단일 값을 추출한다.
ECC 암호화/복호화
각 사용자 A는 개인키 n A n_A n A 를 선택하고 공개키 P A = n A × G P_A = n_A \times G P A = n A × G 를 생성한다.
암호화 (A → B): 메시지를 타원곡선 점 P m P_m P m 으로 인코딩한 뒤, 랜덤 k k k 를 선택:
C m = { k G , P m + k P B } C_m = \{kG, \;\; P_m + kP_B\} C m = { k G , P m + k P B }
복호화 (B): 첫 번째 점에 자신의 개인키를 곱하여 마스크를 제거:
P m + k P B − n B ( k G ) = P m + k ( n B G ) − n B ( k G ) = P m P_m + kP_B - n_B(kG) = P_m + k(n_BG) - n_B(kG) = P_m P m + k P B − n B ( k G ) = P m + k ( n B G ) − n B ( k G ) = P m
A는 k P B kP_B k P B 를 더해 메시지를 마스킹한다. k k k 를 아는 사람은 A뿐이므로 공격자가 마스크를 제거할 수 없다. 동시에 A는 "단서" k G kG k G 를 포함시켜, 개인키 n B n_B n B 를 아는 B만이 n B ( k G ) = k P B n_B(kG) = kP_B n B ( k G ) = k P B 를 계산하여 마스크를 제거할 수 있게 한다.
q = 257 , E 257 ( 0 , − 4 ) : y 2 = x 3 − 4 , G = ( 2 , 2 ) q = 257, \quad E_{257}(0, -4): y^2 = x^3 - 4, \quad G = (2, 2) q = 257 , E 257 ( 0 , − 4 ) : y 2 = x 3 − 4 , G = ( 2 , 2 )
n B = 101 , P B = 101 ⋅ ( 2 , 2 ) = ( 197 , 167 ) n_B = 101, \quad P_B = 101 \cdot (2,2) = (197, 167) n B = 101 , P B = 101 ⋅ ( 2 , 2 ) = ( 197 , 167 )
P m = ( 112 , 26 ) , k = 41 P_m = (112, 26), \quad k = 41 P m = ( 112 , 26 ) , k = 41
k G = 41 ⋅ ( 2 , 2 ) = ( 136 , 128 ) kG = 41 \cdot (2,2) = (136, 128) k G = 41 ⋅ ( 2 , 2 ) = ( 136 , 128 )
k P B = 41 ⋅ ( 197 , 167 ) = ( 68 , 84 ) kP_B = 41 \cdot (197, 167) = (68, 84) k P B = 41 ⋅ ( 197 , 167 ) = ( 68 , 84 )
C m = { ( 136 , 128 ) , ( 112 , 26 ) + ( 68 , 84 ) } = { ( 136 , 128 ) , ( 246 , 174 ) } C_m = \{(136, 128),\;\; (112,26) + (68,84)\} = \{(136, 128),\;\; (246, 174)\} C m = {( 136 , 128 ) , ( 112 , 26 ) + ( 68 , 84 )} = {( 136 , 128 ) , ( 246 , 174 )}
복호화: ( 246 , 174 ) − 101 ⋅ ( 136 , 128 ) = ( 246 , 174 ) − ( 68 , 84 ) = ( 112 , 26 ) = P m (246, 174) - 101 \cdot (136, 128) = (246, 174) - (68, 84) = (112, 26) = P_m ( 246 , 174 ) − 101 ⋅ ( 136 , 128 ) = ( 246 , 174 ) − ( 68 , 84 ) = ( 112 , 26 ) = P m
10.5 비대칭 암호 기반 의사난수 생성
비대칭 암호 알고리즘은 겉보기에 랜덤한 출력을 생성하므로 PRNG의 기반이 될 수 있다. 대칭 알고리즘보다 느리기 때문에, 개방형 비트 스트림이 아니라 짧은 의사난수 비트 시퀀스를 생성하는 PRF 용도로 사용된다.
Micali-Schnorr PRNG (RSA 기반)
ANSI X9.82, ISO 18031에 권장. OFB 모드와 유사한 구조에서 RSA를 사용한다. 출력을 두 부분으로 나누어 **순방향 예측 불가능성(forward unpredictability)**을 확보한다.
절차:
y i = x i − 1 e m o d n y_i = x_{i-1}^e \bmod n y i = x i − 1 e mod n
x i x_i x i = y i y_i y i 의 상위 r r r 비트 (다음 반복의 입력)
z i z_i z i = y i y_i y i 의 하위 k k k 비트 (의사난수 출력)
r + k = N r + k = N r + k = N (N N N 은 n n n 의 비트 길이). 파라미터 조건:
조건 목적 n = p q n = pq n = pq (두 소수의 곱)RSA 수준의 암호 강도 gcd ( e , ϕ ( n ) ) = 1 \gcd(e, \phi(n)) = 1 g cd( e , ϕ ( n )) = 1 s ↦ s e m o d n s \mapsto s^e \bmod n s ↦ s e mod n 매핑이 일대일r ⋅ e ≥ 2 N r \cdot e \ge 2^N r ⋅ e ≥ 2 N 완전한 모듈러 축소 보장 r ≥ 2 × strength r \ge 2 \times \text{strength} r ≥ 2 × strength 암호 공격 방어
예: e = 3 e = 3 e = 3 , N = 1024 N = 1024 N = 1024 이면 3 r > 1024 3r > 1024 3 r > 1024 이므로 r ≥ 683 r \ge 683 r ≥ 683 , k = 341 k = 341 k = 341 비트가 매 지수 연산마다 생성된다.
Dual EC PRNG (ECC 기반)
NSA가 개발. 타원곡선 위의 알려진 두 점 P P P , Q Q Q 를 사용한다:
s i = x ( s i − 1 ⋅ P ) , r i = lsb 240 ( x ( s i ⋅ Q ) ) s_i = x(s_{i-1} \cdot P), \quad r_i = \text{lsb}_{240}(x(s_i \cdot Q)) s i = x ( s i − 1 ⋅ P ) , r i = lsb 240 ( x ( s i ⋅ Q ))
이 알고리즘의 보안성과 효율성에 대한 논란 이 있다. ECC를 이미 구현했지만 다른 PRNG 알고리즘이 없는 시스템에서만 사용 동기가 있다.
주요 용어
한글 영문 아벨 그룹 abelian group 이진 곡선 binary curve 3차 방정식 cubic equation Diffie-Hellman 키 교환 Diffie-Hellman key exchange 이산대수 discrete logarithm 타원곡선 elliptic curve 타원곡선 산술 elliptic curve arithmetic 타원곡선 암호 elliptic curve cryptography (ECC) 유한체 finite field 중간자 공격 man-in-the-middle attack Micali-Schnorr Micali-Schnorr 소수 곡선 prime curve 원시근 primitive root 무한원점 zero point