취약하거나 위험한 암호화 알고리즘 사용

Use of a Broken or Risky Cryptographic Algorithm

설명

오래되었거나 설계상 취약한 알고리즘(DES/3DES, RC2/RC4, IDEA 등)이나 안전하지 않은 모드(ECB), 약한 해시/서명(MD5, SHA-1, SHA1withRSA, MD5withRSA)을 사용하면 기밀성·무결성이 깨질 수 있습니다. ECB는 블록 패턴이 그대로 노출되어 평문 구조가 드러나며, DES/3DES는 작은 블록/키로 인해 충돌·브루트포스·Sweet32 같은 알려진 공격에 취약합니다. MD5·SHA-1은 충돌이 실용적으로 가능해 서명 위조나 무결성 우회가 가능합니다. 공격자는 패턴 분석으로 평문을 추론하거나, 약한 해시에 대해 충돌 입력을 만들어 서명을 우회하고, 빠른 해시로 저장된 비밀번호를 레인보우 테이블/브루트포스로 탈취할 수 있습니다.

잠재적 영향

  • 데이터 노출: ECB 패턴 노출, 약한 블록/키로 인한 복호화·키 추측로 평문이 유출될 수 있음

  • 무결성·서명 위조: MD5/SHA-1 충돌을 이용해 파일·토큰·업데이트 서명을 위조 가능

  • 계정 탈취: 비밀번호를 MD5/SHA-1 등 일반 해시로 저장 시 레인보우 테이블·GPU 브루트포스로 탈취 위험

  • 규정 준수 위반: NIST/PCI DSS 등 최신 기준 미준수로 컴플라이언스 및 감사 실패

해결 방법

  • 강한 알고리즘 사용: 대칭키는 AES-128 이상, 가능하면 AEAD(AES/GCM/NoPadding) 사용. 서명은 SHA256withRSA(2048비트 이상) 또는 ECDSA(P-256 이상)

  • 모드 선택: ECB 금지. 인증된 모드(GCM/CCM) 또는 최소한 CBC+HMAC 등 무결성 보호 병행

  • 해시/서명 교체: MD5, SHA-1, SHA1withRSA, MD5withRSA 금지. SHA-256 이상 사용

  • 비밀번호 저장: 일반 해시 금지. PBKDF2/bcrypt/scrypt/Argon2 등 KDF와 충분한 반복·솔트 적용

  • 난수 품질: IV/Nonce/Salt는 SecureRandom(가능하면 getInstanceStrong)으로 생성, IV/Nonce 재사용 금지

  • 키 관리: 최소 키 길이, 키 교체 주기, 안전한 키 보관(KMS/HSM) 적용

  • 정책/구성: 약한 알고리즘 사용을 코드와 설정에서 차단(알고리즘 허용 목록), 라이브러리/프로바이더 최신화

취약한 코드 및 안전한 코드 예시

취약한 코드

안전한 코드

설명:

  • 취약한 코드:

    • AES/ECB는 동일한 블록이 동일한 암호문을 만들어 패턴이 노출되어 평문 구조를 추정할 수 있습니다.

    • MD5는 충돌 공격이 실용적이며 매우 빠르게 계산되어 비밀번호 추측·레인보우 테이블 공격에 취약합니다.

    • SHA1withRSA는 충돌 가능성으로 서명 위조 위험이 있어 더 이상 권장되지 않습니다.

  • 안전한 코드:

    • AES/GCM은 무결성 검증을 포함한 AEAD 모드로, 랜덤 Nonce와 128비트 태그를 사용해 재전송·위변조를 방지하고 패턴 노출을 차단합니다.

    • PBKDF2WithHmacSHA256은 솔트와 높은 반복 횟수로 해시 계산을 느리게 하여 비밀번호 크래킹 난이도를 크게 높입니다.

    • SHA256withRSA는 충돌 내성이 강한 해시를 사용해 서명 위조 가능성을 낮춥니다.

참조

Last updated