[!WARNING]
이 소프트웨어는 외부 보안 검토를 받지 않았으며 취약점이 포함되어 있을 수 있고 명시된 보안 목표를 반드시 충족하지는 않을 수 있습니다. 민감한 사용 사례에는 사용하지 말고, 검토가 완료될 때까지 보안에 의존하지 마십시오. 작업 진행 중입니다.
Android용 bitchat
보안성이 뛰어난 분산형 P2P 메시징 앱으로, 블루투스 메시 네트워크 위에서 작동합니다. 메시 채팅에는 인터넷이 필요 없고, 서버도, 전화번호도 없으며 순수한 암호화 통신만 사용합니다. 또한 Bitchat은 지오해시 채널을 지원하는데, 이는 인터넷 연결을 통해 사용자와 같은 지리적 영역에 있는 다른 사람들과 연결해 줍니다.
이것은 원본 bitchat iOS 앱의 Android 포트이며, 크로스 플랫폼 통신을 위해 100% 프로토콜 호환성을 유지합니다.
bitchat 설치
Android용 bitchat 최신 버전은 GitHub Releases 페이지에서 다운로드할 수 있습니다.
또는 다음을 이용할 수 있습니다:

설치 방법:
- APK 다운로드: Android 기기에서 위 링크로 이동하여 최신
.apk 파일을 다운로드한 후 엽니다.
- 알 수 없는 출처 허용: 일부 기기에서는 APK를 설치하기 전에 기기 설정에서 "알 수 없는 출처의 앱 설치"를 활성화해야 할 수 있습니다. 일반적으로 설정 > 보안 또는 설정 > 앱 및 알림 > 특별한 앱 접근에서 찾을 수 있습니다.
- 설치: 다운로드한
.apk 파일을 열어 설치를 시작합니다.
라이선스
이 프로젝트는 퍼블릭 도메인으로 공개됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.
기능
- ✅ 크로스 플랫폼 호환: iOS bitchat과 완전한 프로토콜 호환성
- ✅ 분산형 메시 네트워크: Bluetooth LE를 통한 자동 피어 검색 및 다중 홉 메시지 중계
- ✅ 종단간 암호화: 개인 메시지를 위한 X25519 키 교환 + AES-256-GCM
- ✅ 채널 기반 채팅: 주제 기반 그룹 메시징, 선택적 비밀번호 보호
- ✅ 저장 후 전달: 오프라인 피어를 위한 메시지 캐싱 후 재연결 시 전달
- ✅ 프라이버시 우선: 계정, 전화번호, 영구 식별자 불필요
- ✅ IRC 스타일 명령어: 익숙한
/join, /msg, /who 스타일 인터페이스
- ✅ 메시지 보존: 채널 소유자가 제어하는 선택적 채널 전체 메시지 저장
- ✅ 긴급 삭제: 로고 세 번 탭으로 모든 데이터 즉시 삭제
- ✅ 최신 Android UI: Material Design 3 기반 Jetpack Compose
- ✅ 다크/라이트 테마: iOS 버전과 일치하는 터미널에서 영감을 받은 미학
- ✅ 배터리 최적화: 적응형 스캔 및 전원 관리
Android 설정
필수 조건
- Android Studio: Arctic Fox (2020.3.1) 이상
- Android SDK: API 레벨 26 (Android 8.0) 이상
- Kotlin: 1.8.0 이상
- Gradle: 7.0 이상
빌드 방법
-
저장소 클론:
git clone https://github.com/permissionlesstech/bitchat-android.git
cd bitchat-android
-
Android Studio에서 열기:
# Android Studio를 열고 "Open an Existing Project" 선택
# bitchat-android 디렉토리로 이동
-
프로젝트 빌드:
-
기기에 설치:
개발 빌드
디버깅이 활성화된 개발 빌드의 경우:
./gradlew assembleDebug
adb install -r app/build/outputs/apk/debug/app-debug.apk
릴리스 빌드
프로덕션 릴리스의 경우:
./gradlew assembleRelease
Android 관련 요구 사항
권한
앱에 필요한 권한(자동으로 요청됨):
- Bluetooth: 핵심 BLE 기능
- 위치: Android에서 BLE 스캔에 필요
- 네트워크: 공용 인터넷 릴레이를 통해 메시 확장
- 알림: 메시지 알림 및 백그라운드 업데이트
하드웨어 요구 사항
- Bluetooth LE (BLE): 메시 네트워킹에 필요
- Android 8.0+: 최소 API 레벨 26
- RAM: 최적 성능을 위해 2GB 권장
사용법
기본 명령어
/j #채널 - 채널 참여 또는 생성
/m @이름 메시지 - 개인 메시지 보내기
/w - 온라인 사용자 목록 보기
/channels - 발견된 모든 채널 표시
/block @이름 - 메시지를 보내는 피어 차단
/block - 차단된 모든 피어 목록 보기
/unblock @이름 - 피어 차단 해제
/clear - 채팅 메시지 지우기
/pass [비밀번호] - 채널 비밀번호 설정/변경 (소유자 전용)
/transfer @이름 - 채널 소유권 이전
/save - 채널 메시지 보존 전환 (소유자 전용)
시작하기
- 앱 설치 Android 기기에서 (Android 8.0+ 필요)
- 권한 부여 블루투스 및 위치에 대해 프롬프트가 표시되면
- bitchat 실행 - 메시 네트워킹이 자동 시작됩니다
- 닉네임 설정 또는 자동 생성된 닉네임 사용
- 자동 연결 주변 iOS 및 Android bitchat 사용자와 연결
- 채널 참여
/j #general로 시작하거나 공개 채팅 시작
- 메시지 중계 메시 네트워크를 통해 원격 피어에게 도달
Android UI 기능
- Jetpack Compose UI: 최신 Material Design 3 인터페이스
- 다크/라이트 테마: iOS와 일치하는 터미널에서 영감을 받은 미학
- 햅틱 피드백: 상호작용 및 알림을 위한 진동
- 적응형 레이아웃: 다양한 Android 화면 크기 최적화
- 메시지 상태: 실시간 전송 및 읽음 확인
- RSSI 표시기: 각 피어의 신호 강도 색상
채널 기능
- 비밀번호 보호: 채널 소유자가
/pass로 비밀번호 설정 가능
- 메시지 보존: 소유자가
/save로 필수 메시지 저장 활성화 가능
- @멘션:
@닉네임으로 사용자 언급 (자동 완성 포함)
- 소유권 이전: 신뢰하는 사용자에게
/transfer로 제어권 전달
보안 및 프라이버시
암호화
- 개인 메시지: X25519 키 교환 + AES-256-GCM 암호화
- 채널 메시지: Argon2id 비밀번호 유도 + AES-256-GCM
- 디지털 서명: Ed25519 메시지 인증
- 전방향 보안: 세션마다 새 키 쌍 생성
프라이버시 기능
- 등록 불필요: 계정, 이메일, 전화번호 필요 없음
- 기본 임시: 메시지는 기기 메모리에만 존재
- 커버 트래픽: 무작위 지연 및 더미 메시지로 트래픽 분석 방지
- 긴급 삭제: 로고 세 번 탭으로 모든 데이터 즉시 삭제
- 번들 Tor 지원: 인터넷 연결 가능 시 향상된 프라이버시를 위한 내장 Tor 네트워크 통합
성능 및 효율성
메시지 압축
- LZ4 압축: 100바이트 초과 메시지 자동 압축
- 일반 텍스트 메시지 대역폭 30-70% 절약
- 스마트 압축: 이미 압축된 데이터 건너뜀
배터리 최적화
- 적응형 전원 모드: 배터리 잔량에 따라 자동 조정
- 성능 모드: 충전 중 또는 배터리 60% 초과 시 모든 기능
- 균형 모드: 기본 작동 (배터리 30-60%)
- 절전 모드: 배터리 30% 미만 시 스캔 감소
- 초저전력 모드: 배터리 10% 미만 시 비상 모드
- 백그라운드 효율성: 앱이 백그라운드로 전환되면 자동 절전
- 구성 가능한 스캐닝: 듀티 사이클이 배터리 상태에 적응
네트워크 효율성
- 최적화된 블룸 필터: 더 적은 메모리로 더 빠른 중복 감지
- 메시지 집계: 작은 메시지를 일괄 처리하여 전송 감소
- 적응형 연결 제한: 전원 모드에 따라 피어 연결 조정
기술 아키텍처
바이너리 프로토콜
bitchat은 Bluetooth LE에 최적화된 효율적인 바이너리 프로토콜을 사용합니다:
- 1바이트 유형 필드의 컴팩트 패킷 형식
- TTL 기반 메시지 라우팅 (최대 7홉)
- 대용량 메시지 자동 분할
- 고유 ID를 통한 메시지 중복 제거
메시 네트워킹
- 각 기기는 클라이언트와 주변 장치 역할 모두 수행
- 자동 피어 검색 및 연결 관리
- 오프라인 메시지 전달을 위한 저장 후 전달
- 배터리 최적화를 위한 적응형 듀티 사이클링
Android 특화 최적화
- 코루틴 아키텍처: 메시 네트워킹을 위한 비동기 작업
- Kotlin 코루틴: 스레드 안전한 동시 메시 작업
- EncryptedSharedPreferences: 사용자 설정을 위한 안전한 저장소
- 라이프사이클 인식: Android 앱 라이프사이클 적절히 처리
- 배터리 최적화: 포그라운드 서비스 및 적응형 스캔
Android 기술 아키텍처
핵심 구성 요소
- BitchatApplication.kt: 애플리케이션 수준 초기화 및 의존성 주입
- MainActivity.kt: 권한 처리 및 UI 호스팅을 담당하는 메인 액티비티
- ChatViewModel.kt: MVVM 패턴으로 앱 상태 및 비즈니스 로직 관리
- BluetoothMeshService.kt: 핵심 BLE 메시 네트워킹 (중앙 + 주변 역할)
- EncryptionService.kt: BouncyCastle을 사용한 암호화 작업
- BinaryProtocol.kt: iOS 형식과 일치하는 바이너리 패킷 인코딩/디코딩
- ChatScreen.kt: Material Design 3 기반 Jetpack Compose UI
의존성
- Jetpack Compose: 최신 선언형 UI
- BouncyCastle: 암호화 작업 (X25519, Ed25519, AES-GCM)
- Nordic BLE 라이브러리: 신뢰할 수 있는 Bluetooth LE 작업
- Kotlin 코루틴: 비동기 프로그래밍
- LZ4: 메시지 압축 (활성화된 경우)
- EncryptedSharedPreferences: 안전한 로컬 저장소
바이너리 프로토콜 호환성
Android 구현은 iOS와 100% 바이너리 프로토콜 호환성을 유지합니다:
- 헤더 형식: 동일한 13바이트 헤더 구조
- 패킷 유형: 동일한 메시지 유형 및 라우팅 로직
- 암호화: 동일한 암호화 알고리즘 및 키 교환
- UUID: 동일한 블루투스 서비스 및 특성 식별자
- 분할: 대용량 콘텐츠를 위한 호환 가능한 메시지 분할
Google Play에 게시
준비
-
버전 정보 업데이트:
// In app/build.gradle.kts
defaultConfig {
versionCode = 2 // 릴리스마다 증가
versionName = "1.1.0" // 사용자에게 표시되는 버전
}
-
서명된 릴리스 빌드 생성:
./gradlew assembleRelease
-
앱 번들 생성 (Play Store 권장):
Play Store 요구 사항
- 대상 API: 최신 Android API (현재 34)
- 개인정보 처리방침: 민감한 권한을 요청하는 앱에 필요
- 앱 권한: 블루투스 및 위치 사용 이유 설명
- 콘텐츠 등급: 연령에 적합한 콘텐츠를 위한 설문지 작성
배포
- Google Play Store: 주요 배포 채널
- F-Droid: 오픈 소스 배포용
- 직접 APK: 테스트 및 개발용
크로스 플랫폼 통신
이 Android 포트는 원본 iOS bitchat 앱과 원활한 통신을 가능하게 합니다:
- iPhone ↔ Android: 완전한 양방향 메시징
- 혼합 그룹: 동일한 채널의 iOS 및 Android 사용자
- 기능 동등성: 모든 명령어와 암호화가 플랫폼 간에 작동
- 프로토콜 동기화: 동일한 메시지 형식 및 라우팅 동작
iOS 버전: iPhone/iPad 사용자는 원본 bitchat을 github.com/jackjackbits/bitchat에서 받으세요.
기여
기여는 환영합니다! 주요 개선 영역:
- 성능: 배터리 최적화 및 연결 신뢰성
- UI/UX: 추가 Material Design 3 기능
- 보안: 향상된 암호화 기능
- 테스트: 단위 및 통합 테스트 커버리지
- 문서: API 문서 및 개발 가이드
지원 및 이슈
- 버그 리포트: 기기 정보 및 로그와 함께 이슈 생성
- 기능 요청: 토론 시작
- 보안 이슈: 보안 관련 우려 사항은 비공개로 이메일 전송
- iOS 호환성: 원본 iOS 저장소와 상호 참조
iOS 관련 이슈는 원본 iOS bitchat 저장소를 참조하세요.