소개 §
- 여기 에서 설명한 것 처럼, TLS 통신에서 비대칭키만 사용하면 너무 별로여서 실제 데이터 암복호화를 할 때에는 대칭키를 사용한다.
- 그래서 이전에는 공개키로 대칭키 (사실 대칭키의 재료 쯤 되는 것) 을 암호화해서 보내 대칭키를 공유했었지만
- 이 방법이 나온 뒤에는 이것을 더 많이 사용한다고 한다.
동작구 김씨 vs 송파구 서씨 §
- 동작구 김씨와 송파구 서씨는 이번에는 대칭키를 이용해 새벽 세시에 햄버거 맛있게 먹는 방법 을 공유하고자 한다.
- 둘 모두 동일한 shared secret 을 갖게 하는 것이 임무이다.
- 여기에서 강남구 오씨가 이것을 가로채려 해본다고 가정하자.
- 아래 표의 각 셀은 각자가 알고 있는 값을 의미한다.
- 일단 사전에 공개된 값은 다음과 같다.
- g=5: 이 값은 p 보다 작은 값이어야 한다.
- p=23: 이 값은 소수여야 한다.
값 | 동작구 김씨 | 강남구 오씨 | 송파구 서씨 |
---|
g | 5 | 5 | 5 |
p | 23 | 23 | 23 |
- 김씨와 서씨는 각자 난수를 하나씩 생성한다 (김씨 - k, 서씨 - s)
값 | 동작구 김씨 | 강남구 오씨 | 송파구 서씨 |
---|
g | 5 | 5 | 5 |
p | 23 | 23 | 23 |
k | 6 | ? | ? |
s | ? | ? | 15 |
- 각자 생성한 값에 대해 gxmodp 연산을 한다.
- 김씨 (K=gkmodp): 56mod23=8
- 서씨 (S=gsmodp): 515mod23=19
값 | 동작구 김씨 | 강남구 오씨 | 송파구 서씨 |
---|
g | 5 | 5 | 5 |
p | 23 | 23 | 23 |
k | 6 | ? | ? |
s | ? | ? | 15 |
K | 8 | ? | ? |
S | ? | ? | 19 |
- 그리고 그 결과를 서로에게 알려준다.
값 | 동작구 김씨 | 강남구 오씨 | 송파구 서씨 |
---|
g | 5 | 5 | 5 |
p | 23 | 23 | 23 |
k | 6 | ? | ? |
s | ? | ? | 15 |
K | 8 | 8 | 8 |
S | 19 | 19 | 19 |
- 마지막으로 Yxmodp 연산을 하여 shared secret T 를 알아낸다.
- 김씨 (T=Skmodp): 196mod23=2
- 서씨 (T=Ksmodp): 815mod23=2
- 오씨는 k, s 값을 모르기 때문에 이 T 값을 알아낼 수 없다.
값 | 동작구 김씨 | 강남구 오씨 | 송파구 서씨 |
---|
g | 5 | 5 | 5 |
p | 23 | 23 | 23 |
k | 6 | ? | ? |
s | ? | ? | 15 |
K | 8 | 8 | 8 |
S | 19 | 19 | 19 |
T | 2 | ? | 2 |
Security considerations §
Brute-force attack §
- 위의 예시에서 보듯이 결과물 T 은 무언가를 p 으로 나눈 나머지이기 때문에 p 는 아주 큰 값이어야 한다.
- 만약 p 이 5면 0~4 5개의 값만 brute-force 로 때려넣으면 되자나 그치?
- 따라서 보통 다음과 같은 제약을 둔다고 한다.
- (p−1)/2 값 또한 소수이고,
- 2048 ~ 4096 bit 사이의 값
MITM attack §
- 알고리즘을 보면, 신원을 확인하는 단계가 없다. 따라서 MITM (Man-in-the-Middle) 공격이 가능하다.
- 즉, 중간의 강남구 오씨가 김/서 가 보낸 K 와 S 를 버리고 자신이 직접 K′ S′ 를 만들어 서로에게 전달해준다면 중간에서 내용을 가로채는 것이 가능하다.
- 따라서 DH 만 사용하지 않고 Signature 도 같이 사용한다고 하네