스터디 중 mTLS라는 키워드를 접했다. TLS, E2EE와 어떤 차이점이 있는지 궁금해 찾아보게 되었고 간단히 정리해본다.
mTLS는 mutual TLS의 약자로 양방향 TLS를 수행하는 “상호 인증”으로 이해하면 된다. mTLS를 알기 위해 TLS를 알아야 하고, TLS를 알기 위해선 공개 키 암호화를 알아야 한다.
공개 키/대칭 키 암호화와 TLS (Transport Layer Security)
공개 키 암호화
암호화: 원본 데이터를 알아볼 수 없게 바꿈 / 복호화: 다시 데이터를 원본으로 만듦
비대칭 암호화라고도 불리는 공개 키 암호화 방식은 공개 키와 비밀 키를 만들고(각 1개씩 2개), 공개 키는 외부에 공개, 비밀 키는 내부에서만 사용하는 방식으로 이루어진다. 복호화에 사용하는 키와 암호화에 사용하는키가 다르기에 비대칭 암호화라 부른다.
여기서 공개 키로 암호화한 데이터는 비밀 키로만 복호화가 가능하고, 비밀 키로 암호화한 데이터는 공개 키로만 복호화가 가능하다
이를 활용하는 방법은 간단하다.
암호화
- 비밀 키를 외부로 노출하지 않기에, 공개 키로 암호화하면 비밀 키를 가진 특정 서버만 데이터를 읽을 수 있다.
서명 (신원 증명)
- 비밀 키로 암호화하여 데이터를 암호화하여 전달하면 공개된 공개 키로 복호화가 가능하다. 마찬가지로 비밀 키를 외부로 노출하지 않았기에 공개 키를 통한 복호화가 성공한다면 나의 신원을 증명할 수 있다.
대칭 키 암호화
대칭 키 암호화는 하나의 키를 통해 암복호화를 수행하는 방식이다. 때문에 통신할 대상과 키를 공유해야 한다.
키를 전송하는 부분에 있어 공격에 취약해진다는 단점이 있다. 이를 보완하기 위해 직전에 언급한 공개 키 암호화를 사용해 키를 전달한다. (공개 키 암호화 + 대칭 키 암호화 = 봉투 암호화)
이러한 방식과 특성들을 활용하여 TLS가 수행된다.
TLS
TLS는 전송 계층 보안 프로토콜이다. 클라이언트와 서버 간의 통신을 암호화하여 데이터의 기밀성과 무결성을 보장한다.
TLS는 다음 순서로 수행된다.
- 클라이언트에서 서버로 연결 요청을 보낸다.
- 서버는 인증서(공개 키+@)를 전달한다.
- 클라이언트는 인증서를 확인한 후 대칭 키를 만들어 공개 키로 암호화한 후 서버로 전달한다.
- 서버는 비밀 키로 복호화해 대칭 키를 획득한다.
- 대칭 키로 암호화된 데이터를 전달한다.
4, 5번은 키 교환 방식에 따라 차이가 있을 수 있다. 여기서 포인트는 인증서를 통한 신원 확인이다. 설명의 간소화를 위해 CA(Certification Authority)는 생략했다.
mTLS (Mutual TLS)
그럼 Mutual TLS는 뭐하는걸까?
TLS는 서버쪽만 신원을 증명한다. mTLS는 클라이언트측 인증서를 전달하여 신원을 증명하는 단계가 추가된다. 통신 채널 양쪽에서 서로의 신원을 확인하고 데이터를 주고받는다.
mTLS는 다음 순서로 수행된다. 마찬가지로 키교환은 방식에 따라 차이가 있을 수 있다.
- 클라이언트에서 서버로 요청을 보내 연결을 만든다.
- 서버의 인증서를 전달한다.
- 클라이언트는 인증서를 확인한 후 자신의 인증서를 서버로 전달한다. (클라이언트 신원도 인증)
- 서버는 클라이언트 인증서를 확인한 후 접근을 허용한다.
- 클라이언트는 대칭 키를 만들어 공개 키로 암호화한 후 서버로 전달한다.
- 서버는 비밀 키로 복호화해 대칭 키를 획득한다.
- 대칭 키로 암호화된 데이터를 전달한다.
한마디로 클라이언트 인증을 통해 식별되지 않은 않은 클라이언트에게 데이터가 전달되는 것을 막는 방식이다.
여기서 서로 인증하고 데이터를 교환하면 E2EE 아닌가? 하는 생각이 들어 E2EE에 대해서도 찾아보게 되었다.
E2EE (End-to-End Encryption)
E2EE는 주로 Application Layer에서 구현된다. 메시지 발신자와 수신자만 실제 메시지 해독이 가능하고, 다른 사람은 메시지 내용을 알 수 없다. 발신자와 수신자만 볼 수 있기에 End-to-End 암호화라 불린다.
사용자 Alice와 Bob의 키 교환을 통해 메시지를 암호화하여 전달하는 방식이다. 때문에 메시지를 전달하는 과정에 누군가 개입하더라도 복호화 키를 모르기에 메시지 해독이 불가능하다. 메시지를 전달할 때 중간 과정에 위치한 서버에서도 메시지 원본을 알 수 없다.
mTLS와 E2EE는 비슷해 보이는데 뭐가 다른가?
E2EE는 각각의 사용자의 디바이스에서만 암호화와 복호화를 수행하기에 서비스에 포함된 중간 장비들이 데이터를 볼 수 없다. E2EE는 “프라이버시”에 초점이 맞춰져 있다.
mTLS는 Trasport Layer에서 작동하는 보안 프로토콜이다. mTLS를 수행했어도 서버 또는 데이터베이스에선 데이터를 볼 수 있다. 서로의 신원 확인을 통해 “신뢰할 수 있는 통신 채널을 구축”하고 제 3자에게 데이터 노출을 막는 것이 목적이기에 통신 보안에 좀 더 초점이 맞춰져 있다.
결과적으로 수행하는 방식은 비슷하나, 지향하는 목표가 차이가 있다.
정리
일반 슈퍼마켓은 고객을 구분하지 않고, 방문한 사람 모두에게 물건을 판매한다. 당근 거래할때는 당근이세요?를 물으며 서로 판매자/구매자 신원을 확인한다. 신원이 확인된 구매자에게만 판매자가 물건을 넘긴다.
네트워크에서도 서버/클라이언트 서로가 신원을 확인해야 하는 경우가 생기고 이 때 mTLS를 사용한다.