TLS(전송 계층 보안)
TLS(전송 계층 보안) 프로토콜은 컴퓨터 네트워크를 통해 통신 보안을 제공합니다.
둘 이상의 통신 응용 프로그램 간에 개인 정보 보호 및 데이터 무결성을 제공하도록 설계되었습니다.
TLS는 웹 브라우저와 웹 서버, 이메일 및 기타 데이터 전송을 보호하는 데 널리 사용됩니다.
TLS 핵심 개념
-
TLS 연결
- 연결은 적절한 서비스를 제공하는 전송(OSI 계층 모델 정의)를 말한다
- TLS에 있어서 이러한 연결은 대등-대-대등 관계이다.
- 연결은 일시적이며, 모든 연결은 한 개의 세션에 연관 되어 있다.
-
- 한 클라이언트와 한 서버 사이의 연관을 말한다
- 세션 시작은 핸드쉐이크 프로토콜을 이용한다
- 세션 시 암호적 보안 매개변수를 정의한다
- 매 연결시 보안 매개변수 협상을 새로 하지 않기 위해 세션을 사용한다
TLS 구조
TLS 설계 목적은 신뢰성 있는 종단 간 안전한 서비스를 제공하기 위해 TCP를 사용하였다
TCP는 단일 프로토콜이 아니고 2계층(IP와 TCP)에 걸친 프로토콜이다
TLS 레코드 프로토콜
다양한 상위-계층 프토토콜에 기본적인 보안 서비스를 제공 한다.
특히 웹 클라이언트/서버 상호 교환을 위해 전송 서비스를 제공하는 HTTP는 TLS 위에서 동작할 수 있다.
TLS 레코드 상위 프로토콜
- 핸드 쉐이크 프로토콜
- 암호 명세 변경 프로토콜
- 경고 프로토콜
- HTTP
- 하트 비트 프로토콜
TLS 레코드 프로토콜
TLS 레코드 프로토콜은 TLS 연결을 위해 2가지 서비스를 제공한다
- 기밀성
- 핸드쉐이프 프토코로은 TLS 페이로드를 대칭 암호화하는데 쓸 공유 비밀키 정의
- 메시지 무결성
- 핸드 쉐이크 프로토콜은 MAC을 생성하는데 사용할 공유 비밀키를 정의한다
TLS 레코드 프로토콜 동작
-
단편화(fragmentation)
- 각 상위 계층 메시지를 작은 블록으로 단편화한다.
-
압축(compression)
- 알고리즘을 자유롭게 선택
- 1024 바이트 이하로 압축
-
메시지 인증 코드(message authentication code) 계산
- HMAC 알고리즘 이용해서 계산
-
대칭 암호로 암호화(encrypted)
- 압축된 메시지와 MAC을 대칭 암호로 암호화(encrypted)
- 암호화 시 내용의 길이가 절대로 1024바이트 이상 늘어나서는 안됨
- 총 길이가 214 + 2048 바이트를 초과하지 않도록 함
-
헤더 붙이기(header attachment)
- 콘텐츠 유형(Contents Type)(8 비트):
- 주 버전(Major Version)(8 비트):
- 부 버전(Minor Version)(8 비트):
- 압축된 길이(Compressed Length)(16 비트):
암호 명세 변경 프로토콜
- 목적: 계류상태를 현재 상태에 복사
- 3가지 SSL-지정 프로토콜 중 가장 간단한 바이트로 구성
- 값 1을 갖는 한 개의 메시지로 구성
- 연결에 사용할 암호도구(cipher suites)갱신
경고 프로토콜
- 대등 개체에게 SSL-관련
- 각 메시지는 2바이트로 구성(그림 5.5(b) 참조)
- 첫 번째 바이트는 메시지 엄밀성 전달을 위해 2가지 값을 갖는다
- 경고(warning)(1)
- 심각(fatal)(2)
- SSL은 즉시 연결을 단절
- 두 번째 바이트에는 특정 경고를 나타내는 코드 포함
- 해당 필드의 존재만 알고, 자세한 코드 내용까지는 암기하지 말자
핸드 쉐이크 프로토콜
- 서버와 클라이언트가 상호 인증
- 암호, MAC 알고리즘, SSL 레코드 안 데이터를 보호하는 데 사용할 암호키 협상
- 메시지는 3개의 필드로 구성
- 유형(Type)(1바이트)
- 길이(Length)(3바이트)
- 내용(Content)(≥0바이트)
핸드 쉐이크 프로토콜 동작
암호 계산
마스터 비밀 생성
공유하는 마스터 비밀은 이 세션을 위해 안전한 키 교환의 방법으로 생성한 일회용 48-바이트 값이다
마스터 비밀 생성은 2단계를 거쳐서 생성한다
- pre_master_secret 교환
- master_secret을 양쪽에서 각각 계산
pre_master_secret 교환 할 때는 2가지 방법이 가능하다
클라이언트와 서버 양쪽은 master_secret을 다음과 같이 계산한다
암호화 알고리즘은 48 바이트 길이의 의사 난수가 생성될 때까지 수행한다.
키 블록 내용 계산은 다음과 같이 정의 된다.
key_block =
PRF(SecurityParameters.mastter_secret, "key explain"),
SecurityParameters.server_random
|| SecurityParameters.client_randeom
암호 매개 변수 생성
암호 명세(CipherSpec)은 마스터 비밀로부터 차례대로 생성되는 많은 매개 변수들을 필요로 한다
위의 매개 변수는 마스터 비밀을 해시하여 필요한 모든 매개 변수로 사용할 충분히 긴 안전한 바이트열로 만든다
마스터 비밀에서 키를 생성하기 위해 pre_master secret에서 마스터 비밀을 생성하는 형식과 동일한 방법을 사용한다
위의 계산 또한 출력이 충분히 길 때까지 수행한다.
이 알고리즘 구조의 결과는 PRF라는 의사 랜덤 함수를 사용해서 비밀을 확장하여 데이터 블록을 생성한다.
의사 랜덤 함수 (PRF)
TLS에서는 PRF라고 하는 의사랜덤 함수를 사용해서 비밀을 확장하여 데이터 블록을 생성한다.
이 방식으로 키를 생성하고 점검한다
이렇게 하는 이유는 공유한 비밀 값이 작지만, 긴 데이터 블록을 만들고자 하는데 있다.
- A(0) = seed
- A(i) = HMAC_hash(secret, A(i-1))
아래는 TLS 함수 p_hash(secret, seed) 개요도이다.
데이터 확장 함수에서는 HMAC 알고리즘을 사용하는데 MD5나 SHA-1을 기본 해시 함수로 이용한다.
보면 알겠지만, 원하는 길이의 데이터를 생성하기 위해 p_hash는 필요한 만큼 반복해서 적용한다.
또한, PRF는 가능한 안전하게 만들기 위해 2개의 해시 알고리즘을 사용한다
PRF(secret, label, seed) = P_<hash>(secret, label∥seed))
하트 비트 프로토콜
In 컴퓨터 네트워크, 하트 비트의 의미
시스템이 정상적으로 동작한다는 걸 나타내기 위한, 또는 시스템의 다른 부분과 동기화를 하기 위해 하드웨어나 소프트웨어가 생성하는 주기적인 신호를 말한다
즉 일반적으로 하트비트 프로토콜은 프로토콜 개체의 가용성을 모니터링 할 때 사용하는 프로토콜이다.
하트 비트 프로토콜은 TLS Record Protocol 위에서 구동 되면, 2개의 메시지 유형으로 구성된다
- heartbeat_request
- 핸드 쉐이크 프로토콜 1단계에서 사용된다
- 각 대등은 자신이 하트비트 지원 여부를 표명한다
- 또는 단순히 heartbeat_reequest 메시지만 보낸다고 표명
- 대등은 요청에 대한 응답으로 heartbeat_response 메세지로 응답 할지말지를 표명
하트 비트의 목적
- 송신자는 수신자가 아직 작동하고 있는지 확인할 수 있다.
- 설사 해당 호스트가 기본 TCP 연결 상태에서 잠시동안이나마 동작하고 있는지를 확인 할 수 있다.
- 휴지(idle) 상태의 연결에서 하트비트는 활성화 상태를 유지한다
- 그래서 휴지 연결 상태를 허용하지 않는 IPS가 차단하지 못하게 한다
SSL/TLS 공격
- 핸드셰이크 프로토콜에 대한 공격
- 레코드와 응용 데이터 프로토콜에 대한 공격
- PKI에 대한 공격
- 기타 공격
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
'Computer Science > 네트워크' 카테고리의 다른 글
SSH (0) | 2023.05.22 |
---|---|
HTTPS (0) | 2023.05.22 |
핸드 쉐이크 프로토콜 (0) | 2023.05.17 |
TLS 세션 (0) | 2023.05.15 |
HTTP (0) | 2023.05.13 |