개요

SSL [Secure Socket Layer] (SSL version 3는 흔히들 TLS라 불리운다.)는 기밀성, 데이터 무결성, 서버 인증과 클라이언트 인증을 통해 TCP를 향상시킴으로써 안전한 정보 전달을 가능하게 한다. SSL은 응용 계층에 존재하나 개발자의 관점에서는 보안 서비스로 강화된 TCP 서비스를 제공하는 전송 프로토콜이다.

SSL 의 작동 방식

SSL 핸드셰이크

SSL.png
  1. 클라이언트와 서버는 TCP 연결을 설립한다.
  2. 클라이언트는 넌스와 함께 자신의 지원하는 암호화 알고리즘의 목록을 보낸다.
  3. 목록으로부터 서버는 대칭키 알고리즘, 공개키 알고리즘 그리고 MAC 알고리즘을 선택한다. 서버는 이 결과와 인증서, 서버 넌스를 클라이언트에게 돌려준다.
  4. 클라이언트는 인증서를 확인하고 서버의 공개키를 알아낸 후 PMS (Pre-Master Secret)를 생성한다. 이 PMS를 서버의 공개키로 암호화한 후 서버로 보낸다.
  5. 클라이언트와 서버는 같은 키 유도 함수를 사용하여 PMS와 넌스로부터 독립적으로 MS를 생성한다. MS는 두개의 세션키와 두개의 MAC키를 생성하기 위해 분할 된다. 만약 IV를 요구한다면 IV또한 MS로부터 얻는다.
  6. 클라이언트는 모든 핸드셰이크 메시지의 MAC을 전송한다.
  7. 서버는 모든 핸드셰이크 메시지의 MAC을 전송한다. (암호화 되지 않은 상태에서 성립된 핸드셰이크가 훼손되는 것을 방지한다.)

SSL에서 넌스는 "연결 재생 공격"에 대응하기 위해 사용되고 순서번호는 진행중인 세션에서 개별 패킷들의 재생에 대응하기 위해 사용된다.

데이터 전송

SSL은 데이터 스트림을 레코드로 쪼개고 각 레코드에 무결성 검사를 위한 MAC을 덧붙인 후 이 "레코드 + MAC"을 암호화 한다. 이 모든 과정은 서로 나눈 대칭키를 이용하여 이루어 진다. 또한 순서번호는 SSL에서 세그먼트의 순서를 바꾸거나 재생하지 못하도록 추가된다.

SSL 레코드

타입 | 버전 | 길이 | (데이터 | MAC) <= () 부분은 대칭키를 이용하여 암호화 된다. MAC은 레코드 전체의 해시함수이다. 

연결 종료

단순히 TCP FIN을 이용해 연결을 종료하면 절단 공격을 허용하게 됨으로, 레코드의 타입필드에 그 레코드가 SSL 세션 종료를 수행할 것인지 확인하도록 하여서 정말로 송신측에서 원해서 TCP FIN을 날린것인지 확인한다.