이 레포가 무엇을 하는 물건인가.
다른 모든 메신저는 사용자에게 어떤 형태의 식별자를 부여한다. 전화번호, 사용자명, 이메일, 공개키, 혹은 랜덤 UUID라도 — 이 식별자들이 모이면 '누가 누구와 언제 통신했는가'라는 메타데이터 그래프가 드러난다. SimpleX는 메시지를 '사람'이 아니라 '일회용 단방향 큐 주소'로 전달함으로써 이 그래프 자체를 없앤다.
코어는 Haskell로 구현된 SMP(SimpleX Messaging Protocol) 서버·클라이언트 라이브러리이며, 그 위에 iOS(Swift), Android·Desktop(Kotlin/Compose Multiplatform), CLI(Haskell 터미널 앱)가 올라간다. 자체 서버를 운영할 수도 있고, 공식 프리셋 서버(smp11, smp12, smp14.simplex.im)를 그대로 쓸 수도 있다.
Signal·Matrix 대비 차별점과 트렌딩 이유.
2026년 상반기 TrendShift Daily 상위에 오른 배경은 세 가지가 겹친다. ① 메타데이터 프라이버시에 대한 인식 확산(EU AI법·각국 디지털 감시 논쟁), ② Trail of Bits의 2번째 보안 감사(2024년 7월) 공개로 신뢰도 상승, ③ Jack Dorsey·Asymmetric의 투자 유치(2024년 8월)로 미디어 노출 급증. 여기에 포스트-퀀텀 암호를 실제 적용한 몇 안 되는 오픈소스 메신저라는 기술적 차별점이 더해진다.
| 비교 항목 | SimpleX | Signal | Matrix (Element) | Telegram |
|---|---|---|---|---|
| 사용자 식별자 | 없음 (큐 주소만) | 전화번호 필수 | 사용자명@도메인 | 전화번호 필수 |
| 메타데이터 보호 | 누가 누구와 통신하는지 서버가 모름 | 전화번호 연결 그래프 노출 | 서버가 계정 보유 | 거의 없음 |
| 서버 구조 | 분산, 독립 릴레이, 서버간 통신 없음 | 중앙 서버 | 연합 서버 | 중앙 서버 |
| E2E 암호 | 이중 래칫 + 포스트-퀀텀 | 이중 래칫 | 선택적 (방 설정) | Secret Chat만 |
| 자체 서버 운영 | 완전 지원 | 불가 | 가능 | 불가 |
| 스팸 방지 | ID가 없어서 스팸 불가능 | 전화번호로 타겟팅 가능 | 사용자명 노출 | 사용자명 노출 |
| 보안 감사 | Trail of Bits 2회 (2022·2024) | 복수 | 복수 | 없음(공개 감사) |
| 코어 언어 | Haskell | Java/Kotlin, Swift | TypeScript/Go | C++ |
| 라이선스 | AGPL-3.0 | AGPL-3.0 | Apache 2.0 | 비공개 |
친구에게 연락하려면 반드시 초대 링크나 QR코드를 먼저 공유해야 한다. 사용자명 검색으로 누군가를 찾거나 전화번호로 연락처를 동기화하는 기능이 없다. 연락처가 많은 일반 사용자에게는 불편하다.
또한 Signal처럼 "친구가 이미 쓰고 있을 확률"이 낮아 네트워크 효과가 약하다. 2024년 기준 활성 사용자 수를 공식적으로 집계조차 못 한다(식별자가 없으므로).
SMP 릴레이 서버는 '큐에 메시지가 왔다 갔다'는 사실만 안다. 발신자가 누구인지, 수신자가 누구인지, 이 큐가 어떤 대화에 속하는지 모른다. 서버 운영자를 신뢰할 필요가 없다는 뜻이다 — 사용자가 공식 서버를 써도, 적대적 국가가 운영하는 서버를 강제로 써도, 메시지 내용과 상대방 정보는 노출되지 않는다.
Haskell 코어부터 Swift/Kotlin 클라이언트, 암호 레이어, 서버 인프라까지.
| 모듈/패키지 | 역할 | 주요 기술 |
|---|---|---|
| simplex-chat.cabal | GHC 9.6.3 기반 빌드. Cabal + Stack 지원 | GHC, cabal-install, hpack |
| Simplex.Chat (src/) | 채팅 로직 최상위 — 연결·메시지·파일·그룹 관리 | Haskell, STM, UnliftIO |
| Simplex.Chat.Controller | 이벤트 루프·상태 관리·명령 디스패처 | ReaderT 패턴, TVar, MVar |
| Simplex.Chat.Store (SQLite) | 로컬 암호화 DB (SQLite + sqlcipher) | SQLite, 마이그레이션 시스템 |
| Simplex.Chat.Protocol | 채팅 레벨 메시지 포맷 (JSON) | Aeson, JSON 직렬화 |
| Simplex.Chat.Mobile | iOS/Android FFI 바인딩 — Swift/Kotlin에 C API 제공 | Foreign Function Interface (FFI) |
| Simplex.Messaging.Agent | SMP 프로토콜 에이전트 (simplexmq 라이브러리) | SMP, XFTP, 큐 관리 |
| Simplex.Messaging.Crypto | 암호 원시함수 — Curve25519/448, NaCl, Kyber | crypton, libsodium, Kyber-1024 |
| Simplex.FileTransfer (XFTP) | 대용량 파일 전송 프로토콜 (암호화, 분산) | XFTP, HTTP/2, 청크 업로드 |
| 플랫폼 | 언어/프레임워크 | 경로 | 특이사항 |
|---|---|---|---|
| iOS | Swift, SwiftUI | apps/ios/ | Haskell 코어를 XCFramework로 임베드. TestFlight 베타 상시 운영 |
| Android | Kotlin, Jetpack Compose | apps/multiplatform/ (android) | Compose Multiplatform 기반. Haskell 코어 .so 링크 |
| Desktop (Win/Mac/Linux) | Kotlin, Compose Multiplatform | apps/multiplatform/ (desktop) | JVM 기반. 동일 Kotlin 코드베이스로 3개 OS 지원 |
| CLI / 터미널 | Haskell | apps/simplex-chat/ | WebSocket JSON API 서버 모드 지원. 봇 개발에 활용 |
| 봇 예제 | Haskell | apps/simplex-bot/, apps/simplex-bot-advanced/ | WebSocket API로 봇 작성 예시. 다른 언어로도 봇 작성 가능 |
| 레이어 | 알고리즘 | 목적 |
|---|---|---|
| E2E 메시지 암호 | Double Ratchet (Curve448 초기 키교환) | 완전 순방향 비밀성 + 사후 침해 복구 |
| 포스트-퀀텀 | CRYSTALS-Kyber-1024 (NIST PQC 표준) | 매 래칫마다 PQ 캡슐화 키교환 (v5.6+) |
| 큐 레이어 암호 | NaCl cryptobox (Curve25519) | 서버-클라이언트 구간 추가 암호화 |
| 전송 레이어 | TLS 1.2/1.3 (CHACHA20POLY1305_SHA256) | 클라이언트-서버 전송 암호화 |
| 로컬 DB 암호 | SQLCipher (AES-256) | 기기 분실 시 데이터 보호 |
| 파일 전송 | XFTP + AES-256-GCM | 최대 1GB 파일 암호화 전송·저장 |
| 재생 공격 방지 | tlsunique 채널 바인딩 + 큐별 에페머럴 서명키 | 캡처된 패킷 재사용 차단 |
| 컴포넌트 | 설명 |
|---|---|
| SMP 서버 (simplexmq) | 인메모리 메시지 큐. Haskell로 구현. 포트 5223(SMP), 443(HTTPS 서버 정보 페이지). 메시지는 수신 즉시 삭제 |
| XFTP 서버 | 대용량 파일 청크 릴레이. 역시 Haskell. 기본 포트 443 |
| 배포 방법 | 설치 스크립트 (install.sh), Docker, Linode Marketplace 원클릭 |
| Private Message Routing | v6.0+: 수신자가 고른 서버를 통해 메시지 라우팅 — 발신자 IP를 수신 서버에 노출하지 않음 |
| Tor 지원 | SMP/XFTP 서버 .onion 주소 운영 가능. 클라이언트 SOCKS5 프록시 설정으로 Tor 우회 |
| 재현 가능한 빌드 | 서버 바이너리 reproducible build 지원 (docs/REPRODUCE.md) |
단방향 큐 메커니즘, 프라이빗 메시지 라우팅, 이중 래칫 흐름.
"SimpleX 큐 = 매번 주소가 바뀌는 우편함"이라고 생각하자. 친구에게 편지를 보낼 때마다 새 우편함 번호를 알려주고, 이전 번호는 폐기한다. 우편배달부(SMP 서버)는 그 번호의 우편함이 누구 것인지 모른다. 편지 내용(E2E 암호)도 읽을 수 없고, 발신인과 수신인의 관계도 모른다. 심지어 두 방향(A→B, B→A)이 각각 다른 우체국(서버)을 쓰면, 그 우체국들도 서로 연결된 대화인지 모른다.
| 패턴 | 구현 | 효과 |
|---|---|---|
| 식별자 없는 라우팅 | 큐 ID = 랜덤 바이트, 큐마다 에페머럴 인증키 | 서버가 통신 그래프 구축 불가 |
| 방어 심층(Defense in Depth) | TLS + 큐 암호 + E2E 이중 래칫 + PQ-KEM + 패딩 | 한 레이어 뚫려도 나머지가 보호 |
| 로컬 우선 저장 | SQLite + SQLCipher, 서버에는 임시 메시지만 | 서버 압수수색 = 빈 창고 |
| 전송 격리 | 프로파일별 / 연락처별 별도 TCP 연결·Tor 서킷 | 트래픽 상관관계 분석 방해 |
| STM 동시성 (Haskell) | Software Transactional Memory로 상태 관리 | 데드락 없는 동시 다중 큐 처리 |
| ReaderT 아키텍처 | ChatController가 스레드 간 공유 환경 제공 | 모나딕 에러 처리, 테스트 용이 |
저장소 최상위 레이아웃과 각 폴더의 역할.
핵심 라이브러리(simplexmq)는 별도 저장소에 있다 — cabal.project가 https://github.com/simplex-chat/simplexmq를 직접 의존한다. 이 레포(simplex-chat)는 그 위에 올라가는 채팅 앱 레이어다. SMP 서버 바이너리를 직접 빌드하려면 simplexmq 레포를 봐야 한다.
apps/multiplatform/의 Kotlin/Compose 코드는 Android와 Desktop(JVM)이 공유하고, iOS만 Swift로 분리되어 있다. Haskell 코어는 각 플랫폼에 네이티브 라이브러리(XCFramework, .so)로 컴파일되어 FFI로 호출된다.
이 레포에서 무엇을 배울 수 있는가 — Haskell·암호·프라이버시 프로토콜.
| 배울 것 | 어디서 | 핵심 개념 |
|---|---|---|
| ReaderT 모나드 스택 | Controller.hs, Chat.hs | 환경 공유·에러 전파 (ExceptT, ReaderT IO) |
| STM (Software Transactional Memory) | Controller.hs, Library/ | TVar, TMVar로 데드락 없는 동시성 |
| GADTs + DataKinds | Protocol.hs, Messages/CIContent.hs | 타입 안전한 메시지 타입 계층 |
| Template Haskell (JSON 파생) | 거의 모든 파일 | Aeson deriveJSON으로 자동 JSON 직렬화 |
| FFI (Foreign Function Interface) | Chat/Mobile.hs | Haskell→C→Swift/Kotlin 브리지 패턴 |
| SQLite 마이그레이션 | Chat/Store/ | 버전별 스키마 마이그레이션·롤백 설계 |
| 대규모 Haskell 프로젝트 구조 | simplex-chat.cabal | exposed-modules, flag 시스템, cabal.project |
| 배울 것 | 어디서 | 핵심 개념 |
|---|---|---|
| Double Ratchet 구현 이해 | docs/GLOSSARY.md, simplexmq 레포 | KDF 체인, 에페머럴 키 회전, 순방향 비밀성 |
| 포스트-퀀텀 암호 (Kyber) | blog/20240314-simplex-chat-v5-6-...md | KEM (Key Encapsulation Mechanism), NIST PQC |
| NaCl/libsodium 사용법 | Simplex.Messaging.Crypto | cryptobox, keypair 생성, 서명·검증 |
| 메타데이터 위협 모델 | docs/SIMPLEX.md, SECURITY.md | 트래픽 분석, Sybil 공격, 재생 공격 방어 |
| TLS pinning + 채널 바인딩 | docs/SECURITY.md | tlsunique, 서버 오프라인 인증서 검증 |
| 보안 감사 보고서 읽기 | docs/*.pdf (Trail of Bits 2022·2024) | 실제 감사 방법론·발견사항 분석 |
| 배울 것 | 어디서 | 핵심 개념 |
|---|---|---|
| SMP 프로토콜 설계 | docs/SIMPLEX.md, simplexmq/protocol/ | 큐 기반 메시지 릴레이, 서버리스 라우팅 |
| XFTP 파일 전송 프로토콜 | blog/20230301-...file-transfer-protocol.md | 청크 분산, 암호화 파일 배포 |
| Tor 통합 패턴 | docs/SERVER.md (Tor 섹션) | SOCKS5 프록시, .onion 서버 운영 |
| Private Message Routing | blog/20240604-...private-routing.md | 퍼 메시지 전송 익명성, 프록시 체인 |
apps/simplex-bot/ 예제를 보고 자신만의 봇을 만들어본다. CLI를 WebSocket JSON API 서버 모드로 실행하면(simplex-chat -p 5225) 다른 언어(Python, Node.js)에서도 봇을 만들 수 있다. 예: 특정 메시지에 자동 응답하는 에코봇, RSS 피드를 SimpleX 그룹에 전달하는 봇.
클라이언트 설치 / 자체 SMP 서버 운영 방법.
| 플랫폼 | 최소 요구사항 | 설치 방법 |
|---|---|---|
| iOS | iOS 16+ | App Store 또는 TestFlight (베타) |
| Android | Android 8.0+ (API 26) | Google Play / F-Droid / APK 직접 다운로드 |
| Desktop (Windows) | Windows 10 64-bit | GitHub Releases에서 .exe 다운로드 |
| Desktop (macOS) | macOS 12+ | GitHub Releases에서 .dmg 다운로드 |
| Desktop (Linux) | Ubuntu 20.04+ / Debian 11+ | GitHub Releases에서 .AppImage 또는 .deb |
| CLI (터미널) | Linux/macOS/Windows (x86_64, ARM64) | curl -o- https://raw.githubusercontent.com/simplex-chat/simplex-chat/stable/install.sh | bash |
# 터미널 앱 설치 (Linux/macOS) curl -o- https://raw.githubusercontent.com/simplex-chat/simplex-chat/stable/install.sh | bash # 실행 simplex-chat # WebSocket API 서버 모드 (봇 개발용) simplex-chat -p 5225
| 항목 | 권장 사양 | 비고 |
|---|---|---|
| 서버 | VPS (1 vCPU, 512MB RAM) | 저사양으로도 충분. 메시지는 인메모리 임시 저장 |
| OS | Ubuntu 22.04 LTS | Debian 계열 권장 |
| 도메인 | 필수 (smp.example.com) | A·AAAA 레코드 설정. 클라이언트 링크 생성에 필요 |
| 방화벽 | 포트 80, 443, 5223 개방 | 80·443: TLS/HTTPS 정보 페이지, 5223: SMP 프로토콜 |
| 저장소 | 2GB+ | 로그·큐 레코드용 (메시지 본문은 즉시 삭제) |
# 1. simplexmq 설치 스크립트 실행 curl -o- https://raw.githubusercontent.com/simplex-chat/simplexmq/stable/scripts/install.sh | bash # 2. 방화벽 설정 ufw allow 80/tcp && ufw allow 443/tcp && ufw allow 5223/tcp # 3. 서버 초기화 (도메인을 실제 도메인으로 교체) su smp -c 'smp-server init --yes \ --store-log \ --no-password \ --control-port \ --socks-proxy \ --fqdn=smp.example.com' # 서비스 시작 systemctl enable smp-server && systemctl start smp-server # 서버 주소 확인 (앱에 입력할 주소) smp-server -v
자체 SMP 서버를 운영해도 다른 SMP 서버(공식 또는 타인 운영) 사용자와 통신할 수 있다. 이메일처럼 서버가 달라도 메시지가 전달된다. 단 서버끼리 직접 통신하지 않는다는 점이 이메일과 다르다 — 클라이언트가 상대방 큐가 있는 서버에 직접 접속해서 메시지를 넣는다.
난이도별 3~5개 — LV.1(입문)부터 LV.5(고급)까지.
모바일 앱 또는 CLI를 설치하고, 친구나 자기 자신의 두 번째 기기와 QR코드로 연결해본다. 연결 과정에서 "링크 공유 → 수락 → 메시지 교환"이 어떻게 동작하는지 체감한다.
확인 포인트: 연결 정보 화면의 "보안 코드 확인" 기능을 써보고, 이 코드가 왜 MITM 방지에 중요한지 GLOSSARY.md를 읽어 이해한다.
Linux/macOS 서버에 simplex-chat CLI를 설치하고 모바일 앱과 연결해 메시지를 주고받는다. CLI 명령어(/connect, /send, /chats)를 익힌다.
심화: CLI를 simplex-chat -p 5225로 WebSocket 모드로 실행하고, Python의 websockets 라이브러리로 JSON API에 접속해 메시지를 프로그래밍 방식으로 보내본다.
VPS(월 $5~10 수준)에 smp-server를 설치하고, 도메인을 연결한 후 앱에서 해당 서버를 추가해 메시지가 자체 서버를 통해 전달되는지 확인한다. 서버 정보 페이지(HTTPS)가 작동하는지, 일별 통계가 기록되는지 점검한다.
심화: Tor onion 주소도 함께 설정하고, 앱의 SOCKS5 프록시를 127.0.0.1:9050으로 설정해 Tor 경유 연결도 테스트한다.
apps/simplex-bot-advanced/ 코드를 읽고, 봇이 WebSocket JSON API를 어떻게 사용하는지 분석한다. 봇에 기능을 추가해본다 — 예: 특정 키워드 수신 시 외부 API(날씨, 환율)를 조회해서 응답, 또는 파일 수신 시 자동 저장.
Haskell 학습 포인트: Controller.hs의 ChatController 타입과 ReaderT 스택을 읽고, 대규모 Haskell 앱의 상태 관리 방식을 이해한다.
simplexmq/protocol/simplex-messaging.md(별도 레포)의 프로토콜 명세를 읽고, Python으로 SMP 서버에 직접 TCP 연결을 맺어 큐 생성(NEW)→메시지 전송(SEND)→수신(SUB/GET) 명령을 날려본다. TLS 위에서 SMP 바이너리 프레임을 직접 파싱하는 과정에서 프로토콜 설계의 디테일을 체득한다.
목표: "사용자 식별자 없이 큐 ID만으로 메시지를 전달한다"는 것이 코드 레벨에서 어떻게 구현되는지 직접 확인한다.
SimpleX 코드베이스를 이해하기 위한 주차별 학습 경로.
| 주차 | 주제 | 학습 자료 / 실습 |
|---|---|---|
| 1주차 | Haskell 기초 | Learn You a Haskell for Great Good (무료 온라인). 타입·모나드·IO 액션 이해. 목표: Maybe, IO, do 표기법 익숙하게 사용 |
| 2주차 | Haskell 동시성 | Parallel and Concurrent Programming in Haskell (Simon Marlow). STM 챕터 중점. TVar·TMVar·STM 트랜잭션 실습 |
| 3주차 | ReaderT 패턴 · 모나드 변환자 | mtl 라이브러리 문서 + simplex-chat Controller.hs 읽기. ExceptT, ReaderT IO 스택 직접 구현해보기 |
| 4주차 | 암호 기초 (대칭·비대칭) | Cryptography I (Coursera, Dan Boneh). AES-GCM, Curve25519, 디피-헬만 키교환 원리 이해 |
| 5주차 | 이중 래칫 알고리즘 | Signal Double Ratchet 공식 명세 (signal.org/docs/specifications/doubleratchet). SimpleX GLOSSARY.md의 관련 항목과 연결 |
| 6주차 | 포스트-퀀텀 암호 | NIST PQC 표준화 문서 (Kyber/ML-KEM). simplex-chat 블로그 포스트 20240314-v5-6-quantum-resistance.md 읽기 |
| 7주차 | 네트워크 프로토콜 설계 | simplexmq/protocol/simplex-messaging.md 전체 읽기. SMP 큐 생명주기(생성·구독·메시지·삭제) 플로우차트 직접 그려보기 |
| 8주차 | Compose Multiplatform | JetBrains Compose Multiplatform 공식 튜토리얼. apps/multiplatform/의 ChatModel.kt, views/ 코드 읽기 |
| 9주차 | SQLite + 암호화 DB | SQLCipher 공식 문서. simplex-chat/Store/ 마이그레이션 패턴 분석. 버전별 스키마 변화 추적 |
| 10주차 | 보안 감사 보고서 읽기 | docs/SimpleX_Design_Review_2024_Summary_Report.pdf (Trail of Bits). 발견된 취약점·완화 방법·미해결 사항 정리 |
| 11주차 | Tor + 프라이버시 네트워킹 | Tor 공식 문서. SMP 서버 .onion 주소 설정 실습. Tor vs VPN vs SimpleX Private Routing 비교 분석 |
| 12주차 | 종합 프로젝트 | SimpleX 기반 자신만의 서비스 구현 (알림봇, 파일 공유 서버, 비밀 메모 앱 등). 전체 스택(Haskell 서버 + Kotlin UI) 수정 경험 |
이 레포를 읽다가 막히는 용어 모음.
| 용어 | 한국어 설명 |
|---|---|
| SMP (SimpleX Messaging Protocol) | SimpleX가 설계한 서버-클라이언트 메시지 릴레이 프로토콜. 큐 기반, 사용자 식별자 없음. 포트 5223 |
| XFTP (SimpleX File Transfer Protocol) | 대용량 파일을 암호화·청크 분산하여 릴레이하는 프로토콜. 최대 1GB 지원 |
| Unidirectional Queue (단방향 큐) | 한 방향으로만 메시지를 전달하는 큐. A→B 채널과 B→A 채널이 별도 큐·별도 서버 |
| Double Ratchet | Signal이 설계한 E2E 암호 알고리즘. 매 메시지마다 키를 회전시켜 순방향 비밀성·사후 침해 복구 제공 |
| Forward Secrecy (순방향 비밀성) | 장기 키가 유출되어도 과거 메시지는 해독 불가. 세션키를 주기적으로 교체 |
| Post-Compromise Security | 키가 한 번 유출되어도 이후 메시지는 안전. 다음 래칫 단계에서 새 키로 회복 |
| Kyber / ML-KEM | NIST가 표준화한 포스트-퀀텀 KEM. 격자 암호 기반. SimpleX는 Kyber-1024 사용 |
| KEM (Key Encapsulation Mechanism) | 공개키로 대칭키를 '캡슐화'해서 전달하는 방식. 포스트-퀀텀 키교환의 기본 메커니즘 |
| NaCl / libsodium | 고성능 암호 라이브러리 (Daniel Bernstein 설계). SimpleX가 큐 레이어 암호에 사용 |
| SQLCipher | SQLite의 암호화 확장. 전체 DB 파일을 AES-256으로 암호화. SimpleX 로컬 DB에 사용 |
| STM (Software Transactional Memory) | Haskell의 동시성 메커니즘. 트랜잭션으로 공유 상태를 관리, 데드락 없음 |
| ReaderT 패턴 | Haskell에서 환경(설정·공유 상태)을 함수에 명시적으로 전달하지 않고 모나드 스택으로 전달하는 패턴 |
| FFI (Foreign Function Interface) | Haskell 코드를 C ABI로 내보내서 Swift/Kotlin에서 호출하는 인터페이스. Mobile.hs가 진입점 |
| Compose Multiplatform | JetBrains의 Kotlin UI 프레임워크. 하나의 Kotlin 코드로 Android·Desktop·iOS UI를 생성 |
| tlsunique | TLS 세션 고유 채널 바인딩값. SimpleX가 재생 공격 방지를 위해 서버 명령 서명에 사용 |
| Private Message Routing | v6.0+ 기능. 발신자 IP를 수신 SMP 서버에 노출하지 않기 위한 프록시 경유 라우팅 |
| Trail of Bits | 미국의 저명한 보안 감사 회사. SimpleX를 2022년(구현 감사)·2024년(프로토콜 설계 감사) 두 차례 검토 |
| AGPL-3.0 | GNU Affero General Public License. 서버에서 실행해도 소스 공개 의무 발생. 상업적 사용 시 별도 계약 필요 |
| Sybil 공격 | P2P 네트워크에서 다수의 가짜 노드를 만들어 네트워크를 장악하는 공격. SimpleX는 서버가 서로를 모르므로 해당 없음 |
| Transport Isolation | 프로파일별·연락처별로 별도 TCP 연결과 Tor 서킷을 사용해 트래픽 상관관계 분석을 어렵게 하는 기능 |
공식 문서·감사 보고서·관련 자료.
| 분류 | 링크 | 설명 |
|---|---|---|
| 메인 레포 | github.com/simplex-chat/simplex-chat | 채팅 앱 소스 (Haskell + Swift + Kotlin) |
| 프로토콜 레포 | github.com/simplex-chat/simplexmq | SMP/XFTP 서버·프로토콜 라이브러리 |
| 공식 사이트 | simplex.chat | 앱 다운로드·블로그·공식 문서 |
| 설계 철학 | docs/SIMPLEX.md | 경쟁자 비교·프라이버시 모델 설명 |
| 용어 사전 | docs/GLOSSARY.md | 암호·통신 용어 상세 해설 |
| SMP 서버 운영 | docs/SERVER.md | 자체 서버 설치·Tor 설정 가이드 |
| Trail of Bits 감사 2022 | 블로그: v4.2 보안 감사 | 구현 보안 감사 결과 (2022년 11월) |
| Trail of Bits 감사 2024 | 블로그: v6.1 프로토콜 설계 감사 | 암호 프로토콜 설계 검토 (2024년 7월) |
| 포스트-퀀텀 상세 | 블로그: v5.6 양자 저항성 | Kyber 통합 배경·기술 설명 |
| 투자 유치 발표 | 블로그: v6.0 비전·투자 | Jack Dorsey·Asymmetric 투자·Private Routing 소개 |
| CLI 문서 | docs/CLI.md | 터미널 앱 명령어 레퍼런스 |
| Signal Double Ratchet | signal.org/docs/specifications/doubleratchet | SimpleX가 채택한 E2E 암호 알고리즘 공식 명세 |
| NIST PQC ML-KEM | csrc.nist.gov — FIPS 203 (ML-KEM) | Kyber의 NIST 표준화 문서 |