Bitchat이 Radicle에 공개됨
요약
Bitchat은 Bluetooth 메시 네트워크와 Nostr 프로토콜을 결합하여 중앙 서버 없이 작동하는 탈중앙 P2P 메시징 앱입니다. 오프라인에서는 Bluetooth LE를 통한 7홉 중계를 지원하며, 온라인 시에는 Nostr 릴레이를 통해 전 세계적인 연결을 제공합니다.
핵심 포인트
- Bluetooth LE와 Nostr를 결합한 하이브리드 전송 구조
- Noise Protocol 기반의 종단 간 암호화 및 보안 지원
- Geohash를 활용한 정밀한 위치 기반 채널 제공
- Emergency Wipe 기능을 통한 데이터 즉시 삭제 지원
- Xcode 및 Just를 이용한 오픈소스 빌드 환경 제공
Bitchat은 Bluetooth 메시 네트워크와 인터넷 기반 Nostr를 결합해 계정·전화번호·중앙 서버 없이 작동하는 iOS·macOS용 탈중앙 P2P 메시징 앱임
- 오프라인에서는 Bluetooth LE로 최대
7홉 중계를 지원하고, 인터넷 연결 시 290개 이상의 Nostr 릴레이를 통해 전 세계 및 위치 기반 채널에 연결함 - 개인 메시지는 Bluetooth의
Noise Protocol을 우선 사용하고, 연결할 수 없으면 Nostr의 NIP-17로 전환하며, 둘 다 불가능하면 전송할 수 있을 때까지 대기열에 보관함 - geohash 정밀도에 따라 블록·동네·도시·주·국가 단위 채널을 제공하며,
/slap
, /msg
, /who
같은 IRC식 명령과 세 번 탭해 데이터를 지우는 Emergency Wipe를 지원함
- 프로젝트는
퍼블릭 도메인으로 공개됐으며 Xcode 또는just
로 실행할 수 있지만, 실제 기기 빌드에는 Developer Team ID와 entitlement 설정이 필요함
Bluetooth와 Nostr를 결합한 전송 구조
- Bitchat은 Bluetooth 메시와 Nostr를 결합한 iOS·macOS 네이티브 앱이며 App Store에서도 제공됨
Bluetooth 메시 네트워크는 인터넷 없이 주변 기기를 자동으로 탐색하고 연결함 - Bluetooth LE로 직접 P2P 통신하며, 인접 기기를 거쳐 최대 7홉까지 메시지를 중계함
- Noise Protocol 기반 종단 간 암호화와 순방향 비밀성을 지원함
- Bluetooth LE 제약에 맞춘 압축 바이너리 패킷 형식과 배터리 최적화 듀티 사이클을 사용함
mesh #bluetooth
채널은 시위·재난·외딴 지역 등의 오프라인 통신을 대상으로 함
Nostr 전송 계층은 290개 이상의 전 세계 릴레이를 통해 인터넷 메시징을 제공함
- geohash 좌표로 위치 기반 채팅방을 만들고, 지역마다 새로운 임시 암호화 신원을 사용함
- 개인 메시지는 NIP-17 gift wrapping으로 보호함
- 위치 채널은 인터넷 연결이 필요하며 지역 커뮤니티, 현지 행사, 지역 토론에 활용됨
block
7자: 도시 블록
neighborhood
6자: 구역·동네
city
5자: 도시
province
4자: 주·도
region
2자: 국가·대규모 지역
개인 메시지 라우팅은 사용 가능한 전송 수단을 자동으로 선택함
-
기존 Noise 세션을 이용할 수 있으면 빠르고 비공개성이 높은 Bluetooth 연결을 우선함
-
Bluetooth를 사용할 수 없으면 수신자의 Nostr 공개 키와 NIP-17을 이용해 릴레이망으로 전송함
-
두 방식 모두 사용할 수 없으면 메시지를 대기열에 보관했다가 연결이 성립되면 자동으로 전달함
-
LZ4 메시지 압축, 적응형 배터리 모드, 네트워크 최적화, IRC식 명령과 세 번 탭해 모든 데이터를 즉시 삭제하는
Emergency Wipe도 제공함 -
자세한 프로토콜은 Technical Whitepaper에서 확인할 수 있음
빌드와 현지화, 라이선스
Xcode에서 실행하려면 저장소에서 다음 명령을 사용함
cd bitchat
open bitchat.xcodeproj
- 실제 기기에서 실행하려면 로컬 설정과 코드 서명을 준비해야 함
cp Configs/Local.xcconfig.example Configs/Local.xcconfig
로 설정 파일을 복제함
- 새 파일에 Developer Team ID를 추가하면 기본 Bundle ID가
chat.bitchat.<team_id>
로 설정됨
- entitlement의
group.chat.bitchat
을 group.<your_bundle_id>
로 직접 변경해야 함
- macOS에서는
brew install just
후 just run
으로 설정과 소스 실행이 가능함
- 이후
just clean
을 실행하면 모바일 앱 빌드·개발을 위한 원래 상태로 복원됨
현지화 리소스는 앱과 공유 확장에 나뉘어 있음
- 기본 앱 문자열과 복수형 규칙은
bitchat/Localization/Base.lproj/
의 Localizable.strings
와 Localizable.stringsdict
에 추가함
- 공유 확장 문자열은
bitchatShareExtension/Localization/Base.lproj/Localizable.strings
에서 관리함
- 키는
app_info.features.offline.title
처럼 의도를 드러내도록 작성하고, 가능한 한 기존 키를 재사용함
- 현지화 변경은
xcodebuild -project bitchat.xcodeproj -scheme "bitchat (macOS)" -configuration Debug CODE_SIGNING_ALLOWED=NO build
로 컴파일을 확인함
- 프로젝트는
퍼블릭 도메인으로 배포되며 세부 조건은 LICENSE에서 확인할 수 있음
AI 자동 생성 콘텐츠
본 콘텐츠는 GeekNews의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기