디피-헬만
디피-헬만(Diffie-Hellman)은 최초의 공개키 암호 알고리즘으로서, 1976년, 미국 스탠퍼드 대학의 연구원 휫필드 디피(Whitfield Diffie)와 마틴 헬만(Martin Hellman)이 공동 개발하여 발표한 것이다.
개요[편집]
디피-헬만 알고리즘(Diffie-Hellman Algorithm)은 두 사용자가 사전에 어떤 비밀 교환 없이도 공통키를 교환하게 해주는 알고리즘이다. 디피-헬만 알고리즘의 핵심은 상대방의 공개키와 나의 공개키를 이용하여 계산을 하면 비밀키가 나온다는 것인데, 이후에 나와 상대방은 생성된 비밀키를 사용하여 데이터를 암호화한 후 전달하면 된다. 디피-헬만 알고리즘은 키 교환(Key exchange) 알고리즘으로 대칭키를 공유하는데 사용한다. 디피-헬만 알고리즘을 기반으로 하는 디피-헬만 키교환은 가장 기초가 되는 암호학적 통신 방법을 만들었으며 RSA 암호화 알고리즘의 바탕이 되기도 했다.[1] 하지만 이는 암호화나 전자서명을 위한 것은 아니다.[2]
등장 배경[편집]
정보의 비밀 유지가 중요해지기 시작하면서 암호학이 발전하기 시작하였다. 암호학이 발달함에 따라 여러 가지 암호화 방식과 암호 알고리즘을 만들어내기 시작하였다. 디피-헬만 알고리즘이 개발되기 이전까지는 대칭키 암호 알고리즘(symmetric-key algorithm)을 이용했다. 하지만 대칭키 암호 알고리즘의 문제점이 발견되어 이를 해결하기 위해 하나의 금고에 두 개의 열쇠를 쓰는 방법과도 같은 디피-헬만 알고리즘이 개발되었다.[3]
암호학은 비밀을 서로 공유하기로 한 사람들만이 키를 이용해 데이터를 암호화와 복호화하는 방향으로 발전했다. 초기에는 이 과정에서 사용되는 암호와 키와 복호화 키가 서로 같은 방식으로 발전했는데, 이를 대칭키 암호화라고 한다. 하지만 이 대칭키 암호 알고리즘의 경우에는 암호키의 유출 가능성이 문제였고, 암호키가 유출될 경우 모든 통신이 노출된다. 한 번 암호키가 노출되면 이후에 주고받을 암호키도 노출되기 때문에 통신에 있어 매우 치명적이다. 이러한 문제점을 보완하기 위해 디피-헬만 알고리즘이 개발되었다.
특징[편집]
동작 원리[편집]
- 공개적으로 교환할 발생기(generator)를 생성한다. (p는 소수, g는 생성자)
- A는 개인키 a를 이용하여 g^a mod p를 생성한다. (여기서 mod는 나눗셈의 나머지를 구하는 연산이다.)
- B는 개인키 b를 이용하여 g^b mod p를 생성한다.
- A는 B에게 g^a mod p를 보내고 B는 A에게 g^b mod p를 보낸다.
- A는 자신의 개인키 a를 이용하여 g^ab mod p를 생성하고 B는 자신의 개인키 b를 이용하여 g^ab mod p를 생성한다.
- A와 B는 새롭게 생성된 키를 대칭키(비밀키)로 이용한다. (A와 B가 교환하여 결합한 값이 서로 같다는 것을 확인한다.)
- 이때 A와 B 사이에서 데이터를 가로챈 공격자는 가로챈 값들로 g^ab mod p를 만들 수 없다. 공격자는 g^a+b mod p밖에 만들지 못한다.
장단점[편집]
- 장점 : 디피-헬만 알고리즘은 이산 대수 문제의 어려움에 기반하고 있기 때문에 안전성이 유지된다는 장점이 있다. 디피-헬만 알고리즘은 대칭키를 비밀스럽게 생성할 수 있는데, 비밀키를 필요할 때마다 다르게 생성하여 비밀키 보관에 따른 노출 위험성이 작아진다.
- 단점 : 디피-헬만은 중간자 공격에 취약하고, 상대방에 대한 인증 기능이 없다는 단점이 있다. 따라서 공격자에 의한 공개키의 변조를 방지하기 위해 전자서명된 공개키를 상호 교환하는 인증된 디피-헬만 키교환을 사용해야 한다.
취약점과 해결방안[편집]
- 취약점 : 디피-헬만 키교환 프로토콜을 사용하는 TLS 연결에 로그잼(Logjam)이라는 TLS 취약점이 발견됐다. 취약한 디피-헬만 연결의 오프라인 암호해독이 가능하거나, DHE_EXPORT 다운그레이드 및 TLS False Start 확장 오프라인 해독 공격, DHE)EXPORT 다운그레이드 및 중간자가 서버 자격을 변경하는 등의 공격 시나리오를 가질 수 있다. 이 취약점을 통해 암호화 된 통신을 해독하여 도감청이 가능해지는데, 미국 국가안전보장국(NSA)에서는 약 3,000개의 CPU로 1024비트의 암호화된 연결을 해독해 낼 수 있다고 한다.[4]
- 해결 방안 : 디피-헬만의 취약점을 해결하기 위해서는 다음과 같은 방법이 제시된다.[4]
- OpenSSL 버전 업데이트 : OpenSSL 1.0.2b 이상 1.0.1n 이상이면 관련 취약점의 회피가 가능하다. 이는 기존 DH 파라미터가 768비트보다 짧다면 핸드셰이크(handshake)를 거부하도록 하던 TLS 클라이언트에 대한 보호 기능이 1024비트로 증가했기 때문이다.
- ECDHE(Elliptic-curve Diffie–Hellman) 사용 : 현재 실현 가능하다고 알려져 있는 암호해독 공격을 우회할 수 있는 교환 방식으로 알려져 있다. 웹 브라우저들은 ECDHE 방식을 더욱 선호한다.
- 디피-헬만 키 사이즈 변경 : 디피-헬만 키를 사용할 경우 기존 사용하던 512, 1024비트를 넘어선 2048비트 이상으로 생성하고, 새롭고 고유한 방법의 그룹을 생성한다. 주의할 점은 디피-헬만 키의 사이즈를 변경하기 위해선 JDK 버전을 확인해야 한다. JDK 1.7부터 2048비트를 지원하여 출발지와 도착지의 지원 스펙이 다르면 SSLHandShakeException 에러가 발생할 수 있다.
- 디피-헬만 수출용 암호 모음(Cipher Suite)을 사용하지 않는다.
각주[편집]
- ↑ 〈디피-헬만 알고리즘(Diffie-Hellman Algorithm〉, 《개인 블로그》, 2018-04-22
- ↑ 〈디피헬만 알고리즘(Diffie-Hellman Algorithm)〉, 《네이버 지식백과》
- ↑ 손경호 기자, 〈공개키 고안한 디피-헬만, 올해 '튜링'상 수상〉, 《지디넷코리아》, 2016-03-04
- ↑ 4.0 4.1 와스프로 GodNR, 〈(SSL 암호화 취약점)디피 헬만 키(Diffie Hellman Key)〉, 《티스토리》, 2019-06-03
참고자료[편집]
- 〈디피-헬만 알고리즘(Diffie-Hellman Algorithm〉, 《개인 블로그》, 2018-04-22
- 〈공개키 암호 시스템〉, 《안동대학교 교수 차영욱》
- taeho, 〈디피-헬만 키교환 알고리즘(Diffe-Hellman Key Exchange)〉, 《개인 블로그》, 2016-11-17
- 손경호 기자, 〈공개키 고안한 디피-헬만, 올해 '튜링'상 수상〉, 《지디넷코리아》, 2016-03-04
- 아이들링, 〈디피-헬만 키 교환 알고리즘(Diffie-Hellman key exchange)〉, 《티스토리》, 2016-10-11
- 하지윤, 〈DH(Diffie-Hellman) 알고리즘의 원리〉, 《티스토리》, 2018-11-01
- David Adrian, Karthikeyan Bhargavan, Zakir Durumeric, Pierrick Gaudry, Matthew Green, J. Alex Halderman, Nadia Heninger, Drew Springall, Emmanuel Thomé, Luke Valenta, Benjamin VanderSloot, Eric Wustrow, Santiago Zanella-Béguelink Paul Zimmermann, Imperfect Forward Secrecy:How Diffie-Hellman Fails in Practice〉, 《weakdh》, 2015-05-20
- 와스프로 GodNR, 〈(SSL 암호화 취약점)디피 헬만 키(Diffie Hellman Key)〉, 《티스토리》, 2019-06-03
같이 보기[편집]