본문 바로가기
정보 보안/보안 기본 개념

디피 헬만 보안 기법 - 대칭키 생성 알고리즘

by tryotto 2020. 3. 9.

# 디피헬만 암호화 기법 - 대칭키 생성 알고리즘




- 배경 : 


     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) 이걸 "중간자 공격" 이라고 한다