키 및 보안 키 백업
잠금 해제 실패 (잘못된 패스코드)
- 패스코드가
setup에서 사용한 것과 일치하는지 확인하세요 - 시도 사이에 기다리세요; realm은 잘못된 추측에 대해 속도 제한을 두고 너무 많은 실패 후에는 복구를 잠글 수 있습니다
- Python
- TypeScript
- Rust
- Go
- C#
- Java
키가 로드되지 않아 암호화 또는 복호화 실패
먼저 개인 키를 로드한 다음, X의 레코드에서 공개 키 버전을 설정하세요.- Python
- TypeScript
- Rust
- Go
- C#
- Java
메시지에 대한 대화 키 누락
해당 메시지의conversation_key_version에 대한 원시 키가 없습니다.
extract_conversation_keys로conversation_key_change_event(실시간 이벤트) 또는meta.conversation_key_events(이력)의 키 자료를 복호화하거나, 또는decrypt_events에 그 blob을 포함하세요- 해당 버전에 대해 대화 키가 추가되었고 여전히 참가자인지 확인하세요 (시작하기 참조)
상대방에게 공개 키가 없음
아직 온보딩을 마치지 않았을 수 있습니다. 그들이 등록한 후, API 참조 → 암호화 키에서public_key, signing_public_key, identity_public_key_signature, public_key_version을 로드하세요.
복호화 및 서명
복호화 실패
- 오래되었거나 잘못된 원시 대화 키, 또는 잘못된 키 버전
- 불완전한
encoded_event문자열 - 이벤트 유형이 복호화 가능한 콘텐츠로 처리할 수 있는 암호화된 메시지가 아님
서명 검증 실패
검증은 기본적으로 실패-폐쇄입니다(reject_unverified = true): SDK는 이미 검증되지 않은 서명 이벤트를 거부하므로, 여기서 실패가 발생한다면 검사를 켜야 한다는 뜻이 아니라 검증 입력이 잘못되었다는 뜻입니다. 일반적인 원인:
- 발신자에 대한 서명 키 항목이 누락되었거나 불완전함 (Chat XDK가 요구하는 모든 필드—Chat XDK 참조 참조)
- 발신자가 버전을 교체함—공개 키를 다시 가져오세요
- 허용된 최소값보다 낮은 키 버전은 절대 검증되지 않습니다
set_reject_unverified 세터는 이 기본값을 비활성화(false, 권장하지 않음)하기 위해 존재합니다. 이전에 비활성화했다면 실패-폐쇄 기본값으로 복원하세요:
- Python
- TypeScript
- Rust
- Go
- C#
- Java
오래된 이벤트가 영구적으로 검증에 실패함
오래된 이벤트에서signature missing or no matching signing key나 ECDSA 불일치 같은 오류는 영구적입니다. 서명은 불변이며 이벤트 자체에서 서명된 페이로드를 재구축하여 검증되므로, 다른 바이트로 서명된 (또는 서명되지 않은) 이벤트는 이후 로드 시마다 실패합니다—재시도, 키 갱신, 또는 API 호출로도 치유할 수 없습니다. 이러한 이벤트를 재시도 가능한 오류가 아닌 툼스톤으로 취급하세요. 대화 키를 교체하면 그 시점 이후부터 깨끗하고 검증 가능한 이력이 시작됩니다; 새 메시지는 영향을 받지 않습니다.
전송 페이로드 구축
이 실수들은 X Chat 암호화에 특화된 것입니다 (일반 HTTP 오류가 아님):상태 변경 호출에서 API가 400을 반환함
모든 상태 변경 채팅 호출—대화 키 추가 또는 교체, 그룹 생성, 멤버 추가—에는 API 경계에서 검증되는 요청 본문의 **action_signatures**가 필요합니다. 누락되거나 잘못된 형식의 항목(각각 message_id, encoded_message_event_detail, 그리고 signature, public_key_version, signature_version이 있는 message_event_signature가 필요함)은 즉시 HTTP 400 problem-details 응답을 반환합니다. SDK prepare 메서드(prepare_conversation_key_change, prepare_group_create, prepare_group_members_change)를 사용하고 반환된 모든 서명을 보내세요—그룹 생성과 멤버 추가는 두 개를 반환합니다.
미디어 암호화 및 복호화
- 첨부 파일을 참조하는 메시지와 동일한 대화 키(및 버전)를 사용하세요
decrypt_stream을 실행하기 전까지 다운로드 응답을 암호문으로 취급하세요- MIME 유형은 복호화 후에 추론하세요; 다운로드
Content-Type은 종종 실제 이미지 유형이 아닙니다
안전한 디버깅
암호화 실패를 조사할 때:- 대화 ID, 이벤트 ID, 키 버전만 로그에 남기세요
- 평문, 패스코드, 개인 키, 또는 전체 키 blob을 로그에 남기지 마세요
set_key_version이 공개 키 레코드의public_key_version과 일치하는지 확인하세요- 불완전한 이력의 경우, 복호화하기 전에 키 변경 메타데이터를 건너뛰지 않도록 모든 이벤트 페이지를 페이지 처리하세요