디피-헬먼 키 교환: Difference between revisions
From CS Wiki
No edit summary |
(수식 적용 및 공유된 키에 대한 서술 오류 수정) |
||
(3 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
[[분류:보안]][[분류:암호학]][[분류:정보보안기사]] | |||
;Diffie-Hellman Key Exchange | ;Diffie-Hellman Key Exchange | ||
디피라는 사람과 헬만 이라는 사람이 공동 개발했다고 해서 '디피-헬만'이다. 디피-헬만 키 교환법, 디피-헬만 알고리즘, 디피-헬만 프로토콜등 다양한 이름으로 불린다. | 디피라는 사람과 헬만 이라는 사람이 공동 개발했다고 해서 '디피-헬만'이다. 디피-헬만 키 교환법, 디피-헬만 알고리즘, 디피-헬만 프로토콜등 다양한 이름으로 불린다. | ||
Line 5: | 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 14: | Line 15: | ||
# 당사자들은 임의 큰 소수 p와 그보다 작은 자연수 g를 선택한다. | # 당사자들은 임의 큰 소수 p와 그보다 작은 자연수 g를 선택한다. | ||
#* p=17와 그보다 작은 자연수 g=2로 선택했다. | #* p=17와 그보다 작은 자연수 g=2로 선택했다. | ||
# 각자 자신의 | # 각자 자신의 개인 키를 선택한다. | ||
#* | #*A의 개인 키 = 11 | ||
#* | #* B의 개인 키 = 13 | ||
# 상대방에게 각자 개인키로 g | #상대방에게 각자 개인키로 g<sup><개인 키></sup> mod p를 계산한 공개 키를 보낸다. | ||
#* A는 B에게 2 | #*A는 B에게 2<sup>11</sup>(mod 17) = '''8'''을 보낸다. | ||
#* B는 A에게 2 | #* B는 A에게 2<sup>13</sup>(mod 17) = '''15'''를 보낸다. | ||
# 각자 ( | #각자 <상대 공개 키><sup><본인 개인 키></sup>(mod p) 계산을 통해 비밀키를 만들어낸다. | ||
#* A는 받은 15으로 계산한다. 15 | #*A는 받은 15으로 계산한다. 15<sup>11</sup>(mod 17) = '''9''' | ||
#* B는 받은 8로 계산한다. 8 | #* B는 받은 8로 계산한다. 8<sup>13</sup>(mod 17) = '''9''' | ||
#* | #*공유된 키인 9를 사용한다. | ||
# 결론 | #결론 | ||
#* A만 알고 있는 키는 11, B만 알고 있는 키는 13이다. | #*A만 알고 있는 키는 11, B만 알고 있는 키는 13이다. | ||
#* 외부에 노출될 우려가 있는 값은 2, 17, 8, 15이다. (노출 되어도 상관 | #* 외부에 노출될 우려가 있는 값은 2, 17, 8, 15이다. (노출 되어도 상관 없음) | ||
#* 둘만 알고 있는 키는 '''9'''이다. (노출의 우려가 | #*둘만 알고 있는 키는 '''9'''이다. (개인 키를 모르기 때문에, 노출의 우려가 없음) | ||
지금은 예시이기 때문에 매우 작은 숫자를 이용하였으나, 숫자가 수십~ | 지금은 예시이기 때문에 매우 작은 숫자를 이용하였으나, 숫자가 수십~수백 자리로 커지게 되면 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]
- 당사자들은 임의 큰 소수 p와 그보다 작은 자연수 g를 선택한다.
- p=17와 그보다 작은 자연수 g=2로 선택했다.
- 각자 자신의 개인 키를 선택한다.
- A의 개인 키 = 11
- B의 개인 키 = 13
- 상대방에게 각자 개인키로 g<개인 키> mod p를 계산한 공개 키를 보낸다.
- A는 B에게 211(mod 17) = 8을 보낸다.
- B는 A에게 213(mod 17) = 15를 보낸다.
- 각자 <상대 공개 키><본인 개인 키>(mod p) 계산을 통해 비밀키를 만들어낸다.
- A는 받은 15으로 계산한다. 1511(mod 17) = 9
- B는 받은 8로 계산한다. 813(mod 17) = 9
- 공유된 키인 9를 사용한다.
- 결론
- A만 알고 있는 키는 11, B만 알고 있는 키는 13이다.
- 외부에 노출될 우려가 있는 값은 2, 17, 8, 15이다. (노출 되어도 상관 없음)
- 둘만 알고 있는 키는 9이다. (개인 키를 모르기 때문에, 노출의 우려가 없음)
지금은 예시이기 때문에 매우 작은 숫자를 이용하였으나, 숫자가 수십~수백 자리로 커지게 되면 2, 17, 8, 15에 해당하는 숫자는 노출이 되어도 개인 키를 모르기 때문에 공유된 키 값을 유추하기 어렵다는 것이 수학적 안전성의 근거이다.
취약점[edit | edit source]
- 신분위장 공격에 취약하다
- 인증 과정이 없다.
- 애초에 B가 아닌 사람이 B인척 하여 키를 교환할 수 있다.
- 연산된 결과인 비밀키만 취득한 제 3자가 B 행세를 할 수도 있다.
- 재전송 공격에 취약하다
- 암호화된 정보를 스니핑 해서 재전송 함으로써 행위를 조작할 수 있다.
- 정보의 무결성이 보장되지 않는다
- 디피-헬만 키 교환은 단순히 안전한 키 교환에 의한 안전성에 의존하므로 단독으로 사용하기엔 부족하다. 디피-헬만은 수 많은 프로토콜에서 사용되고 있지만 모두 인증, 무결성, 부인방지 등의 추가적인 안전성을 더해서 사용한다.
출처[edit | edit source]
출처 : [지식잡식 블로그]