취약한 암호화 알고리즘 사용
Use of a Broken or Risky Cryptographic Algorithm
설명
취약한 알고리즘(DES/3DES, RC2/RC4, Blowfish, MD5, SHA-1 등)이나 취약한 모드(AES-ECB)를 사용하면 공격자가 데이터를 비교적 쉽게 복호화하거나 위·변조할 수 있습니다. 예를 들어 DES/RC4는 현대 하드웨어로 실질적으로 깨질 수 있고, AES-ECB는 패턴이 그대로 노출되어 기밀성이 무너집니다. 또한 MD5·SHA-1은 충돌 공격으로 동일한 해시를 가진 서로 다른 데이터를 만들 수 있어 무결성 검증, 디지털 서명, 파일 체크섬, 토큰 검증 등을 우회할 수 있습니다.
잠재적 영향
데이터 기밀성 훼손: DES/RC4 같은 약한 암호 또는 AES-ECB 사용으로 평문 패턴이 노출되거나 키가 추측되어 민감 정보가 유출될 수 있습니다.
데이터 무결성 손상: MD5/SHA-1의 충돌 공격으로 파일 체크섬, 서명 검증 등의 무결성 보장이 무너질 수 있습니다.
인증/권한 우회: 약한 해시/서명으로 토큰 위조나 메시지 인증 우회가 가능해 계정 탈취 등으로 이어질 수 있습니다.
규제 준수 위반 및 평판 하락: 약한 암호 사용은 컴플라이언스 위반, 사고 대응 비용 증가 등을 초래합니다.
해결 방법
강력한 알고리즘 사용: 대칭키는 AES-GCM 또는 ChaCha20-Poly1305(인증된 암호), 해시는 SHA-256/384/512 또는 SHA-3.
금지 목록: DES/3DES, RC2/RC4, Blowfish, MD5, SHA-1, AES-ECB는 사용하지 않습니다.
안전한 모드/파라미터: AES는 GCM 권장(최소 96비트 무작위 IV). 같은 키로는 IV를 재사용하지 않습니다. 키는 최소 128비트(권장 256비트).
비밀번호 기반 키 파생: PBKDF2/Scrypt/Argon2로 키를 파생하고 충분한 반복/메모리 비용을 설정합니다.
무결성 보장: 가능하면 AEAD(GCM/ChaCha20-Poly1305)를 사용하고, 불가 시 별도의 HMAC-SHA-256 이상으로 인증합니다.
검증된 라이브러리: Web Crypto API(node:crypto webcrypto)나 libsodium 같은 검증된 라이브러리를 사용합니다.
취약한 코드 및 안전한 코드 예시
취약한 코드
안전한 코드
설명:
취약한 코드:
AES-ECB는 동일 블록 입력에 동일 블록 출력이 나와 데이터 패턴이 노출됩니다. 무결성(위·변조 방지)도 제공하지 않습니다.
MD5는 알려진 충돌 공격이 가능해 파일 체크섬, 서명 검증 등에 사용할 경우 위조를 막지 못합니다.
데모처럼 고정·약한 키를 사용할 경우 키 유출·추측 위험이 커집니다.
안전한 코드:
AES-256-GCM은 인증된 암호(AEAD)로, 무작위 IV를 사용해 기밀성과 무결성을 함께 보장하며 태그로 위·변조를 탐지합니다.
SHA-256은 현대적이고 널리 검증된 해시로 충돌 내성이 강해 일반 무결성 체크에 적합합니다.
키는 충분한 길이(32바이트)로 안전하게 생성하며, IV는 매 암호화마다 새로 생성하여 재사용을 방지합니다.
참조
Last updated