도구스개발

엘가말 암호 계산기

디피-헬만과 같은 이산로그 문제에 기대는 공개키 암호로, 작은 소수로 키 생성·암호화·복호화 과정을 직접 계산해 보여줍니다.

공개 파라미터 · 비밀키

평문 · 무작위값

공개키 h = g^x mod p8
암호문 c1 = g^k mod p10
암호문 c2 = m·h^k mod p14
복호화 결과10 — 평문과 일치
무작위값 k를 바꾸면 같은 평문이라도 암호문 (c1, c2)이 달라집니다(확률적 암호) — 다만 어느 k를 쓰든 비밀키 x로 복호화하면 항상 같은 평문이 나옵니다. 학습용 예시라 작은 소수를 씁니다.

사용 방법

  1. 1소수 p, 생성원 g, 비밀키 x를 정해 공개키 h를 만듭니다.
  2. 2평문 m과 무작위값 k를 정해 암호문 (c1, c2)를 계산합니다.
  3. 3비밀키로 복호화한 결과가 원래 평문과 같은지 확인합니다.

자주 묻는 질문

공개키는 소수 p, 생성원 g, h=g^x mod p(x는 비밀키) 세 값입니다. 평문 m을 암호화할 때마다 무작위값 k를 새로 뽑아 c1=g^k mod p, c2=m·h^k mod p 두 숫자를 만듭니다. 복호화는 s=c1^x mod p를 구한 뒤 그 모듈러 역원을 c2에 곱합니다.

RSA는 같은 평문을 같은 키로 암호화하면 항상 같은 암호문이 나오는 결정적(deterministic) 암호입니다. 엘가말은 암호화할 때마다 무작위값 k를 새로 뽑기 때문에 같은 평문이라도 매번 다른 암호문이 나오는 확률적(probabilistic) 암호입니다.

둘 다 "이산로그 문제(g^x mod p를 알아도 x를 구하기 어렵다)"의 어려움에 기댑니다. 디피-헬만은 두 사람이 공유 비밀을 만드는 데 쓰이고, 엘가말은 그 공유 비밀 구조를 그대로 암호화·복호화에 활용한 것으로 볼 수 있습니다.

c1은 무작위값 k를 이용해 만든 "일회용 힌트"이고, c2는 그 힌트와 공개키로 만든 임시 값을 평문에 곱한 결과입니다. 복호화하는 사람은 자신만 아는 비밀키 x로 c1에서 그 임시 값을 다시 계산해 c2에서 빼(나눠)낼 수 있습니다.

알아두면 좋은 점

  • p=23, g=5, x=6, m=10, k=3인 예제를 손으로 계산해(공개키 h=8, 암호문 (c1,c2)=(10,14), 복호화 결과 10) 대조 검증했습니다.
  • 같은 평문을 서로 다른 k로 암호화하면 암호문이 달라지지만 둘 다 올바르게 복호화되는지(확률적 암호의 핵심 성질) 확인했습니다.
  • 큰 수 연산에 BigInt를 씁니다. 실습·학습용으로 작은 소수를 예로 들었을 뿐, 실제 암호에는 훨씬 큰 소수가 필요합니다.

함께 보면 좋은 도구

마지막 검증: 2026년 9월 3일 · 결과는 참고용 추정치입니다.