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
      • 효율적인 대칭 키 알고리즘을 이용하여 데이터를 암호화 및 복호화 한다.
  • 공개 키 암호화 방식이 적용된 Digital Certificate를 사용하여 연결된 서버의 Authenticity(출처)를 보장한다.
  • HMAC을 사용하여 교환하는 메시지의 Integrity를 보장한다.
    • 매번 강조하지만 데이터 무결성(Data Integrity)은 데이터가 얼마나 완전하고 일관되고 정확한 지를 나타내는 정도로 데이터 무결성에서의 데이터는 우연하게 또는 의도적으로 변경되거나 파괴되는 상황에 노출되지 않고 보존되어야 한다.
  • OSI 7 Layer를 기준으로 레이어에 정확하게 들어맞지는 않는다.
    • TLS는
      • TCP 위에서(above Transport Layer) 동작한다.
      • 암호화 세션(Encryption Session)을 설정한다.(Session Layer)
      • 데이터 암호화를 제공한다. (Presentation Layer)

TLS Handshake

  • TCP Handshake

  • TLS Handshake
    • 서버와 클라이언트는 먼저 Handshake에 어느 TLS 버전을 사용할지, 어느 Cipher Suite를 사용할 지 결정한다.
      • Ciphersuites
        • Key exchange, Symmetric encryption, HMAC cipher 알고리즘의 결합이다.
    • handshake의 세부 사항은 선택된 설정, 버전에 따라 달라진다.

 

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에서 실행되도록 허용한다.

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

https://newsroom.daewoong.co.kr/archives/11430

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기