설명
암호화 알고리즘에 맞는 모드와 패딩 방식을 선택해야 합니다. 안전하지 않은 모드나 패딩 스키마를 사용할 경우, 암호화된 데이터가 공격에 취약해질 수 있습니다. 예를 들어, 전자 코드북 모드(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)
설명:
- 변경 전: RSAES-PKCS1-v1_5 복호화에서 패딩 오류를 구별할 수 있으면 Bleichenbacher 패딩 오라클 공격에 악용될 수 있습니다.
- 변경 후: PKCS#1 OAEP(RSA)를 대신 사용하여 암호화 강도를 높이도록 합니다.