Trail of Bits, 시그널 채팅 무결성 검증 방법
Signal이 '자동 키 검증(Automatic Key Verification)' 기능을 출시하며, 악의적인 서버가 가짜 공개키를 제공하는 중간자 공격을 사용자가 안전번호를 직접 비교하지 않아도 감지할 수 있게 되었습니다. 보안 업체 Trail of Bits는 이 시스템을 신뢰할 수 있게 하는 3개 감사자(Auditor) 중 하나로, Signal·Cloudflare와 함께 Merkle 트리 기반의 키 투명성(Key Transparency) 맵이 전역적으로 일관되고 조작되지 않았는지 지속적으로 검증합니다.
모든 Signal 채팅은 같은 방식으로 시작됩니다. 클라이언트가 Signal 서버에 연락처 전화번호에 연결된 공개키를 요청하는 것입니다. 하지만 서버가 올바른 키를 주었다는 것을 어떻게 알 수 있을까요? 침해된 서버는 거짓 공개키를 제공하여 클라이언트가 메시지를 의도된 수신자가 아닌 공격자에게 암호화하도록 만들 수 있습니다. 지금까지 이런 부정 행위를 탐지하는 유일한 방법은 대화 상대와 직접 만나거나 신뢰할 수 있는 채널을 통해 안전번호(safety number)를 비교하는 것이었습니다.
Signal은 최근 이에 대한 대안으로 '자동 키 검증(Automatic Key Verification)'을 출시했습니다. 이 기능은 안전번호를 직접 비교하지 않고도 채팅이 안전한지 검증할 수 있도록 돕습니다. Trail of Bits는 이 시스템을 신뢰할 수 있게 만드는 세 감사자 중 하나를 구축하고 운영합니다. 우리의 감사자는 처음부터 독립적으로 작성된 구현체로, 자동 키 검증 시스템이 정직하게 작동하는지 지속적으로 확인합니다.
키 검증의 작동 원리
자동 키 검증은 일종의 '키 투명성(key transparency)'으로, 각 전화번호에 연결된 공개키 집합에 대해 전역적으로 일관된 뷰를 만들어 불일치 공격을 숨기기 어렵게 합니다. Signal 앱은 이제 주기적인 자체 점검을 수행하여, 내 계정의 전역 맵에 저장된 모든 키가 실제로 내 기기에 속하는지 확인합니다. 앱이 로그를 검증할 수 없거나 예상치 못한 키를 발견하면 사용자에게 "현재 기기에서 자동 키 검증을 사용할 수 없습니다"라는 경고가 표시됩니다. Signal 문서에 설명된 대로 다른 이유로 자동 키 검증이 불가능할 수도 있습니다.
Trail of Bits 감사자의 역할
자동 키 검증은 외부 감사자에 의존합니다. Trail of Bits는 사용자 ↔ 공개키 맵이 전역적으로 일관되고 잘 구성되어 있으며 어떤 항목도 숨겨지지 않았다는 외부 검증을 제공함으로써 이 시스템이 작동하도록 돕습니다. 새 항목이 추가될 때마다 우리는 Merkle 트리 형태로 저장된 맵의 로컬 사본을 업데이트합니다. 그리고 주기적으로 우리만 아는 서명 키로 트리의 헤드(head)에 서명합니다. 우리는 오직 하나의 일관된 Merkle 트리 계보에만 서명하기로 약속했기 때문에, 클라이언트는 자신이 시스템의 다른 모든 사람과 동일한 공개키 집합을 보고 있음을 알 수 있습니다.
현재 클라이언트는 세 감사자 각각의 서명을 요구합니다. 하나는 Signal이, 하나는 Cloudflare가, 하나는 Trail of Bits가 운영합니다. 자동 키 검증이 켜져 있으면 Signal 클라이언트는 주기적으로 Signal 키 투명성 서버에서 Merkle 트리 헤드를 가져옵니다. 클라이언트는 각 트리 헤드가 최근 7일 내에 등록된 모든 감사자가 승인한 계보에 속할 것을 요구합니다. 서버가 유효한 감사자 서명을 제시하지 못하면 클라이언트는 경고를 표시하고 자동 키 검증이 실패합니다. 따라서 완전히 악의적인 서버라도 클라이언트 앱이 경고 메시지를 표시하기 전까지 최대 일주일 동안만 분할 뷰(split view)를 유지할 수 있습니다.
우리는 독립적 검증을 제공하기 위해 사양(specification)을 기반으로 감사자를 처음부터 직접 구현했으며, 코드는 오픈소스로 공개되어 있습니다. Signal도 참조 구현체를 공개했습니다. 감사자 상태 초기화나 서명 키 교체 등 서명 정책에 실질적인 변경이 필요한 경우 이 블로그 게시물을 업데이트할 것입니다. 현재 우리의 공개키는 다음과 같습니다.
자동 키 검증 사용 방법
Signal에서 "설정 > 개인정보 보호 > 고급"으로 이동하여 자동 키 검증을 활성화할 수 있습니다. 지원되는 채팅에서는 안전번호 확인 화면으로 이동해 "자동으로 검증"을 클릭하여 상대방의 공개키를 검증할 수 있습니다. 사용자 이름으로 수신자를 검색하여 대화를 시작한 경우 자동 키 검증이 지원되지 않는 경우가 많습니다. 자세한 내용은 Signal 도움말 페이지를 참고하세요. 자동 검증이 실패하면 사용자는 안전번호 비교로 되돌아가야 합니다.
우리가 이 일을 하는 이유
우리는 자유롭고 사적인 통신이 중요한 공공재라고 믿습니다. 우리는