← 목록
기타 2026-05-22 7KB 읽기 7분

크라우니메신저 v3 — Phase 4 소버린화

개요

카카오톡/텔레그램 완전 대체를 목표로 소버린(자기주권) 메신저 8축을 추가. 사용자가 자기 신원·데이터·연락처를 100% 소유하게 만드는 모듈.

카카오톡/텔레그램 비교 — 소버린 갭

항목카카오톡텔레그램크라우니 v3
신원 소유권카카오ID 종속전화번호 종속Ed25519 키쌍 (본인 소유)
@핸들 시스템X (전화번호)OO
친구 발견전화번호 업로드 (서버에 평문)전화번호 업로드SHA256 해시 8바이트 접두사만
데이터 백업X (서비스 종속)X (서버 종속)암호화 전체 백업
서버 이전XX이전 토큰 + 검증
PWA 설치X (앱스토어 강제)△ (Web만)풀 PWA + Share Target
푸시 알림Apple/Google FCM 의존FCM 의존Web Push (자체)
다중 디바이스한 폰 + 카톡PCO (수동)QR 페어링 (2분)
상태 메시지 만료카톡: 영구텔레그램: 영구만료 시간 설정
프라이버시 제어일괄 ON/OFF일부개별 모드 + 제외 목록
음성메시지OOO (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 Handlersweb+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

사용자 액션 (실제 카톡 대체 절차)

  1. 친구 초대: 초대링크생성 → QR 또는 단축 URL → 친구 클릭 → 자동 가입
  2. 폰 추가: PC에서 QR 표시 → 폰으로 스캔 → "이 기기 추가" 승인 → 2분 안에 완료
  3. 백업: 매일/매주 자동 백업 → 다운로드 → USB/클라우드 보관
  4. 서버 이전: 이전 토큰 생성 → 새 서버 URL 입력 → 검증 → 자동 동기화
  5. 친구 찾기: 폰의 연락처 → 로컬 해싱 → 8바이트 접두사만 서버 전송 → 매칭 결과 로컬 검증
  6. 음성메시지: 녹음 버튼 길게 누름(PTT) 또는 한 번 탭(녹음) → Opus 인코딩 → 전송
  7. 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