하드코딩된 암호화 IV

Use of Hardcoded Cryptographic Initialization Value

설명

CBC 암호화에서 고정된 IV(Initialization Vector)를 같은 키와 함께 재사용하면 평문 앞부분의 반복 패턴이 드러날 수 있습니다. CBC에는 매 암호화마다 새롭고 예측할 수 없는 IV가 필요합니다. 다른 암호화 모드는 각 모드의 nonce·IV 요구사항을 따라야 합니다.

잠재적 영향

  • 데이터 유출: 반복되는 평문 패턴을 통해 민감한 정보가 추론될 수 있습니다.
  • 데이터 변조: CBC만으로는 무결성을 보장하지 않습니다. 인증된 암호화나 별도의 인증 보호가 필요합니다.
  • 패턴 분석: 동일한 IV가 반복적으로 사용되어 패턴 분석이 가능해집니다.

해결 방법

  • 무작위 IV 생성: CBC 암호화마다 새롭고 예측할 수 없는 IV를 사용합니다.
  • 보안 라이브러리 사용: 검증된 보안 라이브러리를 사용하여 IV를 안전하게 관리합니다.

예시

변경 전

python
# Unsafe AES encryption with hardcoded IV
import os
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad

key = os.environ["ENCRYTION_KEY"].encode()
cipher = AES.new(key, AES.MODE_CBC, b'This is an IV456') # 하드코딩된 IV
plaintext = b'This is a secret message.'
ciphertext = cipher.encrypt(pad(plaintext, AES.block_size))

변경 후

python
# Safe AES encryption with random IV
import os
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
from Crypto.Random import get_random_bytes

key = os.environ["ENCRYTION_KEY"].encode()
iv = get_random_bytes(16)  # 무작위로 생성된 IV
cipher = AES.new(key, AES.MODE_CBC, iv)
plaintext = b'This is a secret message.'
ciphertext = cipher.encrypt(pad(plaintext, AES.block_size))

설명:

  • 변경 전: 하드코딩된 IV를 사용하여 암호화 데이터의 예측 가능성이 높아집니다.
  • 변경 후: 무작위로 생성된 IV를 사용하여 각 암호화 작업마다 다른 IV가 사용되도록 합니다.

참조