안녕하세요! 👋 지난번 A01: 깨진 접근 통제에 이어, 오늘은 OWASP Top 10 2021의 2위로 급부상한 A02: 암호화 실패(Cryptographic Failures)에 대해 이야기해보려고 합니다.
예전에는 '민감 정보 노출(Sensitive Data Exposure)'로 불렸던 이 항목은, 단순히 데이터를 암호화하지 않는 것뿐만 아니라 '잘못된' 암호화의 위험성을 강조하며 2위까지 올라왔습니다. 내 소중한 정보가 인터넷 세상에 그대로 노출될 수도 있는 무서운 취약점, 지금부터 함께 알아보시죠! 😱

🤔 암호화 실패? 그게 정확히 뭔가요?
"비밀일기는 꼭 자물쇠 달린 상자에 보관해야 해!" 📦
어릴 때 이런 생각 한 번쯤 해보셨죠? 암호화(Cryptography)는 바로 이 '자물쇠' 역할을 합니다. 중요한 데이터를 아무나 알아볼 수 없는 비밀 코드(암호문)로 바꿔서 보호하는 기술이죠.
암호화 실패는 이 자물쇠가 부실하거나, 열쇠를 아무 데나 두거나, 심지어 자물쇠를 아예 사용하지 않는 모든 경우를 말합니다. 데이터는 크게 두 가지 상태로 존재하는데, 이 두 상태 모두에서 자물쇠는 필수입니다.
- 전송 중인 데이터 (Data in Transit) ✈️:
- 여러분의 컴퓨터에서 서버로 데이터가 날아가는 중 (로그인, 회원가입, 게시글 작성 등)
- 이때 암호화가 없으면 중간에서 누군가 데이터를 가로채서 엿볼 수 있습니다. (중간자 공격)
- 저장된 데이터 (Data at Rest) 💾:
- 서버의 데이터베이스나 파일 시스템에 데이터가 저장되어 있는 상태
- 만약 해커가 서버를 통째로 해킹하면, 암호화되지 않은 데이터는 그대로 털리게 됩니다.
🚨 암호화 실패의 흔한 사례들
어떤 경우에 암호화가 '실패'했다고 말할 수 있을까요? 개발자가 흔히 저지르는 실수들을 통해 살펴보겠습니다.
1. 평문 통신 (HTTP 사용)
가장 기본적이지만 여전히 많이 발견되는 실수입니다.
- 문제점: HTTP는 데이터를 암호화하지 않은 평문(Plain Text)으로 전송합니다. 마치 투명한 봉투에 편지를 넣어 보내는 것과 같아서, 네트워크를 감시하는 누구나 내용을 엿볼 수 있습니다. 👂
- 해결책: 반드시 HTTPS를 사용해야 합니다. HTTPS는 TLS/SSL이라는 프로토콜을 이용해 모든 통신 내용을 암호화하여 안전하게 보호합니다. 주소창에 자물쇠 🔒 아이콘이 있는지 항상 확인하세요!
2. 비밀번호를 평문으로 저장
절대로 해서는 안 되는 최악의 실수입니다!
- 문제점: 데이터베이스에 password123과 같이 비밀번호를 그대로 저장하는 경우, DB가 유출되면 모든 사용자의 계정이 즉시 탈취됩니다.
- 해결책: 비밀번호는 반드시 해시(Hash)하여 저장해야 합니다. 해시는 암호화와 달리 원래 값으로 되돌릴 수 없는 단방향 함수입니다.
- 업그레이드: 더 안전하게는 솔트(Salt)를 추가한 해싱을 사용해야 합니다. 솔트(🧂)는 비밀번호에 추가하는 임의의 문자열로, 같은 비밀번호를 사용하더라도 DB에 저장되는 해시 값이 달라지게 만들어 레인보우 테이블 같은 공격을 무력화합니다.
- password123 + Salt(랜덤값) -> Hash_Value(완전히 다른 값)
3. 약하거나 오래된 암호 알고리즘 사용
모든 자물쇠가 튼튼하지는 않아요! 낡고 약한 자물쇠는 금방 부서집니다.
- 문제점: MD5, SHA-1 같은 오래된 해시 알고리즘이나 DES, RC4 같은 암호화 알고리즘은 이미 취약점이 발견되어 쉽게 깨질 수 있습니다. ☠️
- 해결책: 검증된 최신 표준 알고리즘을 사용해야 합니다.
- 해싱: SHA-256 이상, Bcrypt, Scrypt, Argon2
- 암호화: AES (Advanced Encryption Standard)
4. 부실한 암호 키 관리
금고는 튼튼한데, 열쇠를 금고 위에 올려두는 것과 같습니다.
- 문제점: 암호화에 사용된 키(Key)를 소스 코드에 그대로 적어두거나(하드코딩), 설정 파일에 평문으로 저장하는 경우입니다. 소스 코드가 유출되면 암호화는 무용지물이 됩니다. 🔑
- 해결책: 암호 키는 별도의 안전한 저장소(Key Vault, KMS 등)에 보관하고, 접근 권한을 엄격하게 관리해야 합니다. 또한, 주기적으로 키를 교체(Key Rotation)하는 것이 안전합니다.
🛡️ 어떻게 막을 수 있을까요? (방어 방법)
- 데이터 분류 및 식별 📂: 먼저 우리 서비스에서 어떤 데이터가 민감한지(개인정보, 금융정보 등) 식별하고, 보호가 필요한 데이터의 우선순위를 정합니다.
- 전송 구간 암호화는 기본! 🌐: 모든 통신은 HTTPS를 사용하고, 최신 버전의 TLS 설정을 적용하여 중간자 공격을 방어합니다.
- 저장 데이터 암호화 💾: 데이터베이스에 저장되는 모든 민감 정보는 강력한 암호화 알고리즘(AES 등)을 사용해 암호화합니다.
- 강력한 비밀번호 해싱 🧂: 비밀번호는 반드시 Bcrypt, Scrypt, Argon2와 같은 최신 알고리즘을 사용해 솔트를 추가하여 해시화합니다.
- 안전한 키 관리 🗝️: 암호화 키를 코드나 설정 파일에 두지 말고, 전용 키 관리 시스템을 사용하세요.
- 바퀴를 재발명하지 마세요 🤓: 절대 직접 암호화 알고리즘을 만들려고 하지 마세요. 수많은 전문가에 의해 검증되고 널리 사용되는 표준 라이브러리를 사용하는 것이 가장 안전하고 현명한 방법입니다.
✨ 마치며
암호화는 보안의 기본 중의 기본이지만, '어떻게' 적용하느냐에 따라 그 효과는 천차만별입니다. "일단 암호화했으니 괜찮아"라는 생각은 매우 위험합니다.
오늘부터 내가 다루는 데이터가 안전한 자물쇠로 잘 잠겨 있는지, 그리고 그 열쇠는 나만 아는 곳에 잘 보관되어 있는지 다시 한번 점검해보는 것은 어떨까요? 데이터 보안의 첫걸음은 올바른 암호화에서 시작됩니다!
'일반IT > IT보안' 카테고리의 다른 글
| 🏗️ 잘못된 첫 단추, 모든 것을 무너뜨린다! OWASP 4위, 안전하지 않은 설계 (0) | 2025.09.29 |
|---|---|
| 💉 당신의 애플리케이션을 감염시키는 치명적인 공격, 인젝션(Injection) 파헤치기 (0) | 2025.09.29 |
| 👑 OWASP 1위! 깨진 접근 통제 (Broken Access Control) 파헤치기 (0) | 2025.09.29 |
| 🔗 n8n으로 SecOps 자동화, 복잡한 워크플로를 코딩 없이! 🚀 (1) | 2025.09.20 |
| 🚨 끝없는 경보와의 사투: SecOps의 3대 핵심 과제와 해결책 (0) | 2025.09.20 |