본문 바로가기

CS(Computer Science)

CS Study 3주차 : TLS/SSL HandShake

TLS(Transport Layer Security)

SSL(Secure Sockets Layer)라는 이전의 암호화 프로토콜에서 발전한 것으로 인터넷 상의 커뮤니케이션에서 

개인의 정보와 데이터 보안을 위해 설계됭어 널리 채택된 보안 프로토콜이다.

 

하는일

  • 암호화 : 제3자로부터 전송되는 데이터를 숨긴다
  • 인증 : 정보를 교환하는 당사자가 요청된 당사자임을 보장한다.
  • 무결성 : 데이터가 위조되거나 변조되지 않았는지 확인한다.

 

TLS HandShake

TLS 연결은 TLS HandShake를 사용하는데 사용자가 TLS를 사용하는 웹 사이트를 접속하면 클라이언트와 웹 서버간에 TLS HandShake가 시작된다.

 

클라이언트는 서버의 인증서를 받아 무결성을 확인하고 신뢰할 수 있는 서버라면 암호화 통신에 사용할 대칭키를

서버의 공개키로 암호화하여 전달한다.

여기서 데이터를 주고 받기 전에 서버의 무결성을 확인하고 대칭키를 전달하는 과정이 TLS HandShake이다.

 

TLS HandShake를 하는 동안 클라이언트와 웹 서버가 하는 일

  • 사용할 TLS 버전 지정
  • 사용할 암호 제품군 지정 - 공유된 암호화 키 또는 세션 키와 같은 세부 정보를 명시화하는 알고리즘 집합
  • 서버의 TLS 인증서를 사용하여 서버의 신원을 인증
  • HandShake가 완료된 후 메세지를 암호화하기 위한 세션 키 설정

 

TLS HandShake 진행 과정

  • Cilent : Client Hello
    • 클라이언트가 서버에서 Client Hello 메시지 전송
    • 패킷 내에는 TLS Version, Client가 지원하는 암호화 방식
      Client Random Data(클라이언트에서 생성한 난수로 대칭키를 만들 때 사용)
      Session ID, SNI(서버명)이 포함 되어 있음
      • Session ID : 매번 연결할 때마다 HandShake 과정을 진행하는 것은 비효율적이기 때문에
        최초 한번 전체 HandShake 과정을 진행하고 Session ID를 가진다. 후에 이 Session ID를 사용해 위 과정을 반복하지 않는다.

 

  • Server : Server Hello
    • 클라이언트가 보낸 Client Hello에 대한 서버의 응답
    • TLS Version, 암호화 방식(Client가 보낸 암호화 방식 중, 서버가 사용 가능한 암호화 방식을 선택),
      Server Random Data(서버에서 생성한 난수, 대칭키를 만들 때 사용), Session ID(유효한 ID)
  • Server : Server Certificate
    • 서버의 인증서를 클라이언트에 보내는단계(필요에 따라 CA의 Certificate도 함꼐 전송)
    • 클라이언트는 이 패킷을 통해 서버의 인증서가 무결한지 검증
  • Server : Server Hello Done
    • 서버가 클라이언트에게 보낼 메세지를 모두 보냈다는 뜻

 

  • Client : Client Key Exchange
    • 인증서가 무결한지 검증 되었으면 클라이언트의 난수와 서버의 난수를 조합하여 대칭키 생성
    • 생성한 대칭키를 서버의 공개키로 암호화
    • 암호화한 정보를 서버에게 전송
      • 추가 설명 : 키 교환에 필요한 정보를 서버에 제공 -> 이 정보를 pre-master secret(난수를 조함하여 생성))이라고 하며 대칭키에 사용되는 것으로 정대 노출이 되어서는 안됨
        이 값을 서버의 공개키로 암호화하여 전송 -> 서버는 개인키로 복호화 가능 => 서로가 pre-master secret 공유 -> 이 값을 사용하여 세션에 사용될 키 생성하는데 이 키가 바로 대칭키

 

  • Server & Clinet : Change Cipher Spec
    • 이제부터 전송되는 모든 패킷을 협상된 알고리즘과 키를 이용하여 암호화 하겠다고 알리는 메세지
  • Server & Client : Finished
    • TLS HandShake를 성공적으로 마치고 종료

 

 

Session keys and TLS HandShake

TLS 프로토콜은 비대칭/공개 키와 대칭 암호화를 모두 사용하며, 각 통신 세션에 대해 대칭 암호화를 위한 새로운 키를 생성해야 한다. 이러한 키를 세션 키라고 한다.

 

세션키란?

  • TLS HandShake가 완료된 후에 TLS를 통한 통신 양측에서 사용하는 대칭 키
  • 양측이 세션키에 대해 합의하고 나서 더 이상 공개키와 개인키를 사용할 필요가 없기 때문에
    TLS는 각가의 고유 세션에 대해 서로 다른 키를 새성한다.
  • 하나의 통신 세션을 암호화하는데 사용되는 대칭 암호화 키 
    • 두 당사자 간에 전송되는 데이터를 암호화하고 해독하는데 한번만 사용되는 임시 키
      이후에는 서로 다른 세션 키로 암호화 -> 사용자가 로그인할 때마다 재설정되는 암호화 같음