← 목록
기타 2026-07-31 3KB 읽기 3분

tele E2E ⑩ 공개키 디렉토리

개요

마스터플랜(docs/프로덕션화-마스터플랜.md §⑩) 스펙대로 크라우니텔레(tele.crowny.org) 서버에 E2E 암호화용 공개키 디렉토리를 텔레서버.한선 단독으로 추가. 크립토(X25519 ECDH/HKDF/AES-GCM)는 서버에 절대 구현하지 않고, 서버는 공개키 저장·조회와 암호문 운반만 담당(부록B "검증된 primitive만" 준수).

무엇을 했는지

  • data/공개키.psv (userId|deviceId|pubkey|ts) 신설. _기기등록갱신과 동일한
read-all → (userId,deviceId) 유일키 upsert → tmp+mv 원자교체 패턴 재사용.
  • POST /api/key/publish {token,deviceId,pubkey} — 세션 검증 후 공개키 upsert. _처리키발행.
  • GET /api/key/bundle?token=&user=<id> — 대상 유저의 전 기기 공개키 목록
[{deviceId,pubkey}] 반환. _처리키번들. 차단관계면 403 blocked (④ _차단됐나(me, 대상id) 재사용, 양방향 게이트).
  • 메시지 저장 경로(/api/msg/send)는 무변경 — body는 이미 임의 문자열을 그대로 저장하므로
클라가 암호문 base64를 넣어도 서버는 평문/암호문을 구분하지 않고 그대로 저장·서빙.
  • 서버 코드에 크립토 구현 0줄 (grep 확인: AES/X25519/HKDF/ECDH/GCM 매치 없음, 헤더 주석만 언급).

관련 파일

  • /Users/ef/crowny-tele/텔레서버.한선_공개키갱신/_공개키목록JSON/_처리키발행/_처리키번들
(친구/차단 섹션, _처리친구차단 직후 ~1645줄 부근), 라우트 2건 요청처리에 배선.
  • /Users/ef/crowny-tele/텔레서버.toau — 재컴파일 반영.
  • /Users/ef/crowny-tele/docs/프로덕션화-마스터플랜.md §⑩ — 스펙 원본.
  • /Users/ef/crowny-tele/docs/운영하네스/시나리오.sh — 회귀 24/24 그대로 통과.

검증

  • CROWNY_STRICT=1 hanseonc_high 컴파일 EXIT=0, 경고 0.
  • 격리(TELE_ROOT=/tmp/key-test, TELE_PORT=9629, data 사본):
  • key/publish 동일 (userId,deviceId) 재발행 → 공개키.psv 1줄 유지(pubkey 갱신 확인).
  • 다른 deviceId(dev2) 발행 → 2줄(다기기 키 병존).
  • key/bundle?user=tester2 → tester2 소유 기기 공개키 목록 정상 반환.
  • friend/block 후 bundle 양방향 403 blocked 확인(어느 쪽이 조회하든 차단).
  • 토큰 누락/오류 시 401 auth 확인.
  • 격리 서버 종료: lsof -ti:9629 | xargs kill, 임시 디렉토리 정리.
  • 하네스 시나리오.sh 24/24 PASS(기존 회귀 무손상).
  • 잔여 이슈

    • 클라 측(WebCrypto X25519/HKDF/AES-GCM, IndexedDB 기기키 보관, 안전번호 UI, 다기기 봉인)은
    이번 범위 밖 — 마스터플랜 §⑩ "클라" 항목으로 별도 작업 필요.
    • 라이브 배포(실서비스 :9619 재기동)는 오케스트레이터 몫 — 이번 작업은 격리 검증까지.