TLS Protocol (Transport Layer Security Protocol)
TLS 프로토콜
- 인터넷상에서의 모든 종류의 Traffic을 암호화하여 송수신하기 위해 사용되는 프로토콜이다.
- SSL을 계승한 프로토콜이며, SSL과 TLS는 이름이 혼용되어 불리고 있으나,
SSL 2.0 이전 버전은 TLS와 호환되지 않는다.
- CA와 PKI 메커니즘을 기반으로 동작한다.
- TLS가 제공하는 보안 요소는 아래와 같다:
- Confidentiality (기밀성)
- Client와 Server가 서로 주고받은 데이터는 오직 그들만 Read해야 한다. - Integrity (무결성)
- Client와 Server는 공격자의 공격에 의해 발생되는
Communicaiton Error나 Data Tampering(데이터 조작)을 감지할 수 있어야 한다. - Authentication (인증)
- Client와 Server는 서로 상대방이 누구인지 확인할 수 있어야 한다.
- Transport Layer(L4)에서 지켜야 할 데이터의 종류는 아래와 같다.
- Server로부터 Load 되는 Web Page
- Mobile App이 Client의 화면에 표시하는 데이터
- Client가 Server에 제출하는 민감 정보
History of TLS (TLS의 역사)
Protocol | Description |
SSL 2.0 (1995) |
- Netscape사에서 고안되었다. |
SSL 3.0 (1996 - 2015) |
- 2015년에 IETF에 의해 공식적으로 Deprecated되었다. |
TLS 1.0 (SSL 3.1) (1999) |
|
TLS 1.1 (SSL 3.2) (2006) |
|
TLS 1.2 (SSL 3.3) (2008 - Current) |
- 현재 가장 활발히 사용되고 있다. |
TLS 1.3 (SSL 3.4) (2018 - Current) |
TLS Handshake Mechanism
- 리소스를 많이 차지해 상대적으로 느린 Public Key Cryptosystem과
안전한 키 분배가 어려운 Symmetric Key Cryptosystem의 단점을 보완하기 위해 등장한 메커니즘이다.
- TLS 프로토콜을 구성하는 3가지 요소는 아래와 같다.
- Cipher Suite Negotiation
- Client와 Server가 서로 사용가능한 Protocol과 Cipher Suite을 파악한다.
- Authentication
- 의도한 상대와 연결하고 있는지를 확인한다.
- CAs가 발급하는 인증서 등이 이에 대한 메커니즘이다.
- Key Exchange
- Client와 Server가 Session Key를 서로 안전히 나눠갖는다.
Simplified TLS Protocol (간단한 TLS 프로토콜의 구조)
* Legend (범례)
Legend | Description |
Cipher List | - Client가 수행할 수 있는 모든 Cryptosystem의 리스트 |
Selected Cipher | - Server가 채택한 Cryptosystem |
Certificate | - Server에 대한 인증서 - Client는 인증서를 수신함으로써 Server의 Public Key를 알아낼 수 있다. |
\(R_i\) | - Nonce |
\(S\) | - Pre-Maset Secret (임시 키) |
\(K\) | - Master Secret (최종 키) - \(K = h(S, R_A, R_B)\) |
\(h( )\) | - Hash Function - 일반적으로, PRF 혹은 HKDF 중 하나로 해싱한다. * PRF (Pseudorandom Function) * HKDF (HMAC-Based Extract-and-Expand Key Derivation Function) |
\(\mathrm{Finished}\) | - \(K\)에 대한 계산이 완료되었음을 알리는 Signal |
\(\mathrm{EverythingToDate}\) | - 지금까지 통신 과정에서 나누었던 모든 내용 - 무결성 검증을 위해 사용된다. |
Client |
Session Open Request ▶ Cipher List ▶ \(R_A\) ▶ |
Server |
◀ Certificate ◀ Selected Cipher ◀ \(R_B\) |
||
\(\{S\}_{Server}\) ▶ \(E( \; K, h( \; \mathrm{Finished}, \; K, \; \mathrm{EverythingToDate} \; ) \; )\) ▶ |
||
◀ \(h( \; \mathrm{Finished}, \; K, \; \mathrm{EverythingToDate} \; )\) |
||
◀ Connection Established ▶ (Data Protected with \(K\)) |
- Client 입장에서는 Server가 인증되지 않았지만,
Key Server의 Public Key로 암호화하므로 Server만이 복호화할 수 있기 때문에 인증여부는 문제가 되지 않는다.
- Server 입장에서는 인증서만 건네주고, Key를 받아내는 입장이기 때문에 Client의 인증 여부가 중요하지 않다.
TLS Cipher Suite Negotiation
- TLS에서 Server와 Client가 통신에 사용할 Cryptosystem을 선정하는 과정이다.
Cipher Suite
- Cryptographic Function과 Cryptographic Technique들의 Collection이다.
- Cipher Suite의 자세한 구성은 아래와 같다.
- Key Exchange Algorithms (키 교환 알고리즘)
- Key를 교환하는 알고리즘이다.
- ECDHE 등 - Authentication Algorithms (인증 알고리즘)
- ECDSA 등 - Data Encryption Algorithms (데이터 암호 알고리즘)
- 데이터를 암호화하는 알고리즘이다.
- AES 등 - Data Integrity Algorithms (무결성 알고리즘)
- 데이터 오류 및 변조를 탐지하는 알고리즘이다.
- SHA-Family 등
Example. Client Hello Packet Structure
Example. TLS v 1.2 Cipher Suite Negotiation
TLS Authentication
- TLS 1.2에서는 인증 알고리즘으로 RSA를 사용했으며,
그 이후 TLS 1.3에서는 인증 알고리즘으로 ECDSA를 사용한다.
(ECDSA가 더 작은 Key Space로 더 높은 효율의 보안성을 보장하기 때문이다.)
- TLS에서는 Client가 Server의 Certificate를 받아 통신 대상이 서버임을 확인하고,
Server의 Public Key로 Session Key를 암호화하여 Server에 전송한다.
TLS Key Exchange
- TLS 1.3 이전까지는 키 교환 메커니즘으로 RSA Key Exchange Algorithm을 사용하다가,
TLS 1.3부터는 ECDHE Algirithm를 사용하기 시작했다.
- Client와 Server는 Pre-Master Secret을 PRF 혹은 HKDF를 통해 Master Key로 해싱한다.
* RSA Key Exchange Algorithm (URL)
- Client가 CA의 Public Key를 통해 Server의 Certificate를 검증하고
Pre-Master Secret을 RSA 암호화 알고리즘으로 암호화하여 전송하면
Server는 이를 RSA 복호화 알고리즘으로 복호화하여 Pre-Master Secret을 서로 소지한 상태가 된다.
- 각자 Pre-Master Secret를 해싱하여 Master-Secret을 생성한다.
- 공격자가 이들이 주고받는 메시지를 기록하거나,
Server의 Decryption Private Key를 훔쳐갈 가능성이 존재해
PFS가 보장되지 않는다.
* ECDHE Algirithm (Elliptic Curve Diffie-Hellman Key Exchange Algirithm) (URL)
- Client가 Server가 Public Value를 서로 공유하고,
본인의 Private Value와 서로 공유한 Public Value를 조합하여 Pre-Master Secret를 생성한다.
- 이때, 각 Session별로 Ephemeral한 Public Value를 사용한다.
- 각자 Pre-Master Secret를 해싱하여 Master-Secret을 생성한다.
* PRF (Pseudorandom Function)
* HKDF (HMAC-Based Extract-and-Expand Key Derivation Function) (RFC 5869) (URL)
TLS 1.2 (URL)
- RTT가 상대적으로 큰 편으로, 이를 개선한 TLS 1.3이 개발되었다.
* RTT (Round Trip Time)
- 패킷이 네트워크를 되돌아오는데 까지 소요된 시간이다.
TLS 1.3 (URL)
- Outmode된 Algorithm들과 Cipher들이 제거되었다.
(RSA Key Exchange가 제거되고, DHE 혹은 ECDHE를 사용하게 함으로써 PFS가 보장되었다.)
- Hello 과정에서 Client와 Server의 Public Value가 공유된다.
- Negotiation 과정을 줄여 성능이 개선되었다.
- 지원하는 Cipher Suite의 개수를 줄였다.
- Block Cipher들을 모두 제거하고, AEAD Bulk Encryption을 채택했다.
- HKDF Cryptographic Extraction과 Key Derivation을 사용하기 시작했다.
- 전체 Handshake 과정에 서명하는 과정이 추가되었다.
- 서명을 위해 EdDSA(Twisted Edwards Curve)를 지원하기 시작했다.
- TLS 1.3 이전에는 Communication 과정에서 사용할 Cipher, Key Exchange, Authentication을
모든 가능한 모든 조합 리스트를 Server에 전송했는데 반해,
TLS 1.3 부터는 사용할 Cipher, Key Exchange, Authentication을
각각 따로 전송하여 굳이 모든 경우의 수를 계산하지 않아도 지장이 없게 구현했다.
Signing the Entire Transcript
- Negotiation까지 포함한 전 과정에 서명하는 과정을 추가하여
Client가 전송한 메시지에 대한 무결성을 입증한다.
- 이를 통해 Downgrade Attack(FREAK)을 방어할 수 있다.
Downgrade Attack (FREAK)
TLS Supporting Architecture (TLS 기반 기술)
Reference: Information Security: Principles and Practice 2nd Edition
(Mark Stamp 저, Pearson, 2011)
Reference: Computer Security: Principles and Practice 3rd Edition
(William Stallings, Lawrie Brown, Pearson, 2014)
Reference: 2022학년도 1학기 홍익대학교 네트워크 보안 강의, 이윤규 교수님