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

크라우니메신저 v3 — 소버린 신원 시스템

개요

카카오ID/구글ID 의존 없이 사용자가 자기 신원을 소유하는 시스템 구현. 두 개의 한선씨 파일로 구성: 유저프로필 + 신원증명.

무엇을 했는지

파일 1: 유저프로필.한선 (603줄)

  • 프로필DB = [] 전역 배열 저장소
  • 핸들유효() — 영문/숫자/언더스코어, 3~32자, 숫자/언더스코어 시작 불가
  • 핸들중복확인() — DB 조회
  • 프로필생성(user_id, handle, 표시이름) — 유효성 검사 + 중복 방지 후 생성
  • 프로필조회(user_id), 핸들조회(handle) — 조회
  • 표시이름변경, 자기소개변경, 상태메시지변경, 아바타URL변경, 공개키등록 — 수정
  • 프로필직렬화() — JSON 출력
  • 프로필카드생성() — 공개용 카드 (민감정보 제외, 공개키 지문만)
  • 프로필검색(검색어, 최대수) — 핸들/이름 부분 일치 (소문자 정규화)

파일 2: 신원증명.한선 (607줄)

  • 키쌍생성() — SHA256+DH 기반 의사 Ed25519 키쌍 (CRNprv/CRNpub 접두사)
  • 공개키지문(공개키) — SHA256 첫 16자, 공개키지문포맷() — 4:4:4:4 형식
  • 서명(메시지, 개인키) — HMAC-SHA256 기반 의사 서명
  • 서명검증(메시지, 서명값, 공개키) — 공개키 지문 기반 교차 검증
  • 신원토큰생성(user_id, 공개키, 개인키) — self-signed 토큰 (SID-1.0 형식)
  • 신원토큰검증(토큰) — 구조/버전 검증
  • 신원토큰완전검증(토큰, 공개키) — 공개키 지문 일치 + 서명 검증
  • 핸들요청서명(handle, user_id, 개인키) — 핸들 등록 요청 서명
  • 디바이스등록서명(device_id, user_id, 개인키) — 멀티디바이스 등록
  • 키지문QR코드데이터(공개키) — crowny://id/{지문}/{키앞32자}
  • 이중인증코드생성() / 이중인증검증() — 6자리 TOTP 의사 구현

주요 설계 결정

  • 토큰 파싱: SID-1.0에 점이 포함되므로 파트[0]+"."+ 파트[1]로 버전 재조합
  • 의사 Ed25519: VM 정수 범위 내 DH (mod 999983). 실제 보안은 JS 측 Ed25519가 담당
  • 포함 버그 대응: 모든 부분 일치 검사에 포함() >= 0 패턴 대신 직접 루프 사용

테스트 결과

  • 유저프로필: 컴파일 exit 0, 셀프테스트 7/7 PASS
  • 신원증명: 컴파일 exit 0, 셀프테스트 11/11 PASS

관련 파일 경로

  • /Users/ef/CrownyOS/apps/메신저/v3/유저프로필.한선
  • /Users/ef/CrownyOS/apps/메신저/v3/신원증명.한선
  • /Users/ef/CrownyOS/apps/메신저/v3/인증관리.한선 (기존 JWT 인증 — 참고)
  • /Users/ef/CrownyOS/apps/메신저/v3/도구.한선 (UUID, J파싱, DB유틸)
  • /Users/ef/CrownyOS/crownyc/libs/해시.한선 (SHA256, HMAC, Base64)

잔여 이슈

  • 서명검증(): 개인키 없이 공개키만으로 검증하는 로직은 의사 구현. 실제 Ed25519는 JS FFI 필요
  • 프로필DB 파일 영속성 미구현 — 도구.한선DB저장/DB불러오기 연결 필요
  • 서버코어.한선에 소버린 신원 라우트 추가 필요 (/api/profile, /api/identity)