- 대칭키 암호화 방식임
- 같은 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 = 안전한 대칭키 암호화 + 무결성 + 만료까지 지원하는 실전용 암호화 방식임
'TIL' 카테고리의 다른 글
| K3s Flannel, CNI 정리 (0) | 2026.01.03 |
|---|---|
| Redis on-off가 1~2분 주기로 반복될 때 (0) | 2026.01.01 |
| 마이그레이션 제대로 한 후기 (0) | 2025.12.18 |
| Redis String vs Set (0) | 2025.12.18 |
| Docker stats로 보는 CPU 사용률 + Node.js 싱글스레드 병목 판단법 (0) | 2025.12.08 |