🔒 전송계층의 보안 요구사항
서버와 클라이언트의 인증, 기밀성, 무결성
🔒 SSL (Secure Socket Layer)
- 소켓층 보안 프로토콜
- 응용층에서 생성된 데이터를 보안하고 압축하는 서비스 제공
- 응용층 ➔ SSL ➔ TCP 계층
- http:// ➔ https:// 바뀜
- 키 교환 알고리즘 : 클라이언트와 서버 간에 6개의 키가 필요
- NULL(키없음), RSA, Anonymous Diffie-Hellman(보안성 없어 중간자 공격에 취약), Ephemeral Diffie-Hellman(RSA or DSS 인증서 교환), Fixed Diffie-Hellman, Fortezza
- 암/복호화 알고리즘 :
- NULL(알고리즘 없음), 스트림 RC, 블록 RC, DES, IDEA, Fortezza
- 메시지 무결성 해쉬 알고리즘 :
- NULL, MD5, SHA-1
- 세션
- 세션은 연결과 다른 뜻을 가진다.
- 세션은 한쪽은 클라이언트의 역할이 되고, 나머지 한쪽은 서버의 역할이 된다.
- 세션이 확립되면 양쪽은 통신에 필요한 공통 정보를 갖게된다.
∎ SSL의 4개의 프로토콜
- Handshake 프로토콜 : 암호 그룹 협의, 인증, 비밀 확립
- ChangeCipherSpec 프로토콜 : 매개변수 비밀들을 언제 사용할지 대기, 활성 상태 과정을 처리
- Alert 프로토콜 : 오류와 비정상 상태를 알림
- Record 프로토콜 : 활성상태일때, 위의 계층에서 받은 메시지를 캡슐화하여 전송계층으로 전달한다. 메시지 단편화, 압축 등 수행 (순서 : 단편화 ➔ 압축 ➔ MAC첨부 ➔ 암호화 ➔ SSL 레코드 헤더 붙이기)
- HelloRequest 메시지 : 세션이 잘못되었거나, 새로운 세션이 필요하면 서버가 클라이언트에게 요구한다.
- ClientHello 메시지 : Handshaking에서 첫 번째로 교환되는 메시지. 클라이언트가 보냄
- ServerHello 메시지 : ClientHello에 대한 서버의 응답 메시지
- Certificate 메시지 : 공개키 인증서 체인목록을 보내는 메시지
- ServerKeyExchange 메시지 : 서버에 의해 생성된 키를 보내는 메시지
- CertificateRequest 메시지 : 서버의 인증을 클라이언트에게 요청하는 메시지
- ServerHelloDone 메시지 : Handshaking의 마지막 메시지
- CertificateVerify 메시지 : 클라이언트가 공개키와 관련된 자신의 개인키를 인증하는 메시지
- ClientKeyExchange 메시지 : 클라이언트가 키를 제공하는 메시지
- Finished 메시지 : 협의가 끝났음을 나타내는 메시지
🔒 TLS (Transport Layer Security)
- SSL의 IETF 표준 버전
- 전송 계층 보안 프로토콜
- SSL과 다른점
- Fortezza가 지원되지 않는다.
- SSL보다 복잡하다. (HMAC과 PRF 의사난수 함수를 사용한다)
⚠️ SSL/TLS는 TCP만 보호하고, UDP는 보호하지 않는다!