"디피-헬만"의 두 판 사이의 차이
잔글 (→같이 보기) |
잔글 (→등장 배경) |
||
(사용자 6명의 중간 판 18개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
− | '''디피 | + | [[파일:휫필드 디피.jpg|썸네일|200픽셀|'''[[휫필드 디피]]'''(Whitfield Diffie)]] |
+ | [[파일:마틴 헬만.jpg|썸네일|200픽셀|'''[[마틴 헬만]]'''(Martin Hellman)]] | ||
− | == | + | '''디피-헬만'''<!--디피 헬만, 디피헬만-->(Diffie-Hellman)은 최초의 [[공개키]] [[암호 알고리즘]]으로서, 1976년, 미국 [[스탠퍼드 대학]]의 연구원 [[휫필드 디피]](Whitfield Diffie)와 [[마틴 헬만]](Martin Hellman)이 공동 개발하여 발표한 것이다. |
− | + | ||
− | + | == 개요 == | |
− | + | 디피-헬만 알고리즘(Diffie-Hellman Algorithm)은 두 사용자가 사전에 어떤 비밀 교환 없이도 공통키를 교환하게 해주는 알고리즘이다. 디피-헬만 알고리즘의 핵심은 상대방의 공개키와 나의 공개키를 이용하여 계산을 하면 비밀키가 나온다는 것인데, 이후에 나와 상대방은 생성된 비밀키를 사용하여 데이터를 암호화한 후 전달하면 된다. 디피-헬만 알고리즘은 키 교환(Key exchange) 알고리즘으로 대칭키를 공유하는데 사용한다. 디피-헬만 알고리즘을 기반으로 하는 디피-헬만 키교환은 가장 기초가 되는 암호학적 통신 방법을 만들었으며 RSA 암호화 알고리즘의 바탕이 되기도 했다.<ref>〈[https://www.crocus.co.kr/1233 디피-헬만 알고리즘(Diffie-Hellman Algorithm]〉, 《개인 블로그》, 2018-04-22</ref> 하지만 이는 [[암호화]]나 [[전자서명]]을 위한 것은 아니다.<ref>〈[https://terms.naver.com/entry.nhn?docId=301754&cid=50373&categoryId=50373 디피헬만 알고리즘(Diffie-Hellman Algorithm)]〉, 《네이버 지식백과》</ref> | |
− | + | ||
− | + | == 등장 배경 == | |
− | + | 정보의 비밀 유지가 중요해지기 시작하면서 [[암호학]]이 발전하기 시작하였다. 암호학이 발달함에 따라 여러 가지 암호화 방식과 암호 알고리즘을 만들어내기 시작하였다. 디피-헬만 알고리즘이 개발되기 이전까지는 [[대칭키 암호 알고리즘]](symmetric-key algorithm)을 이용했다. 하지만 대칭키 암호 알고리즘의 문제점이 발견되어 이를 해결하기 위해 하나의 금고에 두 개의 열쇠를 쓰는 방법과도 같은 디피-헬만 알고리즘이 개발되었다.<ref>손경호 기자, 〈[https://m.zdnet.co.kr/news_view.asp?article_id=20160303021427 공개키 고안한 디피-헬만, 올해 '튜링'상 수상]〉, 《지디넷코리아》, 2016-03-04</ref> | |
− | + | ||
+ | 암호학은 비밀을 서로 공유하기로 한 사람들만이 키를 이용해 [[데이터]]를 [[암호화]]와 [[복호화]]하는 방향으로 발전했다. 초기에는 이 과정에서 사용되는 암호와 키와 복호화 키가 서로 같은 방식으로 발전했는데, 이를 [[대칭키 암호화]]라고 한다. 하지만 이 대칭키 암호 알고리즘의 경우에는 암호키의 유출 가능성이 문제였고, 암호키가 유출될 경우 모든 통신이 노출된다. 한 번 암호키가 노출되면 이후에 주고받을 암호키도 노출되기 때문에 통신에 있어 매우 치명적이다. 이러한 문제점을 보완하기 위해 디피-헬만 알고리즘이 개발되었다. | ||
== 특징 == | == 특징 == | ||
− | ''' | + | ===동작 원리=== |
− | + | # 공개적으로 교환할 발생기(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비트의 [[암호화]]된 연결을 해독해 낼 수 있다고 한다.<ref name="취약점">와스프로 GodNR, 〈[https://waspro.tistory.com/479 (SSL 암호화 취약점)디피 헬만 키(Diffie Hellman Key)]〉, 《티스토리》, 2019-06-03</ref> | ||
+ | |||
+ | * 해결 방안 : 디피-헬만의 취약점을 해결하기 위해서는 다음과 같은 방법이 제시된다.<ref name="취약점"></ref> | ||
− | + | # 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)을 사용하지 않는다. | ||
− | + | {{각주}} | |
− | |||
== 참고자료 == | == 참고자료 == | ||
* 〈[https://www.crocus.co.kr/1233 디피-헬만 알고리즘(Diffie-Hellman Algorithm]〉, 《개인 블로그》, 2018-04-22 | * 〈[https://www.crocus.co.kr/1233 디피-헬만 알고리즘(Diffie-Hellman Algorithm]〉, 《개인 블로그》, 2018-04-22 | ||
* 〈[http://contents.kocw.or.kr/document/lec/2011_2/andong/Network/03.pdf 공개키 암호 시스템]〉, 《안동대학교 교수 차영욱》 | * 〈[http://contents.kocw.or.kr/document/lec/2011_2/andong/Network/03.pdf 공개키 암호 시스템]〉, 《안동대학교 교수 차영욱》 | ||
+ | * taeho, 〈[https://blogger.pe.kr/582 디피-헬만 키교환 알고리즘(Diffe-Hellman Key Exchange)]〉, 《개인 블로그》, 2016-11-17 | ||
+ | * 손경호 기자, 〈[https://m.zdnet.co.kr/news_view.asp?article_id=20160303021427 공개키 고안한 디피-헬만, 올해 '튜링'상 수상]〉, 《지디넷코리아》, 2016-03-04 | ||
+ | * 아이들링, 〈[https://raisonde.tistory.com/entry/%EB%94%94%ED%94%BC-%ED%97%AC%EB%A7%8C-%ED%82%A4-%EA%B5%90%ED%99%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98Diffie-Hellman-key-exchange 디피-헬만 키 교환 알고리즘(Diffie-Hellman key exchange)]〉, 《티스토리》, 2016-10-11 | ||
+ | * 하지윤, 〈[https://ldevil63.tistory.com/17 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, [https://weakdh.org/imperfect-forward-secrecy-ccs15.pdf Imperfect Forward Secrecy:How Diffie-Hellman Fails in Practice]〉, 《weakdh》, 2015-05-20 | ||
+ | * 와스프로 GodNR, 〈[https://waspro.tistory.com/479 (SSL 암호화 취약점)디피 헬만 키(Diffie Hellman Key)]〉, 《티스토리》, 2019-06-03 | ||
== 같이 보기 == | == 같이 보기 == | ||
31번째 줄: | 53번째 줄: | ||
* [[RSA]] | * [[RSA]] | ||
* [[이산 대수 문제]] | * [[이산 대수 문제]] | ||
− | * [[ | + | * [[중간자 공격]] |
− | * [[ | + | * [[휫필드 디피]] |
* [[마틴 헬만]] | * [[마틴 헬만]] | ||
− | {{암호 알고리즘| | + | {{암호 알고리즘|검토 필요}} |
2019년 10월 20일 (일) 15:14 기준 최신판
디피-헬만(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
같이 보기[편집]