TIL

Fernet 정리

하얀잔디 2025. 12. 29. 18:53

 

  • 대칭키 암호화 방식
  • 같은 key 하나로 암호화/복호화 다 함
  • 내부적으로
    • AES-128 (CBC)
    • HMAC-SHA256
      씀 → 무결성 + 보안 둘 다 챙김

 

🔑 Fernet Key

  • URL-safe base64 인코딩된 32바이트 키
  • 보통 이렇게 생김
     
    b'ZpLJmZ9bZr7...'
  • 절대 노출하면 안 됨
    → 노출되면 복호화 다 가능해짐

 

암호화 (encrypt)

  • 평문(bytes) → 암호문(token)
  • 암호문 안에 포함된 것들:
    • 타임스탬프
    • 랜덤 IV
    • HMAC 서명
  • 같은 값 암호화해도 결과 매번 다름

 

복호화 (decrypt)

  • token + key 있으면 원문 그대로 복원
  • key 틀리면 예외 터짐
 
plain = f.decrypt(token)

 

 

만료 기능 있음

  • ttl 옵션 주면
    특정 시간 지나면 복호화 불가
 
f.decrypt(token, ttl=60) # 60초 지나면 실패

 

 

장점

  • 구현 쉬움
  • 인증된 암호화 (AEAD 비슷한 개념)
  • 실수할 여지 적음

주의

  • 키 관리가 전부
  • DB에 key랑 암호문 같이 저장 ❌
  • 장기 저장엔 key rotation 고민해야 함

 

 한 줄 요약

Fernet = 안전한 대칭키 암호화 + 무결성 + 만료까지 지원하는 실전용 암호화 방식임