Base64와 보안: 흔한 오해와 진실
Base64는 암호화가 아닙니다. 보안 관점에서 Base64의 올바른 사용법을 알아봅니다.
6분 읽기
Base64는 암호화가 아닙니다
많은 개발자들이 Base64를 암호화로 오해합니다. 하지만 Base64는 단순히 인코딩 방식일 뿐, 어떠한 보안도 제공하지 않습니다.
흔한 실수들
1. 비밀번호를 Base64로 저장
// ❌ 절대 하지 마세요 const password = btoa('myPassword123'); saveToDatabase(password); // ✅ 대신 해시 함수를 사용하세요 const hashedPassword = await bcrypt.hash('myPassword123', 10); saveToDatabase(hashedPassword);
2. API 키를 Base64로 "숨기기"
// ❌ 클라이언트 코드에서 API 키를 Base64로 인코딩해도 의미 없음 const apiKey = atob('c2VjcmV0S2V5MTIz'); // ✅ 환경 변수나 서버사이드에서 관리 const apiKey = process.env.API_KEY;
Base64를 사용해야 할 때
- 데이터 전송: 바이너리 데이터를 텍스트 기반 프로토콜로 전송할 때
- Data URI: 이미지를 HTML/CSS에 임베드할 때
- JWT 토큰: 페이로드 인코딩 (암호화는 별도로 적용)
Base64를 사용하면 안 될 때
- 민감한 데이터 보호
- 비밀번호 저장
- API 키 숨기기
- 데이터 암호화
실제 암호화가 필요할 때
// Web Crypto API 사용 async function encrypt(data, key) { const encoder = new TextEncoder(); const encodedData = encoder.encode(data); const encrypted = await crypto.subtle.encrypt( { name: 'AES-GCM', iv: crypto.getRandomValues(new Uint8Array(12)) }, key, encodedData ); return encrypted; }