説明
暗号化アルゴリズムに適したモードとパディング方式を選択してください。不適切な設定は、暗号化データへの攻撃を許すおそれがあります。たとえば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)
説明:
- 変更前: RSAES-PKCS1-v1_5の復号時にパディングエラーを識別できると、Bleichenbacherのパディングオラクル攻撃に悪用されるおそれがあります。
- 変更後: 代わりにRSAのPKCS#1 OAEPを使用してください。