Chat 화면은 PlainApp에 내장된 P2P 메신저입니다. 열면 네트워크상의 모든 다른 PlainApp 기기 목록(페어링된 피어, 페어링 대기 중인 피어, 그리고 참여했거나 생성한 채널(그룹 채팅))이 표시됩니다. 하나를 탭하면 메시지 버블, 파일 첨부 및 메시지별 암호화 표시기가 있는 대화 보기가 열립니다.
채팅은 전적으로 휴대폰에서 실행됩니다. 중앙 서버, 계정, 전화번호 조회가 없습니다. 메시지는 사용 가능한 최상의 전송 방식(Wi-Fi Aware(두 기기 모두 지원 시), 로컬 네트워크, Bluetooth Low Energy(검색용 대체 수단))을 통해 기기에서 피어 기기로 직접 전송됩니다. 모든 메시지는 종단간 암호화되며, 키는 이를 생성한 기기를 절대 떠나지 않습니다.


주요 기능
- 직접 P2P 메시징 — 텍스트와 파일이 중계 없이 한 PlainApp 기기에서 다른 기기로 직접 전송됩니다.
- 채널(그룹 채팅) — 채널을 만들고 페어링된 피어를 초대합니다. 채널 메시지는 각 멤버별로 개별적으로 암호화됩니다.
- 파일 첨부 — Files 화면에서 사진, 문서 또는 모든 파일을 첨부합니다. 파일은 암호화되어 텍스트와 동일한 전송 방식으로 전송됩니다.
- 메시지별 암호화 표시기 — 각 메시지는 암호화되어 피어가 확인하면 자물쇠 아이콘을 표시합니다.
- 전송 대체 방식 — 메시지가 사용 가능한 최상의 전송 방식(LAN, Wi-Fi Aware 또는 BLE(검색용))을 자동으로 선택합니다.
- 긴 메시지는 파일로 전송 — 2048자를 초과하는 메시지는 텍스트 버블 대신 암호화된 텍스트 파일로 자동 전송됩니다.
사용 방법
- 하단 내비게이션 바에서 Chat 탭을 엽니다. 목록에는 로컬 채팅(자신의 기기), 참여한 채널, 온라인 상태가 표시된 페어링된 피어가 표시됩니다.
- 페어링된 피어를 탭하여 대화를 엽니다. 페어링되지 않은 피어를 탭하면 페어링 플로우가 시작됩니다 — 피어의 QR 코드를 스캔하거나 페어링 요청을 수락합니다.
- 하단 입력 바에 메시지를 입력하고 보내기를 누릅니다. 메시지 옆의 자물쇠 아이콘이 암호화 상태를 표시하며, 피어가 수신을 확인하면 완료 상태가 표시됩니다.
- 파일을 첨부합니다 — 첨부 버튼을 탭하고 Files 화면에서 파일을 선택합니다. 파일이 암호화되어 활성 전송 방식으로 피어에게 업로드됩니다.
- 암호화 표시기를 확인합니다 — 보낸 메시지를 길게 눌러 전송 상태, 암호화 키 지문 및 사용된 전송 방식을 확인할 수 있습니다.
- 전송 방식을 전환합니다 — 피어가 LAN과 Wi-Fi Aware 모두를 통해 접근 가능한 경우, 대화가 자동으로 더 빠른 방식을 선택합니다. 당겨서 새로고침하여 강제로 재연결할 수 있습니다.
팁 & 요령
- 두 기기를 한 번 페어링하면 계속 페어링 상태가 유지됩니다. 페어링된 피어는 동일한 네트워크에 있을 때 자동으로 다시 연결됩니다.
- 채널을 만들어 여러 피어에게 한 번에 그룹 메시지를 보낼 수 있습니다. 각 멤버는 모든 메시지의 개별 암호화된 사본을 수신합니다.
- 메시지 전송에 실패하면 탭하여 전송 상태 모달을 열고 다시 입력하지 않고 재시도할 수 있습니다.
- 긴 메시지(2048자 초과)는 자동으로 암호화된 텍스트 파일로 전송됩니다 — 직접 분할할 필요가 없습니다.
개인정보 및 보안 정보
- 메시지는 XChaCha20-Poly1305로 종단간 암호화됩니다. 키는 대화별로 파생되며 참여 기기를 절대 떠나지 않습니다.
- 각 기기는 Ed25519 키로 메시지에 서명합니다. 피어는 페어링 시 교환된 발신자의 공개 키에 대해 서명을 확인합니다.
- 페어링은 ECDH P-256 키 교환을 사용하여 공유 비밀을 설정합니다. 페어링 핸드셰이크는 QR 코드 스캔 또는 수명이 짧은 로컬 채널을 통해 이루어지며, 어떤 단계에서도 중앙 서버가 관여하지 않습니다.
관련 기능
- 웹 대시보드의 암호화 P2P 채팅 — 휴대폰이 멀리 있을 때 브라우저에서 사용하는 동일한 채팅 화면입니다.
- Android 파일 관리 — Files 화면에서 채팅 메시지에 첨부할 파일을 선택합니다.