디피-헬먼 키 교환: Difference between revisions

From CS Wiki
No edit summary
(수식 적용 및 공유된 키에 대한 서술 오류 수정)
 
(6 intermediate revisions by 4 users not shown)
Line 1: Line 1:
[[분류:보안]][[분류:암호학]][[분류:정보보안기사]]
;Diffie-Hellman Key Exchange
;Diffie-Hellman Key Exchange
== 명칭 ==
디피라는 사람과 헬만 이라는 사람이 공동 개발했다고 해서 '디피-헬만'이다. 디피-헬만 키 교환법, 디피-헬만 알고리즘, 디피-헬만 프로토콜등 다양한 이름으로 불린다.
디피라는 사람과 헬만 이라는 사람이 공동 개발했다고 해서 '디피-헬만'이다. 디피-헬만 키 교환법, 디피-헬만 알고리즘, 디피-헬만 프로토콜등 다양한 이름으로 불린다.


Line 7: Line 6:
; 디피-헬만법은 이산대수의 어려움을 이용한 알고리즘이다. 쉽게 말해 주어진 g, x, p 를 이용하여 y = g^x mod p 를 구하기는 쉽지만 g, y , p 값을 이용하여 원래의 x를 찾기 어렵다는 원리를 이용한 것이다.
; 디피-헬만법은 이산대수의 어려움을 이용한 알고리즘이다. 쉽게 말해 주어진 g, x, p 를 이용하여 y = g^x mod p 를 구하기는 쉽지만 g, y , p 값을 이용하여 원래의 x를 찾기 어렵다는 원리를 이용한 것이다.
*  비대칭키(공개키) 알고리즘에서 사용되는 키 교환 방식이다.
*  비대칭키(공개키) 알고리즘에서 사용되는 키 교환 방식이다.
* 상대방의 공개키와 나의 비밀키를 이용하여 비밀키를 생성한다.
* 상대방의 공개키와 나의 개인키를 이용하여 비밀키를 생성한다.
* A의 공개키와 B의 개인키를 DH연산하면 B의 비밀키가 되고
* A의 공개키와 B의 개인키를 DH연산하면 B의 비밀키가 되고
* B의 공개키와 A의 개인키를 DH연산하면 A의 비밀키가 된다.
* B의 공개키와 A의 개인키를 DH연산하면 A의 비밀키가 된다.
Line 16: Line 15:
# 당사자들은 임의 큰 소수 p와 그보다 작은 자연수 g를 선택한다.
# 당사자들은 임의 큰 소수 p와 그보다 작은 자연수 g를 선택한다.
#* p=17와 그보다 작은 자연수 g=2로 선택했다.
#* p=17와 그보다 작은 자연수 g=2로 선택했다.
# 각자 자신의 개인키를 선택한다.
# 각자 자신의 개인 키를 선택한다.
#* A는 11를 선택했다.
#*A의 개인 키 = 11
#* B는 13를 선택했다.
#* B의 개인 키 = 13
# 상대방에게 각자 개인키로 g^(개인키) mod p를 계산한 값을 보낸다.  
#상대방에게 각자 개인키로 g<sup><개인 키></sup> mod p를 계산한 공개 키를 보낸다.  
#* A는 B에게 2^11 mod 17 = '''8'''을 보낸다.
#*A는 B에게 2<sup>11</sup>(mod 17) = '''8'''을 보낸다.
#* B는 A에게 2^13 mod 17 = '''15'''를 보낸다.
#* B는 A에게 2<sup>13</sup>(mod 17) = '''15'''를 보낸다.
# 각자 계산을 통해 비밀키를 만들어낸다.
#각자 <상대 공개 키><sup><본인 개인 키></sup>(mod p) 계산을 통해 비밀키를 만들어낸다.
#* A는 받은 15으로 계산한다. 15^11 mod 17 = 9
#*A는 받은 15으로 계산한다. 15<sup>11</sup>(mod 17) = '''9'''
#* B는 받은 8로 계산한다.  8^13 mod 17 = 9
#* B는 받은 8로 계산한다.  8<sup>13</sup>(mod 17) = '''9'''
# 결론
#*공유된 키인 9를 사용한다.
#* A만 알고 있는 키는 11, B만 알고 있는 키는 13이다.
#결론  
#* 외부에 노출될 우려가 있는 값은 2, 17, 8, 15이다. (노출 되어도 상관 없다.)
#*A만 알고 있는 키는 11, B만 알고 있는 키는 13이다.
#* 둘만 알고 있는 키는 '''9'''이다. (노출의 우려가 있다.)
#* 외부에 노출될 우려가 있는 값은 2, 17, 8, 15이다. (노출 되어도 상관 없음)
#*둘만 알고 있는 키는 '''9'''이다. (개인 키를 모르기 때문에, 노출의 우려가 없음)


지금은 예시이기 때문에 매우 작은 숫자를 이용하였으나, 숫자가 수십~수백자리로 커지게 되면 2, 17, 8, 15, 9에 해당하는 숫자는 노출이 되어도 이를 역으로 11과 13을 유추해 내기가 매우매우 힘들다는 것이 수학적 안전성의 근거이다.
지금은 예시이기 때문에 매우 작은 숫자를 이용하였으나, 숫자가 수십~수백 자리로 커지게 되면 2, 17, 8, 15에 해당하는 숫자는 노출이 되어도 개인 키를 모르기 때문에 공유된 키 값을 유추하기 어렵다는 것이 수학적 안전성의 근거이다.


