암호화 알고리즘 안전한 모드와 패딩 스키마

Encryption Algorithms Should Be Used with Secure Mode and Padding Scheme

설명

암호화 알고리즘에 맞는 모드와 패딩 방식을 선택해야 합니다. 안전하지 않은 모드나 패딩 스키마를 사용할 경우, 암호화된 데이터가 공격에 취약해질 수 있습니다. 예를 들어, 전자 코드북 모드(ECB)는 동일한 평문 블록을 동일한 암호문 블록으로 변환하기 때문에 패턴을 노출시킬 수 있습니다. AES에는 GCM 같은 인증 암호화 모드를, RSA 암호화에는 OAEP 같은 패딩을 사용하세요. GCM에 OAEP를 함께 적용하는 것은 아닙니다.

잠재적 영향

  • 데이터 유출: 공격자가 암호화된 데이터의 패턴을 분석하여 평문을 유추할 수 있습니다.
  • 데이터 변조: 안전하지 않은 모드나 패딩을 사용할 경우, 데이터 변조가 용이해질 수 있습니다.
  • 암호화 우회: 안전하지 않은 설정을 통해 암호화 메커니즘이 우회될 수 있습니다.

해결 방법

  • AES에는 CCM, GCM 같은 인증 암호화 모드를 사용하고 인증 태그를 검증하세요. 같은 키로 nonce를 재사용하지 마세요.
  • RSA 암호화에는 OAEP를 사용하세요. OAEP만으로 발신자를 인증할 수는 없으므로 필요한 서명 또는 인증은 별도로 구성하세요.
  • 최신 보안 지침 준수: 최신 보안 지침을 따라 안전한 암호화 설정을 적용합니다.

예시

키와 암호 객체 생성에 집중한 발췌입니다. 용도에 맞는 안전한 키를 준비하고, GCM은 암호문·nonce·태그를 함께 처리하며 복호화 시 태그 검증에 실패하면 데이터를 거부하세요.

AES ECB / GCM

변경 전

python
# Unsafe AES encryption using ECB mode
from Crypto.Cipher import AES

cipher = AES.new(key, AES.MODE_ECB)

변경 후

python
# Safe AES encryption using GCM
from Crypto.Cipher import AES

AES.new(key, AES.MODE_GCM) # 안전한 GCM 모드 사용

설명

  • 변경 전: AES ECB 모드는 동일한 평문 블록을 동일한 암호문 블록으로 변환하여 패턴을 노출시킵니다.
  • 변경 후: AES GCM 객체를 생성합니다. 실제 무결성 보호를 위해서는 암호화 시 태그를 생성하고 복호화 시 검증해야 합니다.

RSA RSAES-PKCS1-v1_5 / OAEP

변경 전

python
# Unsafe RSA encryption using RSAES-PKCS1-v1_5
from Crypto.Cipher import PKCS1_v1_5

PKCS1_v1_5.new(key)

변경 후

python
# Safe RSA encryption using OAEP
from Crypto.Cipher import PKCS1_OAEP

PKCS1_OAEP.new(key)

설명:

참조