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 재기동)는 오케스트레이터 몫 — 이번 작업은 격리 검증까지.