프로그래밍[Univ]/네트워크

[네트워크] 공기키 암호화

Cloud Travel 2012. 11. 8. 14:07

* 대칭키의 문제점

 - 대칭키를 약속하는 법 > 키 분배

 - 대칭키가 많아지면(대화자가 많아지면) 키 관리가 힘들어진다. > 키 관리


* 공개키 암호화

 - 대칭키 암호화의 문제점 해결을 위해서 만들어짐.

 - 각 사용자는 자신의 공개키(Public key : K+)와 개인키(Private Key : K-)를 쌍으로 가지고 있다.

 - 사용자는 개인키를 자신의 비밀상자에 보관하고, 공개키를 사람들에게 공개한다.

  > 공개키로 인해 Key분배 문제가 해결된다. 자신의 키를 정의해서 공개키를 알려 주면된다.

  > 여러명과 통신을 하더라도 하나의 키만 가지고 있으면 가능하다. > 키 관리 문제 해결

 - 암호화 : 공개키를 이용하여 평문을 암호화 한다.

 - 복호화 : 개인키를 이용하여 암호문을 해독한다.

 - 대표적이면서 거의 유일한 공개키 알고리즘 : RSA

  > RSA key 생성 알고리즘

   1. 두 개의 큰 소수 p,q를 선택한다.

   2. n = pq, z = (p-1)(q-1) 을 이용하여 n과 z를 생성한다.

   3. n보다 작은 수 중에서 z와 서로 소 관계에 있는 e를 하나 선택한다.

     (e는 무수히 많은 수중에서 하나이다.)

   4. e*d % z = 1 의 관계를 성립시키는 d값을 선택한다.

     (d값 또한 무수히 많은 수중에서 하나이다.)

   5. 공개키(n,e)와 개인키(n,d)를 생성한다.

 > 암호화 : m^e % n = c

 > 복호화 : c^d % n = m

    // m is 평문!


 example) p = 5, q = 11. then n = 55, z = 40

              e = 7 ( e는 z와 서로소 관계에 있는 수 중 하나 )

              d = 23 ( d는 ed % z = 1을 만족하는 수 중 하나 )

              data(bit pattern) = 0011

  1. data를 십진수로 변경한다. 0011(2) = 3

  2. 암호화 : 3^7 % 55 =  2187 % 55 = 42

  3. 전송!!

  4. 복호화 : 42^23 % 55 = ... = 3 

  5. 십진수를 2진수로 변경하여 데이터로 취급 3 = 0011(2)

   // 암호화 전의 수와 복호화 된 수의 값이 같다!!

  > RSA의 안전성

   ~ 공개키를 알 고 있더라도, d 값을 찾는 것은 매우 힘들다.

   ~ n값을 두 소수 p와 q로 나누는 과정을 얼마나 빠르게 하느냐에 따라 안전성이 달라진다.

   ~ 큰 소수 p, q로 n을 분해하는 과정은 매우 어렵다.


* 공개키암호화의 문제점 및 응용

 - 문제점 : 암호화, 복호화 하는데 지수 연산이 필요하기 때문에 매우 많은 시간이 걸린다.

 - 공개키를 사용하여 대칭키를 암호화하고, 대칭키를 이용하여 메세지를 암호화하여 전송한다.

 - 디지털 서명, 인증등에서 사용한다.