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

[네트워크] TCP보안 SSL(Secure Sockets Layer)

Cloud Travel 2012. 11. 20. 22:37

* SSL

 - Secure Sockets Layer

 - 웹에서 보안이 필요한 경우 거의 SSL을 사용한다.

 - 전자상거래의 경우 주고 받는 메세지 또는 저장된 메세지가 제 3자에 의해서 변경되면 안된다. 

   또한, 고객은 서버가 자신이 알고 있는 서버인지를 확인이 가능해야 한다.

  > 이러한 요구를 충족시키기 위해서 탄생한 것이 SSL이다.

 - Nestscape에서 1993년에 개발 하였으며, SSL 3.0까지 개발 되었다.

 - SSL의 필요성이 부각되면서 IETF에서는 SSL 3.0을 약간 변형시켜 TLS(transport layer security)를 만들었다.

  > TLS라고도 불리지만, SSL이라는 이름이 더 많이 불린다.

 - 기밀성, 무결성, 인증, 암호화, 웹서버의 인증등의 역할을 해준다.

 - TLS에서 보이듯이 운송계층 위에서(어플리케이션과 운송계층 사이) 서비스를 제공해준다.

 - SSL은 응용프로그램에 API로 제공되며 이를 응용하여 구현한다.

 ※ SSL vs PGP

  - SSL을 쓰면 email또한 보안되지 않을까?(실질적으로 PGP가 필요없지 않을까?) 실제로 SSL로 PGP역할을 할 수 있다.

  - SSL은 TCP를 기반으로 움직이는 모든 어플리케이션에 적용이 가능한 형태이다.

  - PGP는 메일 서비스만을 위해 생성된 프로토콜이다.

   > 따라서, SSL은 범용성이 있기 때문에 PGP보다 복잡하고 크다. 


* 대칭키 설정 문제

 - 키 설정 = 키 분배 : 통신 매체 간에 공유하는 대칭키를 설정, 분배하는 절차가 필요하다.

 - 키 관리 : 오래된 키는 새로운 키로 업데이트 된다. 이러한 업데이트 및 새로운 키에 대한 관리가 필요하다.

  > 세션키 : 일정 기간 동안 사용되는 대칭키를 세션키라고 부른다.

  

* 세션키 설정 방법

 ⓐ 서버 기반 키 분배 : 신뢰 할 수 있는 서버(Trusted third party, TTP)가 세션키를 생성하여 암호화 하여 전송한다.

  - 서버는 상대방이 가지고 있는 서버와 통신하는 대칭키를 이용하여 세션키를 전송해준다.

  - 서버와 클라이언트간이 사용하는 대칭키는 이와 관련된 프로그램 설치시 자동으로 설정될 것이다(전제)

 ⓑ 공개키를 이용한 키 교환 : 서버없이 상대방에게 직접 전송한다.

  - 상대방의 공개키로 암호화하여 대칭키를 함께 보내는 방식이다.

  - 공개키를 인증해줄 인증기관과 인증서가 있다는 것이 전제이다.

 ⓒ 키 교환 알고리즘(Diffie-Hellman Algorithm) : 비밀키를 각 종단에서 생성하여 같이 사용한다.

  - 키 또는 비밀값을 만들어주는 알고리즘

  - 서로 생성한 키 or 비밀값을 사용하여 둘 만 사용하는 대칭키를 생성하는 알고리즘이다.

  - 중간자 공격의 여부가 존재한다.

  - 키 생성 절차 > 공개된 값 : 큰 값의 소수 p, generator g(primitive root of p)

   

* SSL 절차

 - Handshake : client가 server를 인증하고 key계산에 필요한 값들을 교환하는 단계

  

 - crypto algorithms의 협상

  > 클라이언트는 사용할 암호화 알고리즘, 해쉬 크기, Block chaining을 사용한다면 IV값을 서버에 전달하여 선택하게 한다.

 - 마지막에 현재까지의 메세지를 MAC계산하여 재전송하는 것은 중간자공격을 받지 않은 것을 확인 하기 위한 것.

 - nonce를 사용하는 이유는 재사용 공격을 방지하기 위한 것.

 - key계산 : key 계산 및 분배는 위에서 알아본 3가지 방법중 하나를 선택해서 사용한다.

  > 사용되는 key는 단방향으로만 사용되기 때문에 각각의 방향으로 향하는 대칭키, 비밀값(HMAC에서 사용할)을 생성한다.

  > 서로 전달받은 값들을 일렬로 늘어 세운후 적당한 길이로 짤라서 키를 부여 해준다.

 - 인증서와 공개키를 전달해주는 것에서 Client에게 server를 증명해주고, crypto협상을 하며, key를 설정한다.


* SSL Record

  

 - record header : content type, version, length

 - MAC계산시 데이터와 함께 섞이는 값

  > Mx : HMAC을 위한 비밀 값

  > Sequence Number : 보내는 패킷의 sequence 번호. 가로채기 및 순서 변경을 막기 위해서 보안프로토콜에서도 계산

  > type : TCP 연결(0)을 위한 것인지 종료(1)를 위한 것인지를 확인하는 값