SSL/TLS
- Secure Sockets Layer (SSL)
- TLS의 전임자(Predecessor)라고 볼 수 있다.
- Transport Layer Security (TLS)
- Version 1.2
- Version 1.3 (현재)
- TLS 1.2에 비해 향상된 성능
- Obsolete and insecure features / algorithms를 제거하였다.
- DH에 존재했던 Key Recovery Attack을 고쳤다.
- Security of SSL/TLS
- Confidentiality: 세션 키를 사용한 암호화
- Integrity: MAC(Message Authentication Code)
- Non-repudiation: Signatures
- Hybrid Cryptosystem이다.
- Key Encapsulation Scheme
- 공개 키 암호화 방식으로 키 교환 절차를 보안한다.
- Data Encapsulation Scheme
- 효율적인 대칭 키 알고리즘을 이용하여 데이터를 암호화 및 복호화 한다.
- Key Encapsulation Scheme
- 공개 키 암호화 방식이 적용된 Digital Certificate를 사용하여 연결된 서버의 Authenticity(출처)를 보장한다.
- HMAC을 사용하여 교환하는 메시지의 Integrity를 보장한다.
- 매번 강조하지만 데이터 무결성(Data Integrity)은 데이터가 얼마나 완전하고 일관되고 정확한 지를 나타내는 정도로 데이터 무결성에서의 데이터는 우연하게 또는 의도적으로 변경되거나 파괴되는 상황에 노출되지 않고 보존되어야 한다.
- OSI 7 Layer를 기준으로 레이어에 정확하게 들어맞지는 않는다.
- TLS는
- TCP 위에서(above Transport Layer) 동작한다.
- 암호화 세션(Encryption Session)을 설정한다.(Session Layer)
- 데이터 암호화를 제공한다. (Presentation Layer)
- TLS는
TLS Handshake
- TCP Handshake
- TLS Handshake
- 서버와 클라이언트는 먼저 Handshake에 어느 TLS 버전을 사용할지, 어느 Cipher Suite를 사용할 지 결정한다.
- Ciphersuites
- Key exchange, Symmetric encryption, HMAC cipher 알고리즘의 결합이다.
- Ciphersuites
- handshake의 세부 사항은 선택된 설정, 버전에 따라 달라진다.
- 서버와 클라이언트는 먼저 Handshake에 어느 TLS 버전을 사용할지, 어느 Cipher Suite를 사용할 지 결정한다.
Cipher Suite Selection
- Key Exchange
- Elliptic-Curve Diffie-Hellman Ephemeral
- Key Exchange Authentication
- RSA
- Encryption
- AES256-GCM
- Hashing
- SHA384
TLS Handshake Illustrated
Client Hello
- Client random number
- 클라이언트는 random number를 생성하여 이것을 서버에 전송한다.
- 랜덤 넘버는 shared secret generation에 사용된다.
- Preferred Cipher Suites
- 클라이언트가 지원하는 Cipher Suites의 리스트를 전송한다.
- Extensions
- TLS에 정의된 Extension feature
Server Hello
- Server random Number
- 서버는 random number를 생성하고 이것을 클라이언트에 전송한다.
- 랜덤 넘버는 shared secret generation에 사용된다.
- Selected Cipher Suites
- 서버는 서버와 클라이언트의 cipher suites를 비교한다.
- 최종적으로 선정하고 클라이언트에 알린다.
- Cipher Suites Selection
- TLS에 정의된 각각의 Cipher suites는 코드가 존재한다.
- 서버는 먼저 양쪽에서 모두 지원하는 cipher suites의 리스트를 만든다.
- 그리고 가장 strongest한 것을 고른다. (더 높은 코드 넘버)
- Extensions
- 서버가 지원하는 extensions를 알린다.
- TLS Extensions
- Extension은 TLS 버전이 표준화된 후 특정 특징들을 추가할 수 있도록 허용한다.
- 클라이언트는 extension의 이번 세션에 사용하기를 원하는리스트를 전달한다.
- 서버는 지원하는 익스텐션을 답장한다.
- Extension 예시
- Session Ticket
- 설립된 세션이 재개되도록 허용한다.
- 티켓은 나중에 사용되기 위해 서버로부터 클라이언트에 보낸다.
- 재협상(handshake)의 need를 제거한다.
- Server Name Indication (SNI)
- 다수의 SSL/TLS certificates가 동일한 IP와 Port에서 실행되도록 허용한다.
- Session Ticket
Server Certificate
- 서버는 RSA 증명서를 아이덴티티를 증명하기 위해 보낸다.
- 증명서는 signed document와 public key for decryption으로 구성되어 있다.
Server Key Exchange
- 서버는 session key derivation에 필요한 parameters를 보낸다.
- Server Key Exchange
- Diffie-Hellman
Server Hello Done
- Handshaek에서 서버의 역할은 완료되었다.
Client Key Exchange
- 클라이언트는 session key derivation에 필요한 parameters를 보낸다.
- parameters는 선정된 cipher suite에 따라 다양하다.
- 이 이후에 양쪽은 모두 shared secret calculation에 필요한 모든 정보를 보유하게 된다.
이제, 양쪽은 모두 shared master secret을 계산한다.
그리고 master secret으로부터 multiple keys를 도출한다.
- key for message
- key for HMAC
- Initialization Vectors for AES
(부록) RSA Key 교환을 자세히 들여다보면, PRF(Pseudo-Random Function)이 사용되며, AES의 대칭 키가 만들어진다. 이는 Client/Server Write Key, Client/Server Write IV, Client/Server Mac Key를 포함한다.
Forward Secrecy(a.k.a Perfect Forward Secrecy)
- 서버의 private key가 노출되더라도 session key가 드러나지 않도록 보장하는 것이다. 즉 복구불가능한 고유한 session key를 생성한다.
References
'Computer Science > Security' 카테고리의 다른 글
Software Security: Memory Safety, Type safety를 중심으로 (0) | 2022.04.14 |
---|---|
Public-Key Cryptosystem: 공개키 암호화 방식에 대해 (0) | 2022.04.13 |
Fundamental Concept of Cryptosystem: 개념과 역사를 중심으로 (0) | 2022.04.13 |
Access Control: 정책과 구현 방식 (0) | 2022.04.13 |
Authentication Mehod: 해시 함수, 패스워드(salt), 생체 인증 (0) | 2022.04.13 |