Как получить вектор инициализации (IV) из интерфейса командной строки AWS Encryption?

Я шифрую файл с помощью интерфейса командной строки AWS Encryption с помощью такой команды:

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

Из вывода команды я ясно вижу, что она использует Вектор инициализации (IV) с силой 12, и это здорово, но как мне на самом деле просмотреть 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"
}

1 ответ

Решение

К сожалению, вы не сможете использовать интерфейс командной строки AWS Encryption SDK для шифрования данных для потребления Amazon Elastic Transcoder.

Одним из основных преимуществ пакета AWS Encryption SDK является формат сообщения [1], который упаковывает всю необходимую информацию о зашифрованном сообщении в двоичный двоичный объект и обеспечивает более масштабируемый способ обработки больших сообщений. Извлекать примитивы данных из этого большого двоичного объекта не рекомендуется, и даже если вы это сделали, они могут или не могут быть напрямую совместимы с другой системой, в зависимости от того, как вы использовали AWS Encryption SDK и чего ожидает эта другая система.

В случае Elastic Transcoder они ожидают необработанный зашифрованный текст, зашифрованный с использованием указанного режима AES [2]. Это несовместимо с форматом AWS Encryption 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