暗号鍵の長さが不十分

暗号鍵の長さが不十分

説明

暗号鍵が短すぎると、攻撃者がデータを復号したり署名を偽造したりしやすくなります。機密情報の機密性や完全性が損なわれるおそれがあります。

想定される影響

  • 情報漏えい: 暗号化された機密情報を復号される可能性があります。
  • データ改ざん: 完全性の保護が弱まり、データが変更されるおそれがあります。
  • 認証の回避: 保護された認証情報が復号され、認証を回避される可能性があります。

対処方法

  • 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は署名用の曲線であり、一般的な暗号化の鍵長を示す例には適しません。

参考資料