如何从 AWS 加密 CLI 获取初始化向量 (IV)?

How to get the Initialization Vector (IV) from the AWS Encryption CLI?

我正在使用 AWS 加密 CLI 使用如下命令加密文件:

aws-encryption-cli --encrypt --input test.mp4 --master-keys key=arn:aws:kms:us-west-2:123456789012:key/exmaple-key-id --output . --metadata-output -

从命令的输出中,我可以清楚地看到它使用了强度为 12 的初始化向量 (IV),这很好,但我如何实际查看 IV?为了将加密的文件传递给其他服务,例如 AWS Elastic Transcoder,它会在其中自行解密,我需要真正知道用于加密文件的 IV 是什么。

{
    "header": {
        "algorithm": "AES_256_GCM_IV12_TAG16_HKDF_SHA384_ECDSA_P384",
        "content_type": 2,
        "encrypted_data_keys": [{
            "encrypted_data_key": "...............",
            "key_provider": {
                "key_info": "............",
                "provider_id": "..........."
            }
        }],
        "encryption_context": {
            "aws-crypto-public-key": "..............."
        },
        "frame_length": 4096,
        "header_iv_length": 12,
        "message_id": "..........",
        "type": 128,
        "version": "1.0"
    },
    "input": "/home/test.mp4",
    "mode": "encrypt",
    "output": "/home/test.mp4.encrypted"
}

很遗憾,您将无法使用 AWS 加密 SDK CLI 来加密供 Amazon Elastic Transcoder 使用的数据。

AWS 加密 SDK 的主要优势之一是消息格式[1],它将有关加密消息的所有必要信息打包到一个二进制 blob 中,并提供一种更具可扩展性的方式来处理大型消息。不建议从该 blob 中提取数据原语,即使您这样做了,它们也可能会或可能不会直接与另一个系统兼容,具体取决于您使用 AWS 加密 SDK 的方式以及其他系统的期望。

对于 Elastic Transcoder,他们希望原始密文使用指定的 AES 模式加密[2]。这与 AWS 加密 SDK 格式不兼容。

[1] https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/message-format.html

[2] https://docs.aws.amazon.com/elastictranscoder/latest/developerguide/create-job.html#create-job-request-inputs-encryption