3

AES 256を使用してデータを暗号化/復号化する次のPythonスクリプトがあります。コードに暗号化を弱める可能性のあるものがあるかどうか、またはCBCを使用したAES256暗号化について考慮していないものがあるかどうかを教えてくださいモード?スクリプトをテストしましたが、正常に動作します。データの暗号化と復号化を行っていますが、セカンドオピニオンが必要でした。ありがとう。

    from Crypto.Cipher import AES
    from Crypto import Random

    BLOCK_SIZE = 32

    INTERRUPT = u'\u0001'

    PAD = u'\u0000'

    def AddPadding(data, interrupt, pad, block_size):
        new_data = ''.join([data, interrupt])
        new_data_len = len(new_data)
        remaining_len = block_size - new_data_len
        to_pad_len = remaining_len % block_size
        pad_string = pad * to_pad_len
        return ''.join([new_data, pad_string])

    def StripPadding(data, interrupt, pad):
        return data.rstrip(pad).rstrip(interrupt)

    SECRET_KEY = Random.new().read(32)

    IV = Random.new().read(16)

    cipher_for_encryption = AES.new(SECRET_KEY, AES.MODE_CBC, IV)
    cipher_for_decryption = AES.new(SECRET_KEY, AES.MODE_CBC, IV)

    def EncryptWithAES(encrypt_cipher, plaintext_data):
        plaintext_padded = AddPadding(plaintext_data, INTERRUPT, PAD, BLOCK_SIZE)
        encrypted = encrypt_cipher.encrypt(plaintext_padded)
        return encrypted

    def DecryptWithAES(decrypt_cipher, encrypted_data):
        decoded_encrypted_data = encrypted_data
        decrypted_data = decrypt_cipher.decrypt(decoded_encrypted_data)
        return StripPadding(decrypted_data, INTERRUPT, PAD)

    our_data_to_encrypt = u'abc11100000'
    encrypted_data = EncryptWithAES(cipher_for_encryption, our_data_to_encrypt)
    print ('Encrypted string:', encrypted_data)

    decrypted_data = DecryptWithAES(cipher_for_decryption, encrypted_data)
    print ('Decrypted string:', decrypted_data)
4

1 に答える 1

2

インターネットに投稿されたコードを見たことがあります。原則として、それほど多くの問題はありませんが、独自のパディングを考案する必要はありません。さらに、最初のパディング文字がINTERRUPTと呼ばれる理由がわかりません。INTERRUPTとPADは1バイトとして処理されると思います(私はPythonの専門家ではありません)。

最も一般的なパディングはPKCS#5パディングです。これは、パディングバイト数の値を持つNバイトで構成されます。ここで使用されるパディングは、「ISO」パディングに似ています。これは、データや他のパディングビットと区別するために1に設定された単一のビットで構成され、残りはゼロです。これは、コード内のコードポイント\u0080になります。

したがって、暗号化(データの機密性を提供できる)は正しく使用されているようです。MACまたはHMACを使用するなどして、整合性保護や認証も必要かどうかは、ユースケースによって異なります。もちろん、法的保証や提供されるものはありません。

于 2011-12-01T22:01:26.743 に答える