프로그래밍[Univ]/컴퓨터보안

[컴퓨터보안] 현실 프로토콜 Part 1. PGP & SSL

Cloud Travel 2013. 5. 27. 14:38

* 전자메일의 보안(PGP)

 - 목표

  > 다른 사람이 보지 못하게 한다.(기밀성)

  > 보낸 사람이 자신이 아는 그 사람인지를 증명해준다.(인증)

  > 메세지의 무결성을 증명해준다.(무결성)

 - 이를 위해서 암호화와 전자서명을 사용한다.

 - 암호화 : 메세지를 암호화한다

  > 전에 배웠듯이, MAC을 사용한다. 

   -- 송신 --

  1) 대칭키를 생성하여, 생성된 대칭키로 메세지를 암호화한다.

  2) 대칭키는 상대방의 공개키로 암호화한다.

  3) 1)과 2)의 생성물을 하나로 합쳐서 전송한다.

   -- 수신 --

  1) 자신의 개인키로 공개키를 찾는다.

  2) 공개키로 메세지를 복화하한다.

 - 전자서명 : 송신자 정보확인 및 메세지의 무결성 증명

  > 이 방법 역시 전에 디지털 서명때 배운 것과 동일하다.

  -- 송신 --

  1) 메세지를 해쉬 함수에 적용하여 메세지 다이제스트를 생성한후, 자신의 개인키로 암호화한다.

  2) 1)의 결과물과 본래의 메세지를 합쳐서 송신한다.

  -- 수신 --

  1) 받은 메세지를 해쉬 함수에 적용하여 메세지 다이제스트를 생성한다.

  2) 송신자의 공개키로 수신한 메세지 다이제스트를 복화하하여 1)의 결과물과 비교한다.

 - 암호화 기법과 전자서명을 합쳐서 전자메일의 보안 프로토콜을 생성한다.

  -- 송신 --

  1) 본래의 메세지를 해쉬 함수에 적용하여 메세지 다이제스트를 생성한후, 자신의 개인키로 암호화한다.

  2) 본래의 메세지와 1)의 결과물을 합친다.

  3) 대칭키를 생성하여 2)의 결과물을 암호화한다.

  4) 생성된 대칭키를 상대방의 공개키로 암호화한다.

  5) 3)과 4)의 결과를 합쳐서 송신한다.

  -- 수신 --

  1) 자신의 개인키를 이용하여 대칭키를 밝혀낸다.

  2) 대칭키를 이용해서 암호화된 문서를 메세지 다이제스트+메세지 형식으로 풀어낸다.

  3) 2)에서 분리된 메세지를 자신의 해쉬함수에 적용한다.

  4) 2)에서 분리된 메세지 다이제스트를 송신자의 공개키로 복호화한다.

  5) 4)의 결과와 3)의 결과를 비교한다.

 - PGP(Pretty Good Privacy)

  > 1991년에 만들어진 전자 메일의 표준 암호화 기법


* SSL
 - Web상의 전자상거래를 위해 나온 프로토콜
 - 응용계층과 수송계층 사이에 위치한다.
 - 기밀성과 무결성, 인증을 보장하기 위해서 사용한다.
 - SSL 절자
  1) Handshake : Key 생성에 필요한 정보를 교환한다.
  2) Key 계산 : Mac Key, 암호화 Key를 생성한다.
  3) 데이터 전송
  4) 연결 종료
 - Handshake : client가 server를 인증하고 key계산에 필요한 값들을 교환하는 단계
  


 - crypto algorithms의 협상
  > 클라이언트는 사용할 암호화 알고리즘, 해쉬 크기, Block chaining을 사용한다면 IV값(pre_master_secret)을 서버에 
    전달하여 선택하게 한다.
 - 마지막에 현재까지의 메세지를 MAC계산하여 재전송하는 것은 중간자공격을 받지 않은 것을 확인 하기 위한 것.
 - nonce를 사용하는 이유는 재사용 공격을 방지하기 위한 것.
 - key계산 : key 계산 및 분배는 위에서 알아본 3가지 방법중 하나를 선택해서 사용한다.
  > 사용되는 key는 단방향으로만 사용되기 때문에 각각의 방향으로 향하는 대칭키, 비밀값(HMAC에서 사용할)을 생성한다.
  > 서로 전달받은 값들을 일렬로 늘어 세운후 적당한 길이로 짤라서 키를 부여 해준다.
  > 4개의 키와 2개의 Initial vector가 생성된다. > Kc, Mc, Ks, Ms, IVc, IVs
 - 인증서와 공개키를 전달해주는 것에서 Client에게 server를 증명해주고, crypto협상을 하며, key를 설정한다.

 - SSL 인증

  > client는 server을 인증하지만 server은 client를 인증하지 못한다.(server가 client에게 인증서를 전달)

  > 공인 인증서 확인 절차가 귀찮기 때문에 server는 client에게 거의 인증을 요구하지 않는다.

  > 상호 인증을 위해서 서버는 자신의 인증서를 전달할때 클라이언트의 인증서를 요구할 수 있다.