暗号化に適したモードとパディング

アルゴリズムに適した暗号モードとパディングを使用してください。

説明

暗号化アルゴリズムに適したモードとパディング方式を選択してください。不適切な設定は、暗号化データへの攻撃を許すおそれがあります。たとえばECBモードは、同じ平文ブロックから同じ暗号文ブロックを生成するため、パターンが分かってしまいます。AESにはGCMなどの認証付き暗号を、RSA暗号化にはOAEPなどのパディングを使用してください。GCMにOAEPを組み合わせるという意味ではありません。

想定される影響

  • 情報漏えい: 暗号文のパターンから、平文の情報を推測されるおそれがあります。
  • データ改ざん: 暗号化や認証の設定が不適切だと、改ざんされたデータを受け入れる可能性があります。
  • 保護の低下: 不適切な構成への攻撃によって、機密性が損なわれるおそれがあります。

対処方法

  • AESにはCCMやGCMなどの認証付きモードを使い、認証タグを検証してください。同じ鍵でnonceを再利用しないでください。
  • RSA暗号化にはOAEPを使用してください。OAEPだけでは送信者を認証できないため、必要な署名や認証は別途構成してください。
  • 暗号設定の選択では、現在のセキュリティ指針に従ってください。

例

鍵と暗号オブジェクトの生成に絞った抜粋です。各アルゴリズムに適した安全な鍵を用意してください。GCMでは暗号文、nonce、タグを一緒に扱い、復号時にタグの検証に失敗したデータは拒否してください。

AES ECB / GCM

変更前

python
# ECBモードによるAES暗号化
from Crypto.Cipher import AES

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

変更後

python
# AES-GCMオブジェクトの生成
from Crypto.Cipher import AES

AES.new(key, AES.MODE_GCM) # GCMモードを使用

説明

  • 変更前: AES-ECBは同じ平文ブロックを同じ暗号文ブロックへ変換するため、繰り返しのパターンが分かります。
  • 変更後: AES-GCMオブジェクトを作成します。完全性を保護するには、暗号化時のタグ生成と復号時のタグ検証も必要です。

RSA RSAES-PKCS1-v1_5 / OAEP

変更前

python
# RSAES-PKCS1-v1_5によるRSA暗号化
from Crypto.Cipher import PKCS1_v1_5

PKCS1_v1_5.new(key)

変更後

python
# OAEPによるRSA暗号化
from Crypto.Cipher import PKCS1_OAEP

PKCS1_OAEP.new(key)

説明:

参考資料