부적절한 암호 키 길이 사용
Insufficient Cryptographic Key Size
설명
부적절한 암호 키 길이는 RSA/DSA/DH, EC(ECC), AES 등에서 권장 최소 길이보다 작은 키를 사용하는 상황을 말합니다. 키가 짧으면 공격자는 brute force(무차별 대입)나 수학적 공격(예: RSA 소인수분해, ECC 이산로그)을 통해 현실적인 시간 안에 비밀키를 복구할 수 있습니다. 개발자가 작은 숫자로 초기화하거나, 약한 EC 커브(secp112r1 등)를 선택할 때 발생합니다. 공격자는 캡처한 암호문을 오프라인으로 반복 시도하여 복호화하거나, 약한 서명 키를 크랙해 서명을 위조하고 세션 하이재킹·인증 우회를 할 수 있습니다.
잠재적 영향
데이터 기밀성 손상: 약한 키로 암호화된 데이터가 복호화되어 개인정보, 비밀문서, 토큰 등이 유출될 수 있습니다.
무결성 및 인증 위조: 공격자가 서명/키 교환에 쓰인 약한 키를 크랙해 서명을 위조하거나 중간자 공격으로 세션을 탈취할 수 있습니다.
장기 트래픽 복호화: 녹화된 과거 트래픽을 시간이 지난 뒤에라도 복호화하여 비밀을 노출시킬 수 있습니다.
규정 준수 위반: PCI DSS, ISMS 등에서 요구하는 최소 키 길이를 충족하지 못해 감사·심사에 실패할 수 있습니다.
해결 방법
권장 최소 키 길이 이상 사용: RSA/DSA/DH ≥ 2048(가능하면 3072/4096), EC ≥ 256(secp256r1 등), AES ≥ 128(가능하면 192/256).
약한 커브/파라미터 금지: secp112r1 등 취약 커브 사용 금지, 표준 안전 커브로 명시적으로 설정.
하드코딩된 작은 키 제거: 소스에 박힌 작은 키 길이 숫자를 설정값(환경변수/프로퍼티)으로 승격하고 정책으로 최소값을 강제.
최신 권고 주기 점검: NIST SP 800-131A, OWASP Cheat Sheet 등 최신 가이드를 따라 주기적으로 검토.
키 수명 관리: 충분한 키 길이를 사용하더라도 주기적 키 순환과 폐기를 통해 위험을 줄임.
취약한 코드 및 안전한 코드 예시
취약한 코드
안전한 코드
설명:
취약한 코드: RSA 1024비트와 AES 64비트는 현대 연산 성능 기준으로 안전하지 않습니다. 공격자는 brute force나 수학적 기법을 통해 비교적 짧은 시간에 키를 복구할 수 있어 암호문 복호화, 서명 위조가 가능합니다.
안전한 코드: RSA 3072비트, EC secp256r1(256비트), AES 256비트를 사용해 최신 권고를 충족합니다. 충분한 키 길이와 안전한 커브를 명시하고 SecureRandom을 사용해 키 생성 품질을 확보하여 키 크기 부족으로 인한 크랙 가능성을 크게 줄입니다.
참조
Last updated