- SSL(Secure Socket Layer) 1.0버전부터 시작해서 SSL 2.0, SSL 3.0, TLS 1.0을 거치고 TLS 1.3버전까지 올라감
- SSL에서 TLS로 명칭이 변경
- 전송 계층에서 보안을 제공하는 프로토콜
- 클라이언트와 서버가 통신 할 때 제3자가 메시지를 도청하거나 변조하지 못하도록 함
- Client Hello
- 클라이언트가 TLS버전, 암호화 스위트(Cipher Suite), 랜덤값(무작위 문자열), 임시 DH 매개변수를 서버에 보냄
- Server Hello, EncryptedExtensions, Certificate, CertificateVerify
- 서버는 클라이언트로부터 받은 옵션을 확인
- 서버와 클라이언트 둘다 지원하는 가장 높은 TLS 버전을 식별하여 결정
- Cipher Suite 지원 여부 확인
- SSL 인증서, 서버 랜덤값, 임시 DH 매개변수를 클라이언트에 보냄
- 클라이언트와 서버가 서로 교환한 DH 매개변수를 이용하여 세션키를 생성
- Finished
- 세션키를 기반으로 대칭 암호화된 통신이 시작 (보안 세션 시작)
- RSA
- RSA를 사용할 경우 SSL 인증서 안에 서버가 생성한 공개키를 포함
- 취약점이 존재하기 때문에 TLS 1.3부터는 공식적으로 지원하지 않음
- DH
- 클라이언트와 서버가 각각 생성한 매개변수를 교환하여 키를 생성
- 매개변수는 중간에 노출되어도 상관 없음
- 주로 타원곡선을 이용한 ECDHE(Elliptic Curve Diffie-Hellman Exchange)를 사용
- a, b는 Alice와 Bob만이 알고있는 비밀값
- g, p는 공개값
- Alice가 g, p, a로 만든 매개변수 A를 공개값들과 함께 Bob에게 전송
- Bob은 g, p, b로 매개변수 B를 만들고 Alice에게 전송
- Alice와 Bob은 서로에게서 받은 매개변수로 공통의 키값인 K를 생성 가능
- 개인 키 보유자만 알 수 있는 타원곡선을 그림
- 타원곡선을 기반으로 교차점 생성
- 교차점의 수를 기반으로 암호를 설정하는 방법
- 프로토콜, AEAD Cipher Mode, Hash 알고리즘이 나열된 규약
- 암호제품군이라고도 불리며 TLS 1.3에는 5개가 있다
- TLS_AES_128_GCM_SHA256
- TLS_AES_256_GCM_SHA384
- TLS_CHACHA20_POLY1305_SHA256
- TLS_AES_128_CCM_SHA256
- TLS_AES_128_CCM_8_SHA256
- TLS_AES_128_GCM_SHA256에는 3가지 규약이 들어 있음을 의미
- TLS는 프로토콜
- AES_128_GCM은 AEAD Cipher Mode
- SHA256은 Hash 알고리즘
- 데이터 암호화 알고리즘
- AES_128_GCM이라는 것은 128비트 키를 사용하는 AES 알고리즘과 병렬 계산에 용이한 암호화 알고리즘 GCM이 결합된 알고리즘을 뜻함
-
데이터를 추정하기 힘들게 더 작고, 섞여 있는 조각으로 만드는 알고리즘
-
SHA-256인 경우 해시함수의 결과값이 256비트인 알고리즘
-
Hash 알고리즘이 TLS에서 어떻게 쓰이는가
- 주체, 공개키를 포함하는 단순한 데이터 파일
- 주체 : 인증서를 발급한 CA, 도메인, 웹사이트 소유자, 인증서 소유자
- 자신이 직접 SSL 인증서를 만들 수도 있지만 보통은 인증기관인 CA에서 발급한 SSL 인증서를 기반으로 인증작업 수행
- 주체는 클라이언트가 접속한 서버가 클라이언트가 의도한 서버가 맞는지 확인할 때 쓰임
- 공개키는 처음 인증작업을 수행할 때 쓰임
-
인증서를 발급하는 기업들
-
서비스의 도메인, 공개키와 같은 정보를 서비스가 CA로부터 인증서를 구입할 때 제출해야함
-
다양한 유형의 인증서가 존재
- 단일 도메인 : 단 하나의 도메인에 적용되는 인증서
- 와일드카드 : 도메인의 하위 도메인도 포함하는 인증서
- 멀티 도메인 : 관련되지 않은 다수의 도메인에 적용될 수 있는 인증서
-
RSA 키 교환 과정
- 서버에서 공개키와 개인키를 생성하고 SSL인증서를 통해 공개키를 클라이언트에게 전송
- 클라이언트는 공개키로 세션키를 암호화 하여 서버에 전송
- 서버는 세션키를 복호화 하여 통신에 사용
-
PFS(Perfect Forward Secrecy)를 지원하지 않음
- 제3자가 서버의 개인키가 탈취할 경우 SSL Handshake 과정의 모든 데이터를 복호화 하여 볼 수 있다
- ECDHE 방식이 PFS를 지원
- DH 방식은 세션키를 안전하고 간단하게 생성가능하기 때문에 주기적으로 세션키를 변경하여 일정주기마다 다른 세션키를 가짐
- 공격자가 특정 시점의 데이터를 복호화하고 싶을 경우 특정시점의 세션키가 있어야 함