ElGamal — 이산 대수 기반 공개키 암호

RSA가 소인수분해의 어려움 위에 서있다면, ElGamal은 이산 대수 문제(DLP) 위에 서있다. 두 시스템은 서로 다른 수학적 어려움을 활용하지만, 결정적 차이가 하나 있다 — ElGamal은 암호화할 때마다 다른 암호문을 생성한다. 이것이 단순한 특성을 넘어 의미론적 안전성(IND-CPA)의 핵심이 된다.

이 글의 주요 개념
  • 보안 근거: 이산 대수 문제 (DLP) — g^x mod p에서 x를 구하는 것은 지수적으로 어렵다
  • 키 생성: 비밀키 x, 공개키 h = g^x mod p
  • 암호화: 랜덤 k 선택 → 암호문 (A, B) = (g^k, m·h^k) mod p
  • 복호화: 공유 비밀 s = A^x, 평문 m = B·s⁻¹ mod p
  • 확률적 암호화: 같은 평문도 k가 달라지면 다른 암호문 → IND-CPA 만족

RSA와의 차이: 왜 다른 어려움이 필요한가

RSA는 n=pqn = pq 소인수분해의 어려움에 의존한다. 이 문제는 검증된 어려움이지만, 같은 평문을 항상 같은 암호문으로 변환한다는 결정론적(deterministic) 특성이 있다. 공격자가 후보 평문을 암호화해 비교하는 선택 평문 공격(CPA)에 취약하다.

ElGamal은 이산 대수 문제(Discrete Logarithm Problem, DLP) 라는 독립적인 어려움을 사용한다. 그리고 암호화 과정에 랜덤성을 도입해 동일한 평문도 매번 다른 암호문으로 변환된다.

이산 대수 문제 (DLP)

소수 pp, 생성원(generator) gZpg \in \mathbb{Z}_p^*, 그리고 h=gxmodph = g^x \bmod p가 주어졌을 때, xx를 구하여라.

정방향 계산 kgkmodpk \to g^k \bmod p는 Square-and-Multiply로 O(logk)O(\log k)에 가능하다. 반면 역방향 gkmodpkg^k \bmod p \to k를 구하는 알고리즘은 아직 다항식 시간으로 알려져 있지 않다. 가장 빠른 알고리즘(Number Field Sieve)조차 준지수 시간 L[1/3]L[1/3]이 필요하다.

이산 대수 문제 — p=11, g=2에서 ℤ₁₁* 순환과 DLP

생성원(Generator): 소수 pp에 대해 gZpg \in \mathbb{Z}_p^*생성원 이라는 것은 gg의 거듭제곱이 Zp\mathbb{Z}_p^*의 모든 원소를 순환한다는 의미다.

{g0,g1,g2,,gp2}=Zp(mod p)\{g^0, g^1, g^2, \ldots, g^{p-2}\} = \mathbb{Z}_p^* \quad (\bmod\ p)

p=11p = 11, g=2g = 2이면 {1,2,4,8,5,10,9,7,3,6}=Z11\{1, 2, 4, 8, 5, 10, 9, 7, 3, 6\} = \mathbb{Z}_{11}^*으로 10개 원소 전부를 생성한다. 페르마의 소정리에 의해 gp11(modp)g^{p-1} \equiv 1 \pmod{p}이므로, 지수는 주기 p1p-1로 순환한다.

ElGamal 설정

공개 파라미터: 큰 소수 pp, Zp\mathbb{Z}_p^*의 생성원 gg

키 생성 (수신자 Alice):

  1. 비밀키 xx1xp21 \leq x \leq p-2 범위에서 무작위 선택
  2. h=gxmodph = g^x \bmod p 계산
  3. 공개키: (p, g, h)(p,\ g,\ h) · 개인키: xx

암호화 (송신자 Bob):

  1. 임시 비밀(ephemeral key) kk1kp21 \leq k \leq p-2 범위에서 무작위 선택
  2. A=gkmodpA = g^k \bmod p
  3. B=mhkmodpB = m \cdot h^k \bmod p
  4. 암호문: (A, B)(A,\ B)

복호화 (수신자 Alice):

  1. 공유 비밀 s=Axmodps = A^x \bmod p 계산
  2. ss의 모듈러 역원 s1modps^{-1} \bmod p 계산 (확장 유클리드 알고리즘)
  3. 복원: m=Bs1modpm = B \cdot s^{-1} \bmod p

ElGamal 암복호화 흐름 — p=11, g=2 수치 예시

복호화 정확성 증명

Bs1B \cdot s^{-1}mm을 복원하는가.

s=Ax=(gk)x=gkx(modp)s = A^x = (g^k)^x = g^{kx} \pmod{p} hk=(gx)k=gxk(modp)h^k = (g^x)^k = g^{xk} \pmod{p}

따라서 s=hks = h^k이다. BB의 정의에 의해

Bs1=mhk(hk)1=m(modp)B \cdot s^{-1} = m \cdot h^k \cdot (h^k)^{-1} = m \pmod{p} \quad \checkmark

