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를 사용해 위 과정을 반복하지 않는다.
- Session ID : 매번 연결할 때마다 HandShake 과정을 진행하는 것은 비효율적이기 때문에
- 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 공유 -> 이 값을 사용하여 세션에 사용될 키 생성하는데 이 키가 바로 대칭키
- 추가 설명 : 키 교환에 필요한 정보를 서버에 제공 -> 이 정보를 pre-master secret(난수를 조함하여 생성))이라고 하며 대칭키에 사용되는 것으로 정대 노출이 되어서는 안됨
- Server & Clinet : Change Cipher Spec
- 이제부터 전송되는 모든 패킷을 협상된 알고리즘과 키를 이용하여 암호화 하겠다고 알리는 메세지
- Server & Client : Finished
- TLS HandShake를 성공적으로 마치고 종료
Session keys and TLS HandShake
TLS 프로토콜은 비대칭/공개 키와 대칭 암호화를 모두 사용하며, 각 통신 세션에 대해 대칭 암호화를 위한 새로운 키를 생성해야 한다. 이러한 키를 세션 키라고 한다.
세션키란?
- TLS HandShake가 완료된 후에 TLS를 통한 통신 양측에서 사용하는 대칭 키
- 양측이 세션키에 대해 합의하고 나서 더 이상 공개키와 개인키를 사용할 필요가 없기 때문에
TLS는 각가의 고유 세션에 대해 서로 다른 키를 새성한다. - 하나의 통신 세션을 암호화하는데 사용되는 대칭 암호화 키
- 두 당사자 간에 전송되는 데이터를 암호화하고 해독하는데 한번만 사용되는 임시 키
이후에는 서로 다른 세션 키로 암호화 -> 사용자가 로그인할 때마다 재설정되는 암호화 같음
- 두 당사자 간에 전송되는 데이터를 암호화하고 해독하는데 한번만 사용되는 임시 키
'CS(Computer Science)' 카테고리의 다른 글
CS Study 4주차 : Blocking/Non-Blocking (0) | 2022.11.25 |
---|---|
CS Study 3주차 : 로드 밸런싱 (0) | 2022.11.16 |
CS Study 2주차 : HTTPS method GET vs POST (0) | 2022.11.09 |
CS Study 2주차 : HTTP vs HTTPS / SSL(Secure Sockets Layer) (0) | 2022.11.09 |
CS Study 2주차 : 대칭키와 공개키 (0) | 2022.11.09 |