취약한 암호화 알고리즘 사용

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