이 암호화를 직접 구현하지 않습니다. Chat XDK가 처리합니다. 이 페이지는 이해를 위한 것이며 API 체크리스트가 아닙니다.
큰 그림
X Chat은 계층화된 암호화 시스템을 사용하며, 다음과 같이 동작합니다:- 메시지는 대화 키로 암호화됩니다 (빠른 대칭 암호화)
- 대화 키는 각 참가자의 신원 공개 키로 암호화됩니다 (비대칭 키 교환)
- 메시지는 서명 키로 서명되어 수신자가 누가 보냈는지, 그리고 변조되지 않았는지 검증할 수 있습니다
키 유형 설명
X Chat은 각각 특정한 목적을 가진 세 가지 유형의 키 재료를 사용합니다.1. 신원 키페어
용도: 사용자 간에 대화 키를 안전하게 교환
누군가 사용자를 대화에 추가하면 사용자의 신원 공개 키를 사용하여 대화 키를 암호화합니다. 오직 사용자의 신원 개인 키만이 이를 복호화할 수 있습니다.
공개 키는 플랫폼의 공개 키 API를 통해 등록 및 조회됩니다 (API 참조의 암호화 키 참조). 개인 키는 Chat XDK 내부에 유지됩니다 (예: 보안 키 백업 또는 신중하게 보호된 키 blob).
2. 서명 키페어
용도: 메시지를 사용자가 작성했음을 증명
메시지를 보내면 사용자의 서명 개인 키로 서명됩니다. 수신자는 사용자의 서명 공개 키(공개 키 API를 통해서도 게시됨)를 사용하여 검증합니다. Chat XDK는 메시지를 암호화하는 과정에서 서명하며, 발신자의 공개 키 자료를 제공하면 복호화 시 검증할 수 있습니다.
3. 대화 키
용도: 특정 대화 내에서 메시지(및 미디어)를 암호화 및 복호화
대화 키는 대화가 설정될 때 또는 키가 교체될 때 생성됩니다. 각 참가자는 자신의 신원 공개 키로 만들어진 암호화된 사본을 받습니다. 자신의 사본을 한 번 복호화하면 원시 대화 키를 보관해 두고 빠른 메시지 (및 미디어) 암호화에 사용합니다. 대화의 이러한 사본 설정은 Chat XDK와 대화 키 엔드포인트를 함께 사용하여 수행되며, 시작하기에서 자세히 다룹니다.
암호화가 개념적으로 작동하는 방식
메시지 보내기
1
평문에서 시작
“Hello, how are you?”라고 입력합니다.
2
대화 키 가져오기
앱은 이 채팅의 원시 대화 키(설정 또는 이전 키 배포 이벤트로부터)를 올바른 키 버전으로 사용합니다.
3
메시지 암호화
Chat XDK가 대화 키로 메시지를 암호화합니다. 결과는 해당 키 없이는 쓸모없는 암호문입니다.
4
메시지 서명
Chat XDK가 사용자의 서명 개인 키로 암호화된 페이로드에 서명하여, 사용자가 이 정확한 내용을 작성했음을 증명합니다.
5
X로 전송
앱은 암호화된 페이로드와 서명을 Chat API의 메시지 전송 엔드포인트를 통해 X로 보냅니다. X는 평문으로 읽을 수 없는 바이트를 저장하고 전달합니다.
메시지 받기
1
암호화된 데이터 수신
앱은 웹훅 또는 활동 스트림을 통해, 또는 이력을 위한 대화 이벤트를 읽어 X로부터 암호문을 수신합니다.
2
대화 키 가져오기
캐시된 원시 키를 사용하거나, 이것이 신규이거나 교체된 경우 키 배포(키 변경) 이벤트에서 사본을 복호화하여 획득합니다.
3
서명 검증
Chat XDK가 발신자의 서명 공개 키(및 관련 신원 바인딩)를 사용하여 서명을 확인하므로, 누가 보냈고 수정되지 않았음을 알 수 있습니다.
4
메시지 복호화
Chat XDK가 대화 키로 복호화합니다. 이제 “Hello, how are you?”를 읽을 수 있습니다.
키 배포 설명
종단 간 암호화의 핵심 과제는 키 배포입니다. 즉, X(또는 관찰자)가 해당 키를 평문으로 볼 수 없도록 참가자가 어떻게 대화 키를 얻는가입니다.초기 키 설정
메시지 전달을 위해 대화가 준비될 때:- 임의의 대화 키가 (Chat XDK 내에서) 생성됩니다
- 각 참가자에 대해 해당 키는 참가자의 신원 공개 키로 암호화됩니다
- 이 암호화된 사본은 X의 Chat API를 통해 저장 및 전송됩니다
- 각 참가자는 (Chat XDK 내에서) 자신의 신원 개인 키로 자신의 사본을 복호화합니다
키 변경 이벤트
대화 키가 교체되면(예: 멤버십이 변경될 때) 참가자는 각 멤버에 대한 새로운 암호화된 사본과 함께 키 변경 이벤트를 수신합니다. 앱은 다음을 수행해야 합니다:- 실시간 이벤트 또는 대화 이력에서 키 변경 자료를 감지
- 새 대화 키(및 버전)를 복호화하고 저장
- 이후 전송에는 최신 버전을 사용
보안 키 백업: 분산 키 저장
개인 신원 및 서명 키는 신중하게 저장되어야 합니다. X Chat에는 보안 키 백업 시스템(Juicebox로 구현됨)이 포함되어 있어, 어떤 단일 서버에도 전체 비밀을 제공하지 않고도 여러 기기에서 패스코드로 키를 복구할 수 있습니다.전통적인 키 저장의 문제
보안 키 백업의 해결 방식
보안 키 백업은 비밀 공유와 패스코드 보호를 결합합니다:- 개인 키는 여러 조각으로 나뉩니다
- 조각은 독립적인 realm(별도의 서버)에 보관됩니다
- 어떤 단일 realm도 혼자서 키를 재구성할 충분한 정보를 갖지 않습니다
- 복구에는 사용자의 패스코드와 충분한 realm의 협력이 필요합니다
- 잘못된 패스코드는 추측을 늦추기 위해 속도 제한됩니다
서명 설명
모든 X Chat 메시지에는 다음을 지원하는 디지털 서명이 포함됩니다:- 진위성 — 발신자의 서명 개인 키로 생성되었음
- 무결성 — 서명 후에 암호화된 내용이 수정되지 않았음
서명이 개념적으로 작동하는 방식
서명된 자료의 무엇이든 변경되면 검증이 실패합니다. 오직 서명 개인 키를 가진 사람만이 해당 키에 대한 유효한 서명을 생성할 수 있습니다.
앱에서
Chat XDK는 발신 메시지를 암호화할 때 서명하고, 수신 메시지를 복호화할 때 발신자의 공개 키 자료(공개 키 API에서 가져옴)로 검증합니다. 검증은 기본적으로 필수입니다: 명시적으로 검사를 비활성화(권장하지 않음)하지 않는 한 SDK는 검증되지 않은 서명 이벤트를 거부합니다. 세부 사항은 Chat XDK 참조에 있습니다.서명된 상태 변경 (action signatures)
메시지만 서명되는 자료가 아닙니다. 대화 상태를 변경하는 모든 호출(대화 키 추가 또는 교체, 그룹 생성, 멤버 추가)에는 하나 이상의 action signatures가 포함되어야 합니다: 발신자는 변경 사항이 정확히 무엇을 하는지 설명하는 페이로드에 서명하고(키 변경의 경우 이 페이로드에는 새 대화 키 자체가 포함됨), API는 서명이 누락되거나 잘못된 형식이면 요청을 거부합니다. 서버는 평문 대화 키를 보유하지 않으므로 키 변경의 서명을 암호학적으로 검사할 수 없습니다. 대신 서명된, 인코딩된 변경 설명이 받은 요청과 일치하는지 검증합니다. 암호학적 검사는 가장자리에서 발생합니다: 각 수신자의 Chat XDK가 키 변경 이벤트를 복호화할 때 발신자의 서명 공개 키에 대해 서명을 검증합니다. Chat XDK의prepare 메서드는 이러한 서명을 자동으로 생성합니다—그룹 생성 및 멤버 추가는 두 개(키 변경과 그룹 액션)를 반환하며, 둘 다 전송되어야 합니다.
서명은 이벤트 내용에 바인딩되며 불변입니다: 서명이 검증되지 않는 이벤트는 나중에 유효해질 수 없습니다. 처리 방법은 문제 해결을 참조하세요.
보안 속성
X Chat이 방어하는 것
X Chat이 방어하지 않는 것
용어집
다음 단계
시작하기
단계별로 키 구현, 전송, 수신
Chat XDK 참조
암호화 SDK 메서드 및 타입
소개
제품 개요 및 아키텍처
실시간 이벤트
암호화된 이벤트가 전달되는 방식