크라우니메신저 v3 — Phase 4 소버린화
개요
카카오톡/텔레그램 완전 대체를 목표로 소버린(자기주권) 메신저 8축을 추가.
사용자가 자기 신원·데이터·연락처를 100% 소유하게 만드는 모듈.
카카오톡/텔레그램 비교 — 소버린 갭
| 항목 | 카카오톡 | 텔레그램 | 크라우니 v3 |
|---|
| 신원 소유권 | 카카오ID 종속 | 전화번호 종속 | Ed25519 키쌍 (본인 소유) |
| @핸들 시스템 | X (전화번호) | O | O |
| 친구 발견 | 전화번호 업로드 (서버에 평문) | 전화번호 업로드 | SHA256 해시 8바이트 접두사만 |
| 데이터 백업 | X (서비스 종속) | X (서버 종속) | 암호화 전체 백업 |
| 서버 이전 | X | X | 이전 토큰 + 검증 |
| PWA 설치 | X (앱스토어 강제) | △ (Web만) | 풀 PWA + Share Target |
| 푸시 알림 | Apple/Google FCM 의존 | FCM 의존 | Web Push (자체) |
| 다중 디바이스 | 한 폰 + 카톡PC | O (수동) | QR 페어링 (2분) |
| 상태 메시지 만료 | 카톡: 영구 | 텔레그램: 영구 | 만료 시간 설정 |
| 프라이버시 제어 | 일괄 ON/OFF | 일부 | 개별 모드 + 제외 목록 |
| 음성메시지 | O | O | O (Opus + 파형) |
신규 8개 모듈 (4,178줄)
1. 유저프로필.한선 (603줄)
@handle 시스템 (영문/숫자/언더스코어, 3~32자)
- 표시이름, 아바타URL, 자기소개, 상태메시지
- 핸들 중복 확인, 부분 일치 검색
- 프로필 카드 (공개키 지문 16자 노출)
2. 신원증명.한선 (607줄)
- 자기주권 신원 — Ed25519 키쌍 (의사 구현, 실제는 JS측)
- 공개키 지문 (SHA256 16자,
3889:54b0:3685:84f0 형식)
SID-1.0.{uid}.{지문}.{시각}.{서명} 토큰
- 핸들 요청 서명, 디바이스 등록 서명
- QR 코드 데이터 (
crowny://id/{지문}/{키32})
- 이중인증 6자리 TOTP (30초)
3. 음성메시지.한선 (507줄)
- 메타데이터: ID, 발신자, 길이, 포맷, 파형, transcript
- 포맷 지원: Opus / WebM / MP3
- 재생속도: 0.5/1/1.5/2/3
- JS 코드 생성기: 녹음/재생/PTT/파형 그리기
- STT (음성→텍스트) 요청/저장
- 자동 삭제 (보관일수)
4. 초대링크.한선 (367줄)
- Base32 8자 짧은 코드
- 종류: user/group/channel/server
- TTL (기본 7일), 최대 사용 횟수
crowny://join?code=XXXX + https://talk.crowny.org/i/XXXX
- QR 이미지 데이터, 초대 만료 정리
5. QR페어링.한선 (461줄)
- 새 기기 ↔ 기존 계정 페어링 (2분 타임아웃)
- 상태: init → pending → approved/rejected/expired
CROWNY_PAIR:v1:{pair_id}:{qr_code}:{server} QR 형식
- 디바이스 목록/삭제/이름 변경 (분실 기기 제거)
- 페어링 이력
6. 백업복원.한선 (979줄)
- 5종 내보내기: 메시지/연락처/그룹/프로필/미디어
- 통합 JSON 백업 + AES-GCM 암호화
- SHA256 체크섬 검증
- 충돌 해결: overwrite / skip / merge
- 서버 간 이전: 이전 토큰 + 공개키 검증
- 자동 백업 (일간/주간), 오래된 백업 정리
7. 연락처발견.한선 (259줄)
- 프라이버시 보호 친구 찾기
- 클라이언트: SHA256 후 8바이트 접두사만 전송
- 서버: 같은 접두사 후보 반환
- 클라이언트: 로컬에서 풀해시 매칭
- 발견 허용 모드: blocked / handle / handle+hash / all
- 차단 해시 (발견 거부)
8. 상태표시.한선 (395줄)
- 프레즌스: online/away/busy/offline/invisible
- 자동: 5분 무활동 → away, 30분 → offline
- 상태 메시지 + 이모지 + 만료 시간
- 프라이버시 모드 (개별): everyone/contacts/nobody/except
- 마지막 접속 표시 형식 ("방금/N분 전/N시간 전/N일 전")
- 종합 상태 카드 (UI용)
PWA — 진짜 앱처럼 설치
manifest.json
- 10개 아이콘 크기 (72 ~ 1024)
display: standalone + display_override (window-controls-overlay)
- Share Target API — 사진/파일 공유받기
- Protocol Handlers —
web+crowny:// 링크 처리
- File Handlers — 이미지/영상/음성 직접 열기
- 단축키 (Shortcuts): 새 채팅 / 검색 / 설정
sw.js (서비스 워커 v2026-05-22)
- 캐시 전략: API 패스스루, 미디어 캐시-우선, SPA 네트워크-우선
- 푸시 알림: 답장/열기 액션, 진동, 배지
- 백그라운드 동기화: 오프라인 메시지 큐
- 주기적 동기화: 1시간마다 새 메시지 체크
- Share Target POST 처리
index.html 통합
- PWA 설치 배너 (beforeinstallprompt)
- 업데이트 감지 + 재로드 프롬프트
- 알림 권한 요청 + 푸시 구독
- 오프라인 감지 + 토스트
- standalone 모드 클래스
신규 프로토콜 타입 (24개 추가)
T_VOICE_MSG, T_VOICE_STT
T_PROFILE_UPDATE, T_PROFILE_GET, T_PROFILE_SEARCH
T_IDENTITY
T_INVITE_CREATE, T_INVITE_USE, T_INVITE_CANCEL
T_PAIR_START, T_PAIR_SCAN, T_PAIR_APPROVE, T_PAIR_REJECT, T_PAIR_STATUS
T_BACKUP_REQUEST, T_BACKUP_READY, T_BACKUP_RESTORE
T_DISCOVER
T_PRESENCE_RICH, T_STATUS_SET, T_PRIVACY_SET
최종 통계
| 항목 | 수치 |
|---|
| 한선씨 파일 | 45개 |
| 한선씨 총 줄수 | 18,133줄 |
| 신규 8개 모듈 | 4,178줄 |
| PWA 자원 | 12개 (10 PNG + 1 SVG + 1 JSON) |
| 컴파일 | 45/45 (100%) |
| 서버 | v3.0.0 실행중, talk.crowny.org |
사용자 액션 (실제 카톡 대체 절차)
- 친구 초대:
초대링크생성 → QR 또는 단축 URL → 친구 클릭 → 자동 가입
- 폰 추가: PC에서 QR 표시 → 폰으로 스캔 → "이 기기 추가" 승인 → 2분 안에 완료
- 백업: 매일/매주 자동 백업 → 다운로드 → USB/클라우드 보관
- 서버 이전: 이전 토큰 생성 → 새 서버 URL 입력 → 검증 → 자동 동기화
- 친구 찾기: 폰의 연락처 → 로컬 해싱 → 8바이트 접두사만 서버 전송 → 매칭 결과 로컬 검증
- 음성메시지: 녹음 버튼 길게 누름(PTT) 또는 한 번 탭(녹음) → Opus 인코딩 → 전송
- PWA 설치: 브라우저 → "앱으로 설치" 배너 → 홈화면 추가 → 카톡처럼 사용
잔여 작업
- 신원증명 실제 Ed25519 (JS WebCrypto 호출)
- 음성→텍스트 (STT) 서비스 연결
- VAPID 키 + 푸시 서버 구현
- 백업 AES-GCM 실제 암호화 (JS측)
- 새 8개 모듈 → 서버코어 패킷 디스패치 통합
- UI: 프로필 편집 화면, QR 스캐너, 백업 관리, 친구 찾기 페이지
관련 파일
- 한선씨 모듈:
/Users/ef/CrownyOS/apps/메신저/v3/*.한선
- PWA 자원:
/Users/ef/CrownyOS/apps/메신저/v3/웹v3/manifest.json, icons/, sw.js
- 이전 단계:
2026-05-19-crowny-messenger-v3-full-hanseon.md