트랜스포트 레이어 보안 (TLS)과 보안 소켓 레이어 (SSL)는 암호 규약이다. 그리고 '트랜스포트 레이어 보안'이라는 이름은 '보안 소켓 레이어'가 표준화 되면서 바뀐 이름이다. 이 규약은 인터넷 같이 TCP/IP 네트워크를 사용하는 통신에 적용되며, 통신 과정에서 전송계층 종단간 보안과 데이터 무결성을 확보해준다. 이 규약은웹 브라우징, 전자 메일, instant messaging, voice-over-IP (VoIP) 같은 응용 부분에 적용되고 있다. TLS는 IETF표준 규약이다. 최종 갱신은 RFC 5246이고, 최종 갱신 버전은 넷스케이프에서 만든 SSL 표준을 바탕으로 했다.
2. 내용
TLS는 클라이언트/서버 응용 프로그램이 네트워크로 통신을 하는 과정에서 도청, 간섭, 위조를방지하기 위해서 설계되었다. 그리고 암호화를 해서 최종 단의 인증, 통신 기밀성을 유지시켜준다.
TLS의 3단계 기본 절차:
i. 지원 가능한 알고리즘 서로 교환
ii. 키 교환, 인증
iii. 대칭 키 암호로 암호화하고 메시지 인증
우선 첫 단계에서 서버와 클라이언트는 암호 스위트를 교환한다. 이 단계에서 키 교환과 인증에사용될 암호화 방법, 메시지 인증 코드(MAC)가 결정된다. 키 교환과 인증 알고리즘은 공개키방법을 사용하거나 미리 공유된 키(TLS-PSK)를 사용할 수도 있다. 메시지 인증 코드들은 HMAC 해시 함수로 만든다. SSL에서는 비 표준 무작위 함수를 사용한다.
일반적인 알고리즘:
ü 키 교환: RSA, Diffie-Hellman, ECDH, SRP, PSK
ü 인증: RSA, DSA, ECDSA
ü 대칭 키 암호: RC4, Triple DES, AES, IDEA, DES, Camellia.
ü 해시함수: TLS에서는 HMAC-MD5 또는 HMAC-SHA. SSL에서는 MD5와 SHA.
3. 키 교환 과정
Full Handshake
1. 클라이언트는 서버에게 "Client hello" 메시지를 전달한다. 이때, 클라이언트는 Cipher suits에서 지원하는 랜덤 값을 같이 첨부하여 보낸다.
2. 서버는 "Server hello" 메시지를 클라이언트에게 전송해 준다. 이때 서버도 랜덤 값을 같이 보낸다.
3. 서버는 자신의 인증서를 클라이언트에 보내어 클라이언트가 인증할 수 있도록 한다. 또한 이때, 클라이언트에게 인증서 양식을 요청할 수 있다.
4. 만약 서버가 클라이언트에게 인증서를 요청하였다면, 클라이언트는 인증서를 서버에게 전송한다.
5. 클라이언트는 서버가 준 인증서의 공개 키를 가지고 임의의 Pre-Master Secret을 암호화 한 뒤, 이것을 서버에게 전송한다.
6. 서버가 Pre-Master Secret을 받으면, 서버와 클라이언트는 이 Pre-Master Secret을 가지고 각각 Master Secret과 세션 키를 생성한다.
7. 클라이언트는 새로 생성된 세션 키를 Hashing 및 메시지 암호화에 사용하기 위해 "Change cipher spec"을 서버에게 전송한다. 이 때, "Client finished" 메시지도 함께 전송한다.
8. 서버는 "Change cipher spec"을 받은 뒤 클라이언트에게 "Server finished"메시지를 전송한다.
*Change cipher spec : Record Layer에서 데이터를 암호화 할 때, 클라이언트-서버 간에 약속한 암호화 알고리즘을 사용한다는 것을 알려준다.
Abbreviated handshake
1. 클라이언트는 서버에게 "Client hello" 메시지를 전송한다. 이 때, session이 재 시작될 세션 ID를 사용한다.
2. 서버는 자신의 세션 캐시 목록에서 클라이언트의 세션 ID와 매칭되는 것이 있는지 확인한다. 만약 있다면, 서버는 연결을 재 시작할 수 있으므로 "Server hello" 메시지를 클라이언트에게 전송한다.
만약 세션 ID를 찾지 못한다면, 서버는 새로운 세션 ID를 생성하며, 클라이언트-서버 간 새로 연결이 수립될 때처럼 Handshake가 이루어 진다.
3. 클라이언트와 서버는 "Change cipher spec"을 다시 교환해야 하며, 이어서 "Client finished", "Server finished" 메시지를 주고 받는다.
4. 이제 클라이언트-서버 간에 연결이 다시 이루어 졌고, 암호화 된 채널을 이용해 데이터를 교환할 수 있다.


