검수요청.png검수요청.png

"디피-헬만"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
잔글
잔글 (등장 배경)
 
(사용자 6명의 중간 판 14개는 보이지 않습니다)
1번째 줄: 1번째 줄:
'''디피-헬만'''<!--디피 헬만, 디피헬만-->(Diffie-Hellman)은 1976년 미국 [[스탠퍼드 대학교]]의 [[휘트필드 디피]](Whitfield Diffie)와 [[마틴 헬만]](Martin Hellman)이 "New Directions in Cryptography"(암호학의 새로운 방향)이라는 논문에서 처음으로 공개 발표한 [[암호 알고리즘]]이다. 이 논문을 통해 디피-헬만 키 교환은 제일 기초가 되는 암호학적 통신 방법을 만들었다. [[RSA]] 암호화 알고리즘의 바탕이 되기도 하였다.
+
[[파일:휫필드 디피.jpg|썸네일|200픽셀|'''[[휫필드 디피]]'''(Whitfield Diffie)]]
 +
[[파일:마틴 헬만.jpg|썸네일|200픽셀|'''[[마틴 헬만]]'''(Martin Hellman)]]
 +
 
 +
'''디피-헬만'''<!--디피 헬만, 디피헬만-->(Diffie-Hellman)은 최초의 [[공개키]] [[암호 알고리즘]]으로서, 1976년, 미국 [[스탠퍼드 대학]]의 연구원 [[휫필드 디피]](Whitfield Diffie)와 [[마틴 헬만]](Martin Hellman)이 공동 개발하여 발표한 것이다.
  
 
== 개요 ==
 
