부적절한 암호 키 길이 사용

필요한 보안 강도에 맞는 암호 키 길이 선택

설명

암호 키가 필요한 보안 강도에 비해 짧으면 무차별 대입이나 알고리즘별 공격에 대한 여유가 줄어듭니다. RSA의 정수 인수분해, EC의 이산 로그 문제와 대칭키 탐색은 서로 다른 기준을 사용하므로 키의 비트 수만 직접 비교하면 안 됩니다. 실제 공격 비용은 알고리즘, 키 길이, 구현 및 보호 기간에 따라 달라집니다.

잠재적 영향

  • 키가 복구되면 암호화 데이터의 기밀성이나 서명의 신뢰성이 훼손될 수 있습니다.
  • 장기간 보호해야 하는 데이터는 시간이 지나 계산 능력이 증가하면서 위험이 커질 수 있습니다.
  • 조직이나 적용 표준이 요구하는 최소 보안 강도를 충족하지 못할 수 있습니다.

해결 방법

  • 알고리즘과 보호 기간에 맞는 보안 강도를 선택하세요. 일반적인 기준으로 RSA는 최소 2048비트, 장기 보호에는 3072비트 이상을 검토하고, EC는 secp256r1 같은 검토된 곡선을 사용하세요.
  • AES는 128·192·256비트 키를 지원합니다. 필요한 보안 강도에 따라 선택하세요. 64비트 AES 키는 약한 유효 키가 아니라 지원되지 않는 설정입니다.
  • KeyPairGenerator나 KeyGenerator에 검토된 길이·곡선과 보안 난수 생성기를 명시하세요. 설정에서 읽는 값에도 최소 기준을 적용하세요.
  • 기존 키를 교체할 때 암호문, 인증서, 서명 검증과의 호환성을 계획하세요. 충분한 키 길이는 안전한 암호 모드, 키 보관 및 접근 제어를 대체하지 않습니다.

예시

변경 전

java
import java.security.KeyPairGenerator;

public class WeakKeyExample {
    public static void main(String[] args) throws Exception {
        // RSA 1024비트 - 취약
        KeyPairGenerator rsa = KeyPairGenerator.getInstance("RSA");
        rsa.initialize(1024); // BAD: 권장 최소 2048 미만
        rsa.generateKeyPair();

    }
}

변경 후

java
import javax.crypto.KeyGenerator;
import java.security.KeyPairGenerator;
import java.security.SecureRandom;
import java.security.spec.ECGenParameterSpec;

public class StrongKeyExample {
    public static void main(String[] args) throws Exception {
        SecureRandom rnd = SecureRandom.getInstanceStrong();

        // RSA 3072비트 - 권장안 충족(최소 2048 이상)
        KeyPairGenerator rsa = KeyPairGenerator.getInstance("RSA");
        rsa.initialize(3072, rnd);
        rsa.generateKeyPair();

        // EC 256비트 커브 명시 - 안전 커브 사용
        KeyPairGenerator ec = KeyPairGenerator.getInstance("EC");
        ec.initialize(new ECGenParameterSpec("secp256r1"), rnd);
        ec.generateKeyPair();

        // AES 256비트 - 충분한 키 길이
        KeyGenerator aes = KeyGenerator.getInstance("AES");
        aes.init(256, rnd);
        aes.generateKey();
    }
}

변경 전에는 RSA 1024비트 키를 생성합니다. 변경 후에는 RSA 3072비트, EC secp256r1, AES 256비트를 명시합니다. 실제 선택은 시스템의 보안 강도와 호환성 요구에 맞춰 검토하세요.

참조