C.W.K.
Stream
Lesson 04 of 05 · published

At-Rest 암호화 — auth 로 부족할 때

~15 min · encryption-at-rest, fernet, filevault

Level 0Greenhorn
0 XP0/53 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

Auth 가 누가 물어볼 수 있는지 컨트롤. 암호화는 auth 지나친 사람한테 (도난 디스크, 침해 host, rogue 클라우드 admin, 권한 잘못된 backup) 뭐가 읽을 수 있는지 컨트롤.

세 tier

Tier방어하는 것노력
Disk-level (FileVault, LUKS)전원 꺼진 디바이스의 물리적 도난한 번, 무료, 대부분 모던 OS 기본 ON
Database-level (SQLCipher, Postgres TDE)파일 접근 있는데 앱 접근 없는 적라이브러리 swap; ~1일
Field-level (민감 컬럼 암호화)Rogue DBA, leak 된 backup, 앱 레벨 XSS-extracted dump가장 많은 작업; key 관리가 새 문제

Key 관리 현실

암호화는 보안 문제를 "데이터" 에서 "키" 로 밀어. 새 질문:

  • Key 가 어디 살아? (OS keychain, KMS, HSM, env var)
  • Deploy / 재시작 동안 뭐 일어나? (서비스가 시작 시 fetch 해야)
  • Key 잃으면 뭐 일어나? (데이터 사라짐 — 영원히; key 별도 백업)
  • 회전 어떻게? (새 키로 모든 데이터 재암호화; 스케일 시 trivial X)

Field 레벨 암호화 가치 있는 거

전부 X. Index/foreign key 암호화는 쿼리 패턴 깸. 실용적 리스트: 사용자 대신 저장하는 API 키 / 토큰; 개인 노트 / 일기 항목; 건강 / 재무 데이터; session 토큰 (one-way hash 가 보통 OK); 컴플라이언스 regime (HIPAA, GDPR special category) 에 cover 되는 거.

Code

cryptography.Fernet 으로 field 레벨 암호화·python
from cryptography.fernet import Fernet

# Keychain 에서 키, repo 에 절대 X
fernet = Fernet(get_keychain("APP_DATA_KEY"))

def encrypt_field(value: str) -> bytes:
    return fernet.encrypt(value.encode())

def decrypt_field(blob: bytes) -> str:
    return fernet.decrypt(blob).decode()

# DB 가 blob 저장; 앱이 write 시 암호화, read 시 복호화.
# Leak 된 backup 은 APP_DATA_KEY 없이 unreadable.

External links

Exercise

개발에 쓰는 모든 맥에서 FileVault ON 확인 (System Settings → Privacy & Security → FileVault). 꺼져 있으면 오늘 저녁에 켜. 그 단일 설정이 '전원 꺼진 도난 노트북' 위협을 모델에서 통째 제거. 공짜 win.

Progress

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

댓글 0

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

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