메뉴
HN
Hacker News • 13일 전

Trail of Bits, 시그널 채팅 무결성 검증 방법

IMP
6/10
핵심 요약

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 도움말 페이지를 참고하세요. 자동 검증이 실패하면 사용자는 안전번호 비교로 되돌아가야 합니다.

우리가 이 일을 하는 이유

우리는 자유롭고 사적인 통신이 중요한 공공재라고 믿습니다. 우리는

원문 보기
원문 보기 (영어)
Page content Every Signal chat starts the same way: the client asks the Signal server for the public key associated with your contact’s phone number. But how do you know the server gave you the right key? A compromised server could provide a false public key, allowing the client to encrypt messages to an attacker rather than the intended recipient. Until now, the only way to detect such malfeasance was to verify safety numbers with your contact in person or over a trusted channel. Signal recently launched an alternative: Automatic Key Verification , a feature that helps validate that your chats are secure without requiring direct safety number comparison . Trail of Bits built and operates one of the three auditors that make this system trustworthy. Our auditor, which is an independent implementation written from scratch, continuously checks that the Automatic Key Verification system behaves honestly. How key verification works Automatic Key Verification is a form of “key transparency” that makes mismatch attacks harder to hide by creating a globally consistent view of the set of public keys associated with each phone number. The Signal app now performs a periodic self-check to ensure that all keys stored in the global map for your account belong to your devices. If the app is unable to verify the log, or finds that not all keys are expected, the user is presented with a warning that “Automatic Key Verification is currently unavailable for your device.” Automatic Key Verification may also be unavailable for other reasons, as outlined in Signal’s documentation . What our auditor does Automatic Key Verification depends on external auditors. Trail of Bits helps this system function by providing external verification that the user ↔ public key map is globally consistent and well formed, and does not hide any entries. Each time a new entry is added, we update our local copy of the map, stored as a Merkle tree. Periodically, we sign the head of the tree using a signing key that only we know. Because we commit to only ever signing one consistent lineage of Merkle trees, clients know that they are seeing the same set of public keys as everyone else in the system. Clients currently require signatures from each of three auditors: one operated by Signal, one operated by Cloudflare, and one operated by Trail of Bits. When Automatic Key Verification is turned on, the Signal client periodically fetches Merkle tree heads from the Signal key transparency server. The client requires that each tree head belong to a lineage endorsed by all registered auditors within the last seven days. If the server does not present valid auditor signatures, the client will raise a warning and Automatic Key Verification will fail. A fully malicious server may therefore maintain a split view of the system for at most one week before client applications start to display warning messages. We chose to implement our auditor from scratch, based on the specification , to provide independent verification; the code is open source . Signal also publishes a reference implementation . We will provide updates to this blog post if we need to make substantive changes to our signing policy, such as resetting the state of our auditor or rotating our signing key. Our current public key is: How to use Automatic Key Verification You can enable Automatic Key Verification in Signal by going to “Settings > Privacy > Advanced” and enabling Automatic Key Verification. In supported chats, you can verify the public key of your counterparty by visiting the safety number verification screen and clicking “Verify Automatically.” Automatic Key Verification often does not support chats where you started the conversation by searching for a recipient’s username. See Signal’s help page for more information. If automatic verification fails, users should fall back on safety number comparison. Why we’re doing this We believe that free and private communication is a critical public good. We are not paid by Signal or any other party for this service; we operate it in the interest of users and the community broadly. Some form of public key integrity is an important component of any full end-to-end encryption system. If you would like to implement key transparency or end-to-end encryption generally, contact us . If you enjoyed this post, share it: X LinkedIn GitHub Mastodon Hacker News Related Posts We wrote the code, and the code won August 15, 2024 Earlier this week, NIST officially announced three standards specifying FIPS-approved algorithms for post-quantum …