# 디피헬만 암호화 기법 - 대칭키 생성 알고리즘
- 배경 :
1) 대칭키 알고리즘을 사용해서 암호 통신을 하고싶다
2) 그러기 위해선, 두 사람이 "같은" 비밀키를 소유할 수 있도록 이끌어야 한다
> 어떻게? 어떻게 같은 비밀키를 만들 수 있지?
3) 비밀키를 만들더라도, 한쪽에서 만든 비밀키를 네트워크 통신으로 다른 사람에게 전달하는 방식은 너무 위험하다!
> 당연하지! 우리 집 열쇠를 우체국 택배로 부치는거랑 똑같다!
> 중간에 어떤 사람이 너무나도 쉽게 가로챌 수 있다!
4) 그렇다면, 양쪽의 사람이 각각 "비밀스럽게", "똑같은" 대칭키를 만들 수 있는 방법을 고민해보자!
- 매커니즘 :
1) 어떤 수 G 가 주어졌다고 하자
> 이때 G 값은 공개적으로 주어지는 값이다 (공개키)
2) 두 사람 A 와 B 는 각각 개인키인 a, b 를 머릿 속으로 떠올린다
3) A 는 G^a mod p = a' 값을 만들고,
B 는 G^b mod p = b' 값을 만든다
4) 이 두 값 a' 과 b' 을 서로에게 전달한다!
> "공개적으로" 전달되며, 중간에 탈취가 충분히 가능하다!
> 그러나 탈취하더라도, "mod p" 연산을 통해서 a' 과 b' 을 생성한 것이기 때문에,
a 와 b 를 도출해낼 수 없다
5) A 는 b' 값을, B 는 a' 값을 받았다.
6) A 는 전달받은 b' 을 a 만큼 제곱해준다. 그 다음, p 값으로 mod 연산을 해준다 -> (b')^a mod p
B 는 전달받은 a' 을 b 만큼 제곱해준다. 그 다음, p 값으로 mod 연산을 해준다 -> (a')^b mod p
7) 신기하게도, 위에서 구한 두 값은 같다!
> (b')^a mod p == (a')^b mod p
> 위의 값을 K 라고 하자!
8) 위에서 구한 K 값을 대칭키(비밀키) 로 활용한다!
> 이처럼, 비밀키를 형성하는 과정 중에서 그 어떠한 사람도 비밀키를 유추할 수 없다
> WHY? 아래에 서술!
- 안정성 증명
1) 개인키 K = ( (b')^a mod p == (a')^b mod p )
2) 이때, a' , b' , p 값은 공개된다 (일종의 공개키)
3) 그러나, 결국 해커가 얻고싶은건 K 값이며, 그걸 구하기 위해선 a 나 b 둘 중 적어도 하나의 값은 반드시 알아야 한다
4) 위에서도 언급했듯, mod p 연산을 한 것이기 때문에, 절대로 a' b' 를 이용해서 a b 를 구할 수 없다
> 즉, a 와 b 값은 절대 구할 수 없다
5) 따라서, K 값은 절대로 알 수 없다
- 의의 : "아무도 모르게", "서로에게 똑같은" 비밀키를 동시에 생성할 수 있다.
- 취약점 : 너무너무 명백하고 허탈할 정도로 해킹이 쉽다
1) 결국, 비밀 대칭키인 K 값을 구하기 위해선 a' b' 라는 두 "공개적인" 값을 전달해야 한다
2) 이때, a' b' 가 아닌 엉뚱한 값을 양쪽 사람들에게 전달되면 어떨까?
> 너무 당연하게도, 완전 엉뚱한 값을 생성하게 된다
> "대칭" 키여야 하는데, 값을 조작했기 떄문에 결국 생성되는 값도 양쪽의 사람이 "전혀 다른" 값을 갖게 된다
3) 이걸 "중간자 공격" 이라고 한다
'정보 보안 > 보안 기본 개념' 카테고리의 다른 글
ECC 암호화 기법 - 공개키 생성 알고리즘 (0) | 2020.03.09 |
---|---|
공개키 대칭키 암호화 기법 (0) | 2020.03.09 |
RSA 알고리즘 - 공개키 암호화 방식 (0) | 2020.03.09 |