Diffi-Hellman key exchange

  • authorbibaram
  • 22 February 2018, 12:04:11

디피-헬만 키 교환이란 암호 키를 교환하는 방법이다. RSA와 마찬가지로 공통의 비밀키를 공유하기 위하여 만들어진 암호학적 통신 방법이다. RSA는 알다시피 암호화된 통신에서 공유될 비밀키를 공개키로 암호화하여 A와 B가 서로 공유하는 방법이다. 뭐가 어찌되었든 간에 비밀키가 암호화되어 통신망에서 지나간다는 것이 문제이며, 이는 중간자 공격 (Man in the middle attack) 을 통하여 비밀키가 누출된 위험성을 가지고 있음을 말한다. 그렇다면 비밀키 공유시 중간자가 알아볼 수 없는 형태의 값만 공유하고 특정연산을 이용하여 최종적으로 비밀키를 공유 할 수 있다면 어떨까?

Diffie-Hellman 키 교환 알고리즘은 위에서 말한 문제를 해결 할 수 있는 방법을 제시한다. 노씨와 이씨가 인터넷에서 서로 암호화된 통신을 하려고 한다고 하자. 그런데 김씨가 몰래 중간자로써 비밀키 교환을 훔쳐보려 한다고 가정하면.

  1. 노씨가 소수 P, 그리고 정수 G를 선택해 이씨에게 보낸다. 김씨도 훔쳐보고 알 수 있다.
  2. 노씨는 정수 a를 선택한다. 현재상태에서 노씨만 알고 이씨와 김씨도 모른다.
  3. 이씨도 정수 b를 선택한다. 현재상태에서 이씨만 알고 노씨와 김씨도 모른다.
  4. 노씨는 일정한 값 A를 계산한다. (G의 a승을 P로 나눈 나머지)
  5. 이씨는 일정한 값 B를 계산한다. (G의 b승을 P로 나눈 나머지)
  6. 노씨는 계산된 값 A를 이씨에게 전송한다. 김씨도 훔쳐보고 알 수 있다.
  7. 이씨는 계산된 값 B를 노씨에게 전송한다. 김씨도 훔쳐보고 알 수 있다.
  8. 노씨는 수신받은 B값을 이용하여 일정한 값을 만든다 (B의 a승을 P로 나눈 나머지)
  9. 이씨는 수신받은 A값을 이용하여 일정한 값을 를 만든다 (A의 b승을 P로 나눈 나머지)
  10. 노씨와 이씨는 계산후의 공통의 키값을 얻게 된다. 이게 암호키고 김씨가 중간에 본 혼합값으로는 키를 알 수 없다. 

와 같은 방법으로 비밀스럽게 비밀키를 공유 할 수 있다.

 

실제 Diffie Hellman 알고리즘이 이루어지는 원리를 확인해 보면 위와 같은 로직을 거치면 된다고 보면 되겠다. 여기서 중요한 것은 이산대수, 즉

소수 P와 정수G를 잘 골라야 안전한데 이제까지 충분히 안전하다고 판단되었던 값이 1024bit 였던 것이다.

 

2. Diffi-Hellman 1024bit가 안전하지 않은 이유?

Logjam 취약점 문제 때문이다.

1990년대 초, Netscape 사가 SSL을 처음 개발했을 때 미정부는 암호화 알고리즘을 엄격히 제한했다. 해외로 수출되는 암호화 알고리즘은 의도적으로 약하게 만들어졌으며, 키의 길이가 512bit로 제한되었다. 또한 수출용 암호시스템을 이용한 모든 통신에는 NSA가 접근 할 수 있었고, 이는 NSA가 마스터 키를 가지고 있었다고 봐도 무방하다. 

Logjam 취약점의 경우, TLS프로토콜의 취약점을 이용하여 Diffi-Hellman의 키를 의도적으로 수출용 512bit 로 다운그레이드 시킬 수 있는 취약점이다. 이를 이용하여 암호화된 통신을 해독하여 도감청이 가능하게 되는 것이다. 

그렇다면 어떻게 Diffie Hellman의 키를 찾거나 유추 할 수 있다는 것일까? 그것은 특정 소수의 수학적 특성을 이용한 방법으로 가능한데 아래와 같이 특정 소수를 이용하면 지수와 나머지값을 구할 수 있다. 

 

위 예제에서는 특수한 소수 7을 사용하였으며 이를 통해 지수와 나머지값을 찾는 방법을 나타내고 있다. 특수한 소수를 사용하는 경우 log를 이용하여 512bit 까지는 Diffie Hellman 의 키를 유추해 도감청이 가능했던 것으로 보인다.

 

참고 : http://blogger.pe.kr/583?category=144024

 

Press ESC to close