핵심은 Alice와 Bob이 각자 독립적으로 동일한 공유 비밀 gkxmodpg^{kx} \bmod p 를 계산한다는 것이다.

  • Bob: hk=(gx)kh^k = (g^x)^k — Alice의 공개키 hh와 자신의 임시 키 kk 사용
  • Alice: Ax=(gk)xA^x = (g^k)^x — Bob이 보낸 AA와 자신의 비밀키 xx 사용

이는 Diffie-Hellman 키 교환 의 직접적인 응용이다. ElGamal 암호화는 DH 키 교환에 메시지 마스킹(mhkm \cdot h^k)을 결합한 구조이다.

보안 근거: CDH 가정

ElGamal의 보안은 계산적 Diffie-Hellman(CDH) 가정 에 기반한다.

gg, gxg^x, gkg^k 가 주어졌을 때, gxkg^{xk}를 계산하는 다항식 시간 알고리즘이 존재하지 않는다.

공격자가 암호문 (A,B)=(gk,mhk)(A, B) = (g^k, m \cdot h^k)을 가로채더라도, 공유 비밀 gxkg^{xk}를 계산하지 못하면 mm을 복원할 수 없다. CDH를 풀려면 DLP를 풀어야 하므로, CDH \leq DLP — CDH가 쉬우면 DLP도 쉽다. 따라서 DLP가 어려운 한 CDH도 어렵다고 가정한다.

쉽게 말하면

CDH 가정은 "재료 두 개(g^x, g^k)를 알아도 완성품(g^{xk})을 만들 수 없다"는 것이다. 공격자는 Alice의 공개키와 Bob이 보낸 값을 모두 볼 수 있지만, 이 둘을 결합해서 공유 비밀을 계산하는 것이 수학적으로 어렵다. 이 어려움이 ElGamal 암호의 안전성을 보장한다.

확률적 암호화와 IND-CPA 안전성

ElGamal의 핵심 이점은 확률적(randomized) 암호화다.

같은 평문 mm도 임시 키 kk가 달라지면 완전히 다른 암호문이 생성된다.

확률적 암호화 — ElGamal vs RSA 의미론적 안전성 비교

이 성질은 IND-CPA(선택 평문 공격 하 식별 불가능성) 안전성을 가능하게 한다.

  • RSA(교과서적): mCm \to C가 결정론적. 공격자가 두 후보 m0,m1m_0, m_1을 직접 암호화해 도전 암호문 CC^*와 비교 가능.
  • ElGamal: m(A,B)m \to (A, B)가 확률적. 공격자가 mm을 암호화해도 kk가 달라 CC^*와 일치하지 않음.

단, 암호문이 두 개의 군 원소 (A,B)(A, B)로 구성되므로 평문 대비 암호문 크기가 2배 로 증가한다. RSA 대비 트레이드오프다.

ElGamal vs RSA 비교
  • 보안 근거: ElGamal — DLP (이산 대수), RSA — 소인수분해
  • 암호화 유형: ElGamal — 확률적 (IND-CPA), RSA — 결정론적 (교과서적)
  • 암호문 크기: ElGamal — 평문의 2배, RSA — 평문과 동일
  • 랜덤 비트 사용: ElGamal — 매번 필요, RSA — 불필요 (OAEP 적용 시 필요)

올바른 파라미터 선택

소수 pp 크기: DLP의 어려움은 pp의 크기에 비례한다. 현재 권장은 2048비트 이상. p1p-1이 큰 소인수를 포함해야 한다 (Pohlig-Hellman 공격 방지).

생성원 gg 선택: ggZp\mathbb{Z}_p^* 전체를 생성해야 한다. p1p-1의 소인수 qq에 대해 g(p1)/q≢1(modp)g^{(p-1)/q} \not\equiv 1 \pmod{p}를 확인한다.

임시 키 kk 관리: kk는 암호화마다 독립적으로 새로 선택해야 한다. 같은 kk를 두 번 사용하면 두 암호문 B1=m1hkB_1 = m_1 \cdot h^k, B2=m2hkB_2 = m_2 \cdot h^k에서 B1/B2=m1/m2B_1 / B_2 = m_1 / m_2가 노출된다.

핵심 정리
  • ElGamal은 DLP의 어려움에 기반한다. g^x를 알아도 x를 역산하는 다항식 알고리즘은 알려져 있지 않다.
  • 복호화 정확성은 A^x = h^k = g^(kx)라는 공유 비밀의 동등성에서 비롯된다. Diffie-Hellman 키 교환의 직접 응용이다.
  • 확률적 암호화 덕분에 동일 평문도 매번 다른 암호문을 생성한다 — IND-CPA 안전성의 핵심이다.
  • 임시 키 k를 재사용하면 즉시 평문 비율이 노출된다. k는 반드시 매번 새로 생성해야 한다.
다음 포스트

Diffie-Hellman — 공개 채널 위의 비밀 키 교환 — ElGamal의 수학적 기반이 된 Diffie-Hellman 키 교환 프로토콜, CDH/DDH 가정, 중간자 공격과 인증 문제, 전방향 안전성, 그리고 DH에서 ElGamal로의 확장까지 다룬다.

© 2026 XsQuare01. Powered by GitHub Pages.