客户端加密Python

时间:2018-04-23 16:22:25

标签: python encryption amazon-s3 cryptography pycrypto

我正在尝试解密一些使用客户端加密的S3文件(不是我)。我已经获得了公钥和私钥,并告诉RSA被使用......但我正在努力弄清楚如何解密这个文件。

我的理解是这是一个两步过程:

  1. 下载包含metadata['x-amz-key']的文件的元数据 - 这是第一个需要使用我的私钥解密的密钥。

  2. 解密后会生成一个新密钥,可用于解密实际文件吗?

  3. 我不确定该怎么做。到目前为止,我已经尝试了这个(我认为这涵盖了第1步)。

    会喜欢这方面的帮助 - 非常困惑。

    import base64
    from Crypto.PublicKey import RSA
    
    key = "-----BEGIN PRIVATE KEY-----\nMAHJKxxxxxxxx\n-----END PRIVATE KEY-----"
    rsa_Key =RSA.importKey(key)
    raw_cipher_data = envelope_key
    second_key = rsa_Key.decrypt(raw_cipher_data)
    

    然后产生如下所示的内容:

    b"\x15\\xc0\\s'
    

    即使这是正确的......我怀疑它不是。那么我将如何继续解密实际的S3文件?

    再次感谢。

    下一步

    据我所知,这似乎是一种合理的方法,经过大量阅读后我更有信心(这篇文章也有很多帮助(How To Decrypt AWS Ruby Client-side Encryption in Python)。

    然而,仍然无法让这个工作......

    from Crypto.Cipher import AES
    
    object_info = s3.head_object(Bucket="xxxx", Key="Secret.txt")
    
    metadata = object_info['Metadata']
    envelope_key = base64.b64decode(metadata['x-amz-key'])
    envelope_iv = base64.b64decode(metadata['x-amz-iv'])
    
    ENV_KEY_LENGTH = 32
    
    ENCRYPTION_KEY = base64.b64decode(KEY)
    
    key = "-----BEGIN PRIVATE KEY-----\nXXXX\n-----END PRIVATE KEY-----"
    rsa_Key =RSA.importKey(key)
    envelope_key = rsa_Key.decrypt(envelope_key)[:ENV_KEY_LENGTH]
    envelope_iv = rsa_Key.decrypt(envelope_iv)[:ENV_KEY_LENGTH]
    
    decryptor = AES.new(envelope_key, AES.MODE_CBC, envelope_iv)
    
    with open('Desktop/test.txt', 'r') as f:
        f.read()
        secret_de = decryptor.decrypt(f)
        print(secret_de)
    

1 个答案:

答案 0 :(得分:0)

根据您对元数据字段的引用,我怀疑您所看到的是使用S3加密客户端[1]加密的对象。虽然这确实意味着它是以一致的方式加密和存储的,但遗憾的是我们目前没有这种格式和方法记录很好,而且我们目前没有Python的客户端。这些都是我们未来希望改进的东西,但这对你现在并没有什么帮助。

尽管我不想让某人远离Python,但在这种情况下,我的第一个建议是使用提供此功能的现有支持客户端之一。根据您的描述,您需要一个支持RSA密钥包装,因此从功能矩阵[2]中,您需要Java或Ruby客户端。

[1] https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingClientSideEncryption.html

[2] https://docs.aws.amazon.com/general/latest/gr/aws_sdk_cryptography.html