== 개요 ==
디피-헬만 알고리즘(Diffie-Hellman Algorithm)핵심은 상대방의 공개키와 나의 공개키를 이용하여 계산을 하면 비밀키가 나온다는 것이다.
+
디피-헬만 알고리즘(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>
  
== 동작 원리 ==
+
== 등장 배경 ==
* 공개적으로 교환할 발생기(generator)를 생성한다. (p는 [[소수]], g는 생성자)
+
정보의 비밀 유지가 중요해지기 시작하면서 [[암호학]]이 발전하기 시작하였다. 암호학이 발달함에 따라 여러 가지 암호화 방식과 암호 알고리즘을 만들어내기 시작하였다. 디피-헬만 알고리즘이 개발되기 이전까지는 [[대칭키 암호 알고리즘]](symmetric-key algorithm)을 이용했다. 하지만 대칭키 암호 알고리즘의 문제점이 발견되어 이를 해결하기 위해 하나의 금고에 두 개의 열쇠를 쓰는 방법과도 같은 디피-헬만 알고리즘이 개발되었다.<ref>손경호 기자, 〈[https://m.zdnet.co.kr/news_view.asp?article_id=20160303021427 공개키 고안한 디피-헬만, 올해 '튜링'상 수상]〉, 《지디넷코리아》, 2016-03-04</ref>
* 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 이외의 인물은 a와 b를 알 수 없으며, g, p, g^a mod p, g^b mod p는 알 수 있다.
 
  
 
== 특징 ==
 
== 특징 ==
'''장점'''
+
===동작 원리===
* [[이산 대수 문제]]의 어려움에 기반하여 안전성이 유지된다.
+
# 공개적으로 교환할 발생기(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)을 사용하지 않는다.
  
'''단점에 대한 해결책'''
+
{{각주}}
* 인증된 [[디피-헬만 키교환]](Diffie-Hellman 키 교환) 사용 (공격자에 의한 [[공개키]]의 변조를 방지하기 위하여 [[전자서명]]된 공개키를 상호 교환)
 
  
 
== 참고자료 ==
 
== 참고자료 ==
 
* 〈[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
  
 
== 같이 보기 ==
 
== 같이 보기 ==
35번째 줄: 54번째 줄:
 
* [[이산 대수 문제]]
 
* [[이산 대수 문제]]
 
* [[중간자 공격]]
 
* [[중간자 공격]]
* [[휘트필드 디피]]
+
* [[휫필드 디피]]
 
* [[마틴 헬만]]
 
* [[마틴 헬만]]
  
{{암호 알고리즘|토막글}}
+
{{암호 알고리즘|검토 필요}}

2019년 10월 20일 (일) 15:14 기준 최신판

휫필드 디피(Whitfield Diffie)
마틴 헬만(Martin Hellman)

디피-헬만(Diffie-Hellman)은 최초의 공개키 암호 알고리즘으로서, 1976년, 미국 스탠퍼드 대학의 연구원 휫필드 디피(Whitfield Diffie)와 마틴 헬만(Martin Hellman)이 공동 개발하여 발표한 것이다.

개요[편집]

디피-헬만 알고리즘(Diffie-Hellman Algorithm)은 두 사용자가 사전에 어떤 비밀 교환 없이도 공통키를 교환하게 해주는 알고리즘이다. 디피-헬만 알고리즘의 핵심은 상대방의 공개키와 나의 공개키를 이용하여 계산을 하면 비밀키가 나온다는 것인데, 이후에 나와 상대방은 생성된 비밀키를 사용하여 데이터를 암호화한 후 전달하면 된다. 디피-헬만 알고리즘은 키 교환(Key exchange) 알고리즘으로 대칭키를 공유하는데 사용한다. 디피-헬만 알고리즘을 기반으로 하는 디피-헬만 키교환은 가장 기초가 되는 암호학적 통신 방법을 만들었으며 RSA 암호화 알고리즘의 바탕이 되기도 했다.[1] 하지만 이는 암호화전자서명을 위한 것은 아니다.[2]

등장 배경[편집]

정보의 비밀 유지가 중요해지기 시작하면서 암호학이 발전하기 시작하였다. 암호학이 발달함에 따라 여러 가지 암호화 방식과 암호 알고리즘을 만들어내기 시작하였다. 디피-헬만 알고리즘이 개발되기 이전까지는 대칭키 암호 알고리즘(symmetric-key algorithm)을 이용했다. 하지만 대칭키 암호 알고리즘의 문제점이 발견되어 이를 해결하기 위해 하나의 금고에 두 개의 열쇠를 쓰는 방법과도 같은 디피-헬만 알고리즘이 개발되었다.[3]

암호학은 비밀을 서로 공유하기로 한 사람들만이 키를 이용해 데이터암호화복호화하는 방향으로 발전했다. 초기에는 이 과정에서 사용되는 암호와 키와 복호화 키가 서로 같은 방식으로 발전했는데, 이를 대칭키 암호화라고 한다. 하지만 이 대칭키 암호 알고리즘의 경우에는 암호키의 유출 가능성이 문제였고, 암호키가 유출될 경우 모든 통신이 노출된다. 한 번 암호키가 노출되면 이후에 주고받을 암호키도 노출되기 때문에 통신에 있어 매우 치명적이다. 이러한 문제점을 보완하기 위해 디피-헬만 알고리즘이 개발되었다.

특징[편집]

동작 원리[편집]

  1. 공개적으로 교환할 발생기(generator)를 생성한다. (p는 소수, g는 생성자)
  2. A는 개인키 a를 이용하여 g^a mod p를 생성한다. (여기서 mod는 나눗셈의 나머지를 구하는 연산이다.)
  3. B는 개인키 b를 이용하여 g^b mod p를 생성한다.
  4. A는 B에게 g^a mod p를 보내고 B는 A에게 g^b mod p를 보낸다.
  5. A는 자신의 개인키 a를 이용하여 g^ab mod p를 생성하고 B는 자신의 개인키 b를 이용하여 g^ab mod p를 생성한다.
  6. A와 B는 새롭게 생성된 키를 대칭키(비밀키)로 이용한다. (A와 B가 교환하여 결합한 값이 서로 같다는 것을 확인한다.)
  7. 이때 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]
  1. OpenSSL 버전 업데이트 : OpenSSL 1.0.2b 이상 1.0.1n 이상이면 관련 취약점의 회피가 가능하다. 이는 기존 DH 파라미터가 768비트보다 짧다면 핸드셰이크(handshake)를 거부하도록 하던 TLS 클라이언트에 대한 보호 기능이 1024비트로 증가했기 때문이다.
  2. ECDHE(Elliptic-curve Diffie–Hellman) 사용 : 현재 실현 가능하다고 알려져 있는 암호해독 공격을 우회할 수 있는 교환 방식으로 알려져 있다. 웹 브라우저들은 ECDHE 방식을 더욱 선호한다.
  3. 디피-헬만 키 사이즈 변경 : 디피-헬만 키를 사용할 경우 기존 사용하던 512, 1024비트를 넘어선 2048비트 이상으로 생성하고, 새롭고 고유한 방법의 그룹을 생성한다. 주의할 점은 디피-헬만 키의 사이즈를 변경하기 위해선 JDK 버전을 확인해야 한다. JDK 1.7부터 2048비트를 지원하여 출발지와 도착지의 지원 스펙이 다르면 SSLHandShakeException 에러가 발생할 수 있다.
  4. 디피-헬만 수출용 암호 모음(Cipher Suite)을 사용하지 않는다.

각주[편집]

  1. 디피-헬만 알고리즘(Diffie-Hellman Algorithm〉, 《개인 블로그》, 2018-04-22
  2. 디피헬만 알고리즘(Diffie-Hellman Algorithm)〉, 《네이버 지식백과》
  3. 손경호 기자, 〈공개키 고안한 디피-헬만, 올해 '튜링'상 수상〉, 《지디넷코리아》, 2016-03-04
  4. 4.0 4.1 와스프로 GodNR, 〈(SSL 암호화 취약점)디피 헬만 키(Diffie Hellman Key)〉, 《티스토리》, 2019-06-03

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 디피-헬만 문서는 암호 알고리즘에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.