Rustls의 10년, Linux 암호화 통신의 선택지를 넓히다

Rustls의 10년, Linux 암호화 통신의 선택지를 넓히다

암호화된 웹 연결은 웹 브라우저를 사용할 때만 필요한 기능이 아닙니다. 패키지 관리자, 컨테이너 툴, 메일 프로그램, 각종 서버도 다른 컴퓨터와 통신할 때 연결 내용을 보호해야 합니다. 이때 널리 쓰이는 TLS 라이브러리는 애플리케이션이 안전한 연결을 만들게 해 주는 핵심 구성 요소입니다.

TLS? 그게 뭐에요 ?

TLS
TLS 이미지

TLS(Transport Layer Security, 전송 계층 보안)는 인터넷에서 데이터를 주고받을 때 통신 내용을 암호화해 제3자가 도청하거나 위변조하지 못하도록 보호하는 보안 프로토콜입니다. 과거에 사용되던 SSL(Secure Sockets Layer)의 보안 취약점을 개선하여 만든 후속 버전으로, 흔히 'SSL/TLS'라는 이름으로 함께 부르기도 하죠.

예를 들어서, 크롬 같은 웹 브라우저의 https:// 주소창에 뜨는 초록색 자물쇠 아이콘이 바로 TLS가 적용되어 안전하게 연결되었다는 신호입니다.

10년 동안 성장한 Rustls

Rustls 이미지

Rustls는 Rust 언어로 작성된 TLS 라이브러리입니다. 2016년 5월 첫 커밋에서 출발한 뒤, 같은 해 여름에는 대부분의 웹사이트와 통신할 수 있는 수준까지 도달했습니다.

라이브러리는 브라우저처럼 화면을 직접 보여 주는 프로그램이 아닙니다. 대신 다른 프로그램이 HTTPS 같은 암호화 통신을 사용할 수 있도록 서버의 신원을 확인하고, 주고받는 데이터를 암호화합니다. 이런 역할을 별도 구성 요소로 분리하면 네트워크 보안 기능을 여러 애플리케이션에서 일관되게 사용할 수 있습니다.

Linux 사용자에게 어떤 의미인가?

일반 사용자는 직접 설치하지 않아도, 여러 Linux 앱에서 패키지 관리자, 웹 서버, 도구 등이 Rustls를 사용하면 배포판 패키지의 의존성에 포함될 수 있습니다.

개발자에게는 메모리 안전성을 중시하는 Rust 생태계와 현대적인 TLS 기능을 함께 사용할 선택지가 생깁니다. 그렇다고 기존 OpenSSL 기반 프로그램을 모두 바꿔야 한다는 뜻은 아닙니다. 배포판과 프로젝트의 호환성, 성능, 인증 요구 사항을 비교한 뒤 통신 계층을 선택하는 것이 현실적인 접근입니다.

원문 뉴스 : LWN.net

🐧 Linuxroom의 생각 :

Rustls는 Rust 언어로 된 TLS (Transport Lay Security) 라이브러리입니다.

원래 C언어로 개발되어서 널리 쓰이던 OpenSSL을 대체하기 위한 목적으로 새로 개발된 라이브러리죠.

특징으로서는, Rust라는 언어 특성상 개발 단계에서부터 메모리 안정성에 대해서 C언어나 C++ 언어에서 자주 발생하는 버퍼 오버플로우나 Null 포인터 참조 등의 메모리 관련 보안 취약점을 효과적으로 차단하기 때문에, Rust로 제작된 프로젝트는 메모리 안정성이 월등히 뛰어납니다.

또한 C언어 기반로 작성된 OpenSSL과 비교해도 성능이 뒤쳐지지 않고, 불필요한 레거시 코드가 없어서 경랑화 되어있습니다.

사실 OpenSSL이 나온지 꽤 된터라, 다른 언어로의 개선책이 필요하다고는 생각했었는데 Rustls라는 프로젝트가 나오고 나서 다른 프로젝트로의 이전이 조금이나마 물꼬를 트고 있구나 라는 생각이 들었습니다.

또한 Rustls는 TLS 버전 1.2와 1.3만을 지원하기에, 레거시 코드가 필요 없게 되어서 빠르고 가볍게 동작합니다.

앞으로의 행보가 기대되는 프로젝트입니다 😄


※ 각주

[1] TLS : Transport Layer Security의 약자이며, 인터넷 통신 시 데이터를 암호화하여 도청과 위변조를 막는 보안 프로토콜입니다.

[2] SSL : Secure Sockets Layer의 약자이며, TLS의 전신이 되는 암호화 보안 프로토콜로 취약점으로 인해 현재는 TLS로 대체되었습니다.

[3] HTTPS : HyperText Transfer Protocol Secure의 약자이며, 웹 브라우저와 서버 간의 통신에 TLS/SSL 암호화를 적용하여 보안을 강화한 HTTP 프로토콜입니다.

[4] Rustls : Rust 언어로 작성된 현대적이고 메모리 안전성을 강조한 TLS 라이브러리입니다.

[5] Rust : 모질라(Mozilla)에서 개발한 프로그래밍 언어로, C/C++ 수준의 성능을 제공하면서도 메모리 안전성을 강력하게 보장하는 언어입니다.

[6] 패키지 관리자 : 소프트웨어의 설치, 업데이트, 설정, 삭제 등을 자동화하여 관리해 주는 시스템 도구입니다.

[7] 컨테이너 툴 : 애플리케이션과 실행 환경을 격리된 단위(컨테이너)로 묶어 어디서나 동일하게 실행할 수 있도록 돕는 소프트웨어입니다.

[8] FIPS 인증 : Federal Information Processing Standards의 약자이며, 미국 정부가 암호화 모듈의 안전성을 검증하고 승인하는 연방 정보 처리 표준 인증입니다.

[9] 인증서 압축 : TLS 연결 시 서버가 클라이언트에 전달하는 디지털 인증서 묶음의 용량을 줄여 네트워크 대역폭을 아끼고 연결 속도를 높이는 기술입니다.

[10] Encrypted ClientHello (ECH) : TLS 연결 초기 요청 메세지(ClientHello)에 포함된 접속 대상 도메인 정보 등을 암호화하여 네트워크 감시자로부터 접속 정보를 보호하는 기술입니다.

[11] 양자내성 암호화 : Post-Quantum Cryptography(PQC)라고 하며, 향후 강력한 양자 컴퓨터가 등장하더라도 기존 공개키 암호 체계가 해독되지 않도록 설계된 차세대 암호화 기술입니다.

[12] 인증서 검증 : 통신 상대방(서버)이 신뢰할 수 있는 기관(CA)으로부터 발급받은 정당한 주체인지 디지털 서명을 통해 확인하는 절차입니다.

[13] 메모리 안전성 : 프로그래밍 언어가 버퍼 오버플로우나 누수 같은 메모리 오류 및 보안 취약점을 발생시키지 않도록 원천적으로 차단하는 특성입니다.

[14] OpenSSL : 네트워크 통신을 위한 암호화 프로토콜(SSL/TLS)을 구현한 가장 대표적인 오픈소스 보안 라이브러리입니다.

[15] 의존성 (Dependency) : 특정 프로그램이 정상적으로 작동하기 위해 반드시 함께 설치되고 실행되어야 하는 다른 외부 라이브러리나 모듈입니다.