[컴퓨터보안] SSL/TLS

티라노·2025년 5월 26일

컴퓨터 보안

목록 보기
13/13

SSL/TLS 프로토콜

각각 secure socket layer, transport layer security 의 약자이다.
가장 널리 쓰이는 보안 프로토콜에 속한다. TCP 를 조금 더 안정적으로 활용하기 위해 만들어졌다.

  • 검증, 데이터 기밀성, 무결성
  • 전자 인증서 활용
  • HTTP 등이 데이터를 TLS 패킷으로 캡슐화 가능

TLS
TLS는 두 개의 프로토콜 레이어로 이루어져있다.
하나는 핸드셰이킹 레이어 프로토콜이고 하나는 레코드 레이어 프로토콜이다.

레코드 레이어 프로토콜은 메시지를 전달하는 역할이며, 형식을 맞추는 역할을 한다. 실제 인증을 진행하는 부분은 핸드셰이크 프로토콜 레이어이다.

TLS에는 중요한 개념 두 가지가 등장한다.

Connection
통신 자체에 필요한 값들의 집합이다. 하나의 세션과 연결되어있어야 한다.

  • 서버 랜덤, 클라이언트 랜덤
  • 서버 write MAC 키
  • 클라이언트 write MAC 키
  • 서버 write 키
  • initialization vector
  • sequence number

Session
통신을 위한 암호적 파라미터의 집합이다. 하나의 세션을 여러 개의 커넥션이 공유할 수 있으며, 세션을 유지하면 그 안에서 지속적으로 커넥션을 수행할 수 있다.

Session state

master secrete
클라이언트와 서버가 공유하는 48바이트 secret 키, 대칭 키를 만드는 데 사용된다.

resumable
세션이 새로운 커넥션을 받아들일 준비가 되었는지 나타내는 지표이다.

TLS record protocol

데이터 암호화해서 전달, 기밀성과 무결성을 지키는 것이 중요

위와 같은 구조를 사용한다. 이를 통해 운영 모드 등 여러 정보를 저장한다.

TLS handshake protocol

클라이언트와 서버가 응답을 주고받는 프로토콜이다.
이 때 서버와 클라이언트 사이에 key exchange 가 발생한다.

type(1바이트)-length(3바이트)-content(나머지)로 이루어져있다.

type : 보내는 메시지의 타입을 나타낸다. 메시지는 통신을 위한 기능을 수행하는 함수와 비슷한 것이다.

  • 클라이언트 -> 서버 client_hello
  • 서버 -> 클라이언트 server_hello
  • certificate(chain) : 클라이언트에게 서버를 증빙한다.
  • server key exchange
  • certificate request
  • 서버 -> 클라이언트 server_hello_done

최초의 client_hello를 제외하고 모두 서버에서 클라이언트로 보내는 요청이다.

server_hello
클라이언트의 응답에 대해 서버가 준비되었다고 보내는 메시지이다.

키를 만들기 위한 랜덤 값, client_hello에서 제안한 버전 중 서버가 지원하는 가장 최신 버전의 프로토콜, 세션 id, 마찬가지로 지원하는 최신 버전의 cipher suite, extension등이 있다.

extension은 client_hello에 포함되어있다고 해서 서버 측에도 무조건 있어야 하는 것은 아니다.

certificate
해당 사이트의 Root CA가 클라이언트의 trust anchor 목록에 포함되어 있으면 사이트를 신뢰한다.

server_key_exchange
client_key_exchange
공통 pre-master secret을 만들기 위해 진행한다.

pre-master secret 이란?
master secret 을 만들기 위해 필요한 일종의 키이다.

PRF function

Premaster secret으로 master secret을 만들고 이후 Client hello의 랜덤, Server hello의 랜덤을 생성한다.
이 때 PRF를 사용하는데, PRF의 내부는 P_hash function으로 구성되어있다.

0개의 댓글