불충분한 암호화 키 길이

불충분한 암호화 키 길이

설명

불충분한 암호화 키 길이는 사용된 암호화 알고리즘의 키 길이가 충분히 크지 않아 공격자가 암호를 해독하거나 서명을 위조할 가능성이 커질 때 발생합니다. 이는 민감한 데이터의 기밀성과 무결성을 손상시킬 수 있습니다.

잠재적 영향

  • 데이터 유출: 공격자가 암호화된 데이터를 해독하여 민감한 정보에 접근할 수 있습니다.
  • 데이터 변조: 무결성이 손상되어 데이터가 변조될 수 있습니다.
  • 인증 우회: 암호화된 인증 정보가 해독되어 인증 메커니즘이 우회될 수 있습니다.

해결 방법

  • 강력한 암호화 키 사용: 최신의 강력한 암호화 알고리즘(AES-256, RSA-2048 이상 등)을 사용합니다.
  • 적절한 키 길이 사용: 권장되는 최소 키 길이를 준수합니다.
    • AES는 최소 128 비트
    • RSA는 최소 2048 비트
    • ECC는 최소 224 비트 이상을 사용하고, 신규 시스템에서는 128비트 보안 강도에 해당하는 P-256 이상을 우선 사용합니다.

예시

RSA key generation

변경 전

python
# Noncompliant RSA key generation with pycryptodome
from Crypto.PublicKey import RSA

key = RSA.generate(1024)  # 충분하지 않은 키 길이

변경 후

python
# Compliant RSA key generation with pycryptodome
from Crypto.PublicKey import RSA

key = RSA.generate(3072) # 최소 2048 비트 적용

설명

  • 변경 전: RSA에 1024비트 키는 현재 권장되지 않으며, 충분히 강력하지 않습니다.
  • 변경 후: RSA에는 최소 2048 비트 키를 사용하여 암호화 강도를 충분히 높이도록 합니다.

DSA key generation

다음은 기존 DSA 코드의 키 길이를 비교하는 예시입니다. FIPS 186-5는 DSA를 새로운 서명 생성에 허용하지 않고 기존 서명 검증에만 허용하므로, 신규 서명 시스템의 권장 구성으로 사용하지 마세요.

변경 전

python
# Noncompliant DSA key generation with pycryptodome
from Crypto.PublicKey import DSA

key = DSA.generate(1024)  # 충분하지 않은 키 길이

변경 후

python
# DSA key-size comparison with pycryptodome
from Crypto.PublicKey import DSA

key = DSA.generate(3072) # 최소 2048 비트 적용

설명

  • 변경 전: DSA에 1024비트 키는 충분히 강력하지 않습니다.
  • 키 길이 비교: 3072비트 키는 1024비트보다 강하지만, DSA를 신규 서명 생성에 권장하는 것은 아닙니다.

ECC key generation

변경 전

python
# Noncompliant ECC key generation with pycryptodome
from Crypto.PublicKey import ECC

key = ECC.generate(curve="secp192r1") # 충분하지 않은 키 길이

변경 후

python
# Compliant ECC key generation with pycryptodome
from Crypto.PublicKey import ECC

key = ECC.generate(curve="P-256") # 128비트 보안 강도에 해당하는 NIST P-256 사용

설명

  • 변경 전: 192비트 곡선인 secp192r1은 현재 권장되는 보안 강도에 충분하지 않습니다.
  • 변경 후: P-256처럼 128비트 보안 강도에 해당하는 ECC 곡선을 사용합니다. Ed25519는 서명 알고리즘용 곡선이므로 일반적인 암호화 키 길이 예시로 사용하지 않습니다.

참조