데이터그램 전송 계층 보안
1. 개요
데이터그램 전송 계층 보안(DTLS)은 여러 RFC 문서에 의해 정의되며, 사용자 데이터그램 프로토콜(UDP) 등과 함께 사용하기 위한 보안 프로토콜이다. DTLS는 TLS 1.1, TLS 1.2, TLS 1.3을 기반으로 하며, DTLS 1.3은 TLS 1.3과 동등한 보안을 제공한다. 다양한 프로그래밍 언어 및 운영 체제에서 DTLS를 지원하는 라이브러리가 존재하며, AnyConnect VPN 클라이언트, 오픈커넥트, Cisco InterCloud Fabric, Cato Networks, Zscaler 터널 2.0 등 다양한 애플리케이션에서 사용된다. 2013년에는 CBC 모드 암호화를 사용할 때 타이밍 공격에 취약하다는 점이 발견되었다.
| 이름 | 데이터그램 전송 계층 보안 |
|---|---|
| 영문명 | Datagram Transport Layer Security |
| 약자 | DTLS |
| 종류 | 통신 프로토콜 |
| RFC | RFC 4347 RFC 6347 RFC 9147 |
|---|
| 관련 문제 | TCP over TCP (TCP 터널링) 문제 발생 가능 |
|---|
-
세션 계층 프로토콜 -
SPDY
SPDY는 웹 페이지 로딩 속도 향상을 위해 구글에서 개발한 네트워크 프로토콜로, HTTP의 전송 방식을 재정의하여 헤더 압축, 다중화, 우선순위 지정, 서버 푸시 등의 기능을 제공하고 HTTP/2 개발에 영향을 미쳤으나 현재는 지원이 중단되었다. -
세션 계층 프로토콜 -
SOCKS
SOCKS는 인터넷 트래픽을 프록시 서버를 통해 라우팅하는 클라이언트-서버 프로토콜이며, 여러 버전이 존재하고 IPv6, UDP, DNS 조회 등을 지원하며, 인터넷 필터링 우회, VPN 기능 제공 등 다양한 용도로 사용된다. -
전송 계층 보안 -
공개 키 기반 구조
공개 키 기반 구조(PKI)는 공개 키 암호화를 기반으로 안전한 통신과 개체 식별을 가능하게 하는 기술로서, 디지털 인증서를 통해 공개 키를 특정 개체에 연결하고 인증서를 관리하며, 인증 기관(CA), 등록 기관(RA) 등 다양한 구성 요소로 이루어져 인증서 발급, 관리, 배포, 사용 및 폐기와 관련된 역할, 정책, 하드웨어, 소프트웨어 및 절차의 집합을 포함한다. -
전송 계층 보안 -
HTTPS
HTTPS는 HTTP에 보안 기능이 더해진 통신 규약으로, 웹 브라우저와 서버 간 통신을 암호화하여 보안을 강화하지만, 인증서 비용, 서버 부하, 혼합 콘텐츠 문제 등의 단점도 존재한다. -
암호 프로토콜 -
HTTPS
HTTPS는 HTTP에 보안 기능이 더해진 통신 규약으로, 웹 브라우저와 서버 간 통신을 암호화하여 보안을 강화하지만, 인증서 비용, 서버 부하, 혼합 콘텐츠 문제 등의 단점도 존재한다. -
암호 프로토콜 -
IPsec
IPsec은 IP 네트워크에서 보안 통신을 제공하기 위한 프로토콜 스위트로서, 전송 모드와 터널 모드를 지원하며, AH, ESP 등의 프로토콜을 사용하여 데이터 무결성, 인증, 기밀성을 제공하고, IKE 프로토콜을 통해 보안 연결을 설정 및 키를 교환하는 개방형 표준이다.
2. 정의
| 프로토콜 | RFC 문서 | 설명 |
|---|---|---|
| 사용자 데이터그램 프로토콜(UDP) | 9147 | UDP와 함께 사용하기 위한 DTLS 정의 |
| 데이터그램 혼잡 제어 프로토콜(DCCP) | 5238 | DCCP와 함께 사용하기 위한 DTLS 정의 |
| 무선 액세스 포인트 제어 및 프로비저닝(CAPWAP) | 5415 | CAPWAP와 함께 사용하기 위한 DTLS 정의 |
| 스트림 제어 전송 프로토콜(SCTP) | 6083 | SCTP 캡슐화와 함께 사용하기 위한 DTLS 정의 |
| 보안 실시간 전송 프로토콜(SRTP) | 5764 | SRTP와 함께 사용하기 위한 DTLS 정의. 이후 보안 실시간 전송 제어 프로토콜(SRTCP)을 포함하는 초안에서 DTLS-SRTP로 불린다. |
DTLS 1.0은 TLS 1.1을 기반으로 하고, DTLS 1.2는 TLS 1.2를 기반으로 하며, DTLS 1.3은 TLS 1.3을 기반으로 한다. 버전 번호를 TLS와 조화시키기 위해 DTLS 1.1은 건너뛰었기 때문에 존재하지 않는다. 이전 DTLS 버전과 마찬가지로 DTLS 1.3은 "주문 보호/재생 불가능성을 제외하고 [TLS 1.3과] 동등한 보안 보장"을 제공하기 위한 것이다.
3. 구현
DTLS는 다양한 프로그래밍 언어 및 운영 체제에서 지원되며, 여러 라이브러리와 WebRTC 등의 애플리케이션에서 구현되어 사용되고 있다.
3.1. 라이브러리
| 구현 | DTLS 1.0 | DTLS 1.2 | DTLS 1.3 |
|---|---|---|---|
| Botan | 지원 | 지원 | |
| cryptlib | 미지원 | 미지원 | |
| GnuTLS | 지원 | 지원 | |
| Java Secure Socket Extension | 지원 | 지원 | |
| LibreSSL | 지원 | 지원 | |
| libsystools | 지원 | 미지원 | |
| MatrixSSL | 지원 | 지원 | |
| mbed TLS (이전 PolarSSL) | 지원 | 지원 | |
| Network Security Services | 지원 | 지원 | |
| OpenSSL | 지원 | 지원 | |
| PyDTLS | 지원 | 지원 | |
| Python3-dtls | 지원 | 지원 | |
| RSA BSAFE | 미지원 | 미지원 | |
| s2n | 미지원 | 미지원 | |
| Schannel XP/2003, Vista/2008 | 미지원 | 미지원 | |
| Schannel 7/2008R2, 8/2012, 8.1/2012R2, 10 | 지원 | 미지원 | |
| Schannel 10 (1607), 2016 | 지원 | 지원 | |
| Secure Transport OS X 10.2–10.7 / iOS 1–4 | 미지원 | 미지원 | |
| Secure Transport OS X 10.8–10.10 / iOS 5–8 | 지원 | 미지원 | |
| SharkSSL | 미지원 | 미지원 | |
| tinydtls | 미지원 | 지원 | |
| Waher.Security.DTLS | 미지원 | 지원 | |
| wolfSSL (이전 CyaSSL) | 지원 | 지원 | 지원 |
| @nodertc/dtls | 미지원 | 지원 | |
| java-dtls | 지원 | 지원 | |
| pion/dtls (Go) | 미지원 | 지원 | |
| californium/scandium (Java) | 미지원 | 지원 | |
| SNF4J (Java) | 지원 | 지원 |
다양한 프로그래밍 언어 및 운영 체제에서 DTLS를 지원하는 라이브러리가 존재한다. 주요 DTLS 라이브러리 및 지원 버전은 위 표와 같다.
3.2. 애플리케이션
다음은 DTLS를 사용하는 주요 애플리케이션이다.
* 시스코 AnyConnect VPN 클라이언트는 TLS를 사용하며 DTLS 기반 VPN을 발명했다. 오픈커넥트(OpenConnect)는 (D)TLS를 지원하는 오픈 소스 AnyConnect 호환 클라이언트 및 ocserv 서버이다.
* 시스코 인터클라우드 패브릭(Cisco InterCloud Fabric)은 DTLS를 사용하여 개인 및 공용/제공자 컴퓨팅 환경 간의 터널을 형성한다.
* 카토 네트웍스(Cato Networks)는 Cato Socket과 Cato ZTNA(구 SDP) 클라이언트가 Cato POP에 대한 터널을 형성할 때와 Cato 소켓 간의 오프 클라우드 터널을 형성할 때 사용되는 언더레이 터널에 DTLS v1.2를 사용한다.
* Z스케일러(Zscaler) 터널 2.0은 터널링에 DTLS를 사용한다.
* F5 네트웍스(F5 Networks) Edge VPN 클라이언트는 TLS와 DTLS를 사용한다.
* 포티넷(Fortinet)의 SSL VPN 및 어레이 네트웍스(Array Networks) SSL VPN 또한 VPN 터널링에 DTLS를 사용한다.
* 시트릭스 시스템즈(Citrix Systems) NetScaler는 UDP를 보호하기 위해 DTLS를 사용한다.
* 구글 크롬, 오페라, 파이어폭스는 WebRTC에 DTLS-SRTP를 지원한다. 파이어폭스 86 이상 버전은 DTLS 1.0을 지원하지 않는다.
* 원격 데스크톱 프로토콜 8.0 이상.
* ChromeOS, 구글 크롬(Google Chrome), 모질라 파이어폭스(Mozilla Firefox), 오페라 (웹 브라우저)(Opera)는 WebRTC를 위해 DTLS-SRTP를 지원한다.