説明
暗号鍵が短すぎると、攻撃者がデータを復号したり署名を偽造したりしやすくなります。機密情報の機密性や完全性が損なわれるおそれがあります。
想定される影響
- 情報漏えい: 暗号化された機密情報を復号される可能性があります。
- データ改ざん: 完全性の保護が弱まり、データが変更されるおそれがあります。
- 認証の回避: 保護された認証情報が復号され、認証を回避される可能性があります。
対処方法
- AES-256や2048ビット以上のRSAなど、強力なアルゴリズムと適切な鍵長を使用してください。
- 推奨される最小鍵長を守ってください。
- AESは128ビット以上。
- RSAは2048ビット以上。
- ECCは224ビット以上。新規システムでは、128ビット以上のセキュリティ強度を持つP-256以上の曲線を優先してください。
例
RSA鍵の生成
変更前
python
# PyCryptodomeによる短すぎるRSA鍵の生成
from Crypto.PublicKey import RSA
key = RSA.generate(1024) # 不十分な鍵長
変更後
python
# PyCryptodomeによるRSA鍵長の改善
from Crypto.PublicKey import RSA
key = RSA.generate(3072) # 2048ビット以上を使用
説明
- 変更前: 1024ビットのRSA鍵は、現在推奨される強度を満たしません。
- 変更後: RSAでは2048ビット以上を使用してください。この例では3072ビットを指定しています。
DSA鍵の生成
以下は、既存のDSAコードで鍵長を比較する例です。FIPS 186-5では、DSAは既存の署名の検証にのみ使用でき、新しい署名の生成には使用できません。新規の署名システムに推奨する構成として使用しないでください。
変更前
python
# PyCryptodomeによる短すぎるDSA鍵の生成
from Crypto.PublicKey import DSA
key = DSA.generate(1024) # 不十分な鍵長
変更後
python
# PyCryptodomeによるDSA鍵長の比較
from Crypto.PublicKey import DSA
key = DSA.generate(3072) # 2048ビット以上を使用
説明
- 変更前: 1024ビットのDSA鍵では十分な強度がありません。
- 鍵長の比較: 3072ビットの鍵は1024ビットより強力ですが、DSAによる新しい署名の生成を推奨するものではありません。
ECC鍵の生成
変更前
python
# PyCryptodomeによる強度が不足したECC鍵の生成
from Crypto.PublicKey import ECC
key = ECC.generate(curve="secp192r1") # 不十分な鍵長
変更後
python
# PyCryptodomeによるECC鍵の改善
from Crypto.PublicKey import ECC
key = ECC.generate(curve="P-256") # 128ビットのセキュリティ強度を持つNIST P-256を使用
説明
- 変更前: 192ビットの曲線
secp192r1は、現在推奨されるセキュリティ強度を満たしません。 - 変更後: 128ビットのセキュリティ強度を持つ
P-256などの曲線を使用してください。Ed25519は署名用の曲線であり、一般的な暗号化の鍵長を示す例には適しません。