보안 및 개인정보

약속할 수 있는 것과 없는 것

정확히 말하면, Gather의 메시지 내용은 종단 간 암호화되며 서버는 평문을 보관하지 않습니다. 아래에서 구체적인 방식과 아직 부족한 부분을 설명합니다.

말은 알맞은 사람에게, 열쇠는 내 손 안에.

암호화 방식

  • 1:1 채팅: X3DH 키 합의 + 더블 래칫(Double Ratchet), Signal 프로토콜과 같은 계열.
  • 그룹: 보낸 사람마다 별도의 키 체인을 쓰고, 메시지에는 보낸 사람의 Ed25519 서명이 붙습니다.
  • 기본 알고리즘: Ed25519, X25519, AES-GCM, HKDF-SHA256.
  • 암호화에 실패한 메시지는 전송되지 않으며 평문으로 대신 보내지 않습니다.

신원과 계정

  • 전화번호, 이메일, 실명이 필요 없습니다. 신원은 기기에서 생성된 키 쌍입니다.
  • 개인 키와 복구 문구는 내 기기에만 저장되며, 노드도 저희도 가져갈 수 없습니다.
  • 따라서 복구 문구를 잃어버리면 누구도 계정을 복구할 수 없습니다.

노드가 볼 수 있는 것

메시지를 전달하려면 네트워크가 일부 정보를 알아야 합니다. 이를 숨기지 않겠습니다.

정보노드
메시지 본문, 사진·음성·파일의 내용과 파일 이름볼 수 없음
닉네임, 프로필 사진 등 개인 프로필볼 수 없음
그룹 이름과 공지볼 수 없음
그룹 멤버 목록(노드에 저장되지 않음)볼 수 없음
IP 주소와 연결 신원접속한 입구 노드는 볼 수 있음
언제, 얼마나 자주 메시지를 보내는지접속한 입구 노드는 볼 수 있음
메시지의 수신자접속한 입구 노드는 볼 수 있음

노드끼리 메시지를 중계할 때는 보낸 사람을 숨기며, 오프라인 보관 메시지는 매일 바뀌는 메일함 식별자에만 연결됩니다. 다만 내가 접속한 입구 노드는 내가 누구와 대화하는지 알고 있습니다.

오프라인 메시지 보관 방식

상대가 오프라인이면 메시지는 암호문 상태로 여러 노드에 보관됩니다. 보관 노드에는 매일 바뀌는 메일함 식별자와 암호문만 보이며, 보낸 사람과 받는 사람은 보이지 않습니다. 가져갈 권리를 증명할 수 있는 것은 받는 사람뿐입니다. 최대 30일간 보관됩니다.

적용된 메타데이터 보호

  • 노드끼리 메시지를 중계할 때 보낸 사람을 숨깁니다.
  • 접속 상태에는 매일 바뀌는 식별자를 사용합니다.
  • 푸시 알림은 기기를 깨우는 용도로만 쓰며 신원이나 내용을 담지 않습니다.
  • 노드 로그의 주소는 가려서 기록합니다.

노드 네트워크

  • 노드는 libp2p와 Kademlia DHT로 P2P 연결되며, 중앙 데이터베이스나 계정 서버가 없습니다.
  • 네트워크에 참여하려면 승인된 운영자가 발급한 인증서가 필요합니다(허가형). 각 노드가 직접 검증합니다.
  • 앱에는 서명된 입구가 여러 개 들어 있으며, 현재 노드를 쓸 수 없으면 자동으로 전환합니다.

릴리스와 빌드

  • 노드 릴리스 매니페스트는 3개의 릴리스 키 중 2개가 함께 서명해야 유효하며, 롤백 방지와 만료 시간이 있습니다. 노드 소프트웨어는 스스로 업데이트를 내려받지 않습니다.
  • 노드 소프트웨어는 재현 가능한 빌드 절차로 만들어지며 소프트웨어 자재 명세서(SBOM)가 함께 제공됩니다.

아직 해결하지 못한 것

보안 설명은 한계까지 솔직하게 밝힐 때 의미가 있습니다.

  • 접속한 입구 노드는 여전히 메시지의 수신자를 알고 있습니다. 이 메타데이터를 더 보호하는 방안은 설계 중입니다.
  • Gather는 현재 내부 보안 검토만 거쳤으며, 독립적인 제3자 감사는 아직 받지 않았습니다.
  • 노드는 현재 저희가 운영하며, 독립적인 운영자는 아직 없습니다.
  • 기기에 저장된 대화 기록은 휴대폰 자체의 암호화와 화면 잠금으로 보호됩니다. 화면 잠금을 설정하세요.
  • 음성 및 영상 통화는 일부 네트워크 환경에서 연결되지 않을 수 있습니다.