== 취약점 ==
==취약점==
* 신분위장 공격에 취약하다  
*신분위장 공격에 취약하다  
** 인증 과정이 없다.
**인증 과정이 없다.
** 애초에 B가 아닌 사람이 B인척 하여 키를 교환할 수 있다.
**애초에 B가 아닌 사람이 B인척 하여 키를 교환할 수 있다.
** 연산된 결과인 비밀키만 취득한 제 3자가 B 행세를 할 수도 있다.
**연산된 결과인 비밀키만 취득한 제 3자가 B 행세를 할 수도 있다.
* 재전송 공격에 취약하다  
*재전송 공격에 취약하다  
** 암호화된 정보를 스니핑 해서 재전송 함으로써 행위를 조작할 수 있다.
** 암호화된 정보를 스니핑 해서 재전송 함으로써 행위를 조작할 수 있다.
**'''정보의 무결성이 보장되지 않는다'''


; 디피-헬만 키 교환은 단순히 안전한 키 교환에 의한 안전성에 의존하므로 단독으로 사용하기엔 부족하다. 디피-헬만은 수 많은 프로토콜에서 사용되고 있지만 모두 인증, 무결성, 부인방지 등의 추가적인 안전성을 더해서 사용한다.
;디피-헬만 키 교환은 단순히 안전한 키 교환에 의한 안전성에 의존하므로 단독으로 사용하기엔 부족하다. 디피-헬만은 수 많은 프로토콜에서 사용되고 있지만 모두 인증, 무결성, 부인방지 등의 추가적인 안전성을 더해서 사용한다.


== 출처 ==
==출처==
출처 : [[http://raisonde.tistory.com/entry/디피-헬만-키-교환-알고리즘Diffie-Hellman-key-exchange 지식잡식 블로그]]
출처 : [[http://raisonde.tistory.com/entry/디피-헬만-키-교환-알고리즘Diffie-Hellman-key-exchange 지식잡식 블로그]]

Latest revision as of 17:08, 18 November 2024

Diffie-Hellman Key Exchange

디피라는 사람과 헬만 이라는 사람이 공동 개발했다고 해서 '디피-헬만'이다. 디피-헬만 키 교환법, 디피-헬만 알고리즘, 디피-헬만 프로토콜등 다양한 이름으로 불린다.

핵심[edit | edit source]

디피-헬만법은 이산대수의 어려움을 이용한 알고리즘이다. 쉽게 말해 주어진 g, x, p 를 이용하여 y = g^x mod p 를 구하기는 쉽지만 g, y , p 값을 이용하여 원래의 x를 찾기 어렵다는 원리를 이용한 것이다.
  • 비대칭키(공개키) 알고리즘에서 사용되는 키 교환 방식이다.
  • 상대방의 공개키와 나의 개인키를 이용하여 비밀키를 생성한다.
  • A의 공개키와 B의 개인키를 DH연산하면 B의 비밀키가 되고
  • B의 공개키와 A의 개인키를 DH연산하면 A의 비밀키가 된다.
  • 이산대수법에 의거한 수학적 공식에 의해 A의 비밀키와 B의 비밀키는 같아진다.
  • 송신자와 수신자는 안전하게 교환된 비밀키를 사용하여 데이터를 암호화한 후 전달한다.

예시[edit | edit source]

  1. 당사자들은 임의 큰 소수 p와 그보다 작은 자연수 g를 선택한다.
    • p=17와 그보다 작은 자연수 g=2로 선택했다.
  2. 각자 자신의 개인 키를 선택한다.
    • A의 개인 키 = 11
    • B의 개인 키 = 13
  3. 상대방에게 각자 개인키로 g<개인 키> mod p를 계산한 공개 키를 보낸다.
    • A는 B에게 211(mod 17) = 8을 보낸다.
    • B는 A에게 213(mod 17) = 15를 보낸다.
  4. 각자 <상대 공개 키><본인 개인 키>(mod p) 계산을 통해 비밀키를 만들어낸다.
    • A는 받은 15으로 계산한다. 1511(mod 17) = 9
    • B는 받은 8로 계산한다. 813(mod 17) = 9
    • 공유된 키인 9를 사용한다.
  5. 결론
    • A만 알고 있는 키는 11, B만 알고 있는 키는 13이다.
    • 외부에 노출될 우려가 있는 값은 2, 17, 8, 15이다. (노출 되어도 상관 없음)
    • 둘만 알고 있는 키는 9이다. (개인 키를 모르기 때문에, 노출의 우려가 없음)

지금은 예시이기 때문에 매우 작은 숫자를 이용하였으나, 숫자가 수십~수백 자리로 커지게 되면 2, 17, 8, 15에 해당하는 숫자는 노출이 되어도 개인 키를 모르기 때문에 공유된 키 값을 유추하기 어렵다는 것이 수학적 안전성의 근거이다.

취약점[edit | edit source]

  • 신분위장 공격에 취약하다
    • 인증 과정이 없다.
    • 애초에 B가 아닌 사람이 B인척 하여 키를 교환할 수 있다.
    • 연산된 결과인 비밀키만 취득한 제 3자가 B 행세를 할 수도 있다.
  • 재전송 공격에 취약하다
    • 암호화된 정보를 스니핑 해서 재전송 함으로써 행위를 조작할 수 있다.
    • 정보의 무결성이 보장되지 않는다
디피-헬만 키 교환은 단순히 안전한 키 교환에 의한 안전성에 의존하므로 단독으로 사용하기엔 부족하다. 디피-헬만은 수 많은 프로토콜에서 사용되고 있지만 모두 인증, 무결성, 부인방지 등의 추가적인 안전성을 더해서 사용한다.

출처[edit | edit source]

출처 : [지식잡식 블로그]