본문 바로가기
C.W.K.
Stream
Lesson 04 of 04 · published

말 말고 지문을 로깅해

~9 min · privacy, logging, secrets

Level 0침묵
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"평범한 요청은 사적 텍스트가 아니라 해시랑 길이를 로깅해. 딱 하나의 예외, Studio 텍스트는 일부러 쓴 거고."

참견 안 하면서 디버그되게

사적인 말을 하는 엔진은 뭘 적어두는지 조심해야 해. Bellows는 요청을 알아보고 디버그할 만큼만 로깅해. 텍스트의 해시, 길이, 모델, 언어. 근데 전체 사적 텍스트 자체는 절대 안 남겨. "이게 어느 요청이었고 바뀌었나?"는 지문으로 답할 수 있거든. 그러자고 로그 파일에 실제 말이 있을 필요는 없고, 한번 로그에 들어가면 그 로그가 가는 데마다 같이 새.

이름 붙은 예외

Bellows가 텍스트를 내용째로 남기는 데는 딱 하나, Studio야. Studio 텍스트는 명시적으로 저작된 프로젝트 데이터거든. 문서에 타이핑하듯 일부러 프로젝트에 써넣은 거지. 그걸 기록하는 게 요점이지 프라이버시 구멍이 아니야. 규율은 '텍스트를 절대 저장 마'가 아니라, '사적 텍스트는 기본이 지문, 예외는 이름 붙고 의도적'이야.

키는 더 아래 살아

provider API 키는 모든 것 중 제일 엄격한 규칙을 받아. source에도, SQLite에도, plist에도, UI 응답에도, 로그 줄에도 안 들어가. 어디에도. 키는 가장자리에서 환경 변수로 읽혀서 쓰이고, 엔진 자체 상태로 저장되거나 에러에 되울려지지 않아. 전체 모양은 비밀성의 그라디언트야. 키는 어디에도 절대, 사적 텍스트는 지문으로만, 일부러 저작한 내용만 통째로 저장.

Code

지문이면 디버그엔 충분해, 말까진 필요 없고·python
import hashlib, logging
log = logging.getLogger("bellows")

def log_request(text: str, settings: Settings) -> None:
    # Ordinary text is PRIVATE. Log a fingerprint, never the words.
    log.info(
        "synth request text=sha256:%s len=%d model=%s lang=%s",
        hashlib.sha256(text.encode()).hexdigest()[:12],
        len(text),
        settings.model,
        settings.language,
    )
    # NEVER written to source, SQLite, plist, UI response, or logs:
    #   - provider API keys (read from env at the edge, used, never persisted)
    #   - full private text
    # Studio text is the ONE exception: explicit, authored project data.

External links

Exercise

네가 지은 뭔가의 로그를 열어서 공격자처럼 읽어봐. 사적 내용이나 비밀을 로깅하는 줄 하나 찾아. 전체 요청 본문, 토큰, 이메일, 뭔가 드러내는 파일명. 여전히 디버그되게 해주는 지문(해시 더하기 길이 더하기 안전한 필드 몇 개)으로 다시 쓰고, 일부러 통째로 저장할 데이터 한 종류랑 이유를 대봐.
Hint
필드마다 물어. '값이 필요한가, 아니면 두 값을 구분하고 변화만 알아채면 되나?' 뒤쪽이면 해시가 그 일을 하고 샐 수도 없어. 일부러 저작한 내용만 통째 저장을 얻는 거야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.