Как расшифровать строку из AWS Connect в Python - PullRequest
0 голосов
/ 24 апреля 2019

Я работаю над потоком контактов в Amazon Connect, который шифрует набранную информацию клиента, на самом деле я не могу расшифровать строку результата на лямбда на основе Python

Я уже просматриваю некоторую доступную документацию на форуме разработчиков AWS, также пытался изменить сертификаты на моей лямбде и на Connect

import base64
import boto3
import aws_encryption_sdk
from aws_encryption_sdk.internal.crypto import WrappingKey
from aws_encryption_sdk.key_providers.raw import RawMasterKeyProvider
from aws_encryption_sdk.identifiers import WrappingAlgorithm, EncryptionKeyType
import logging

class StaticMasterKeyProvider(RawMasterKeyProvider):
    provider_id = 'AmazonConnect'

    def __init__(self, **kwargs):
        self._static_keys = {}

    def _get_raw_key(self, key_id):
        try:
           static_key = self._static_keys[key_id]
        except KeyError:
            # X.509 private key file
            static_key = open('blog.connect.private.key', 'rb').read()
            self._static_keys[key_id] = static_key
        return WrappingKey(
            wrapping_algorithm=WrappingAlgorithm.RSA_OAEP_SHA256_MGF1,
            wrapping_key=static_key,
            wrapping_key_type=EncryptionKeyType.PRIVATE
        )

def decrypt_string(encrypted_text):
    encrypted_text = base64.b64decode(encrypted_text)

    # key id specified in amazon connect
    static_key_id = 'KEY Provided By AWS Connect after upload the Public Key'
    static_master_key_provider = StaticMasterKeyProvider()
    static_master_key_provider.add_master_key(static_key_id)

    plaintext, decrypted_header = aws_encryption_sdk.decrypt(
        source=encrypted_text,
        key_provider=static_master_key_provider
    )

log = logging.getLogger('test')
logging.basicConfig(level=logging.DEBUG)
log.setLevel(logging.DEBUG)
log.root.setLevel(logging.DEBUG)
encrypted_text = 'Encrypted Text'
print(decrypt_string(encrypted_text))

Когда я пытаюсь выполнить этот код, я получаю следующую ошибку: ValueError: расшифровка не удалась вместо незашифрованного значения

Может ли кто-нибудь помочь мне с этим? Я уже провожу около 5 часов, проверяя документацию Python SDK, и не могу правильно расшифровать информацию.

1 Ответ

0 голосов
/ 30 апреля 2019

Из ответа github Команда AWS ответит на вопрос следующим фрагментом:

from aws_encryption_sdk.key_providers.raw import RawMasterKeyProvider, WrappingKey
from aws_encryption_sdk.identifiers import EncryptionKeyType, WrappingAlgorithm

class AmazonConnectRawMasterKeyProvider(RawMasterKeyProvider):
    provider_id = "AmazonConnect"

    def _get_raw_key(self, key_id):
        # NOTE: key_id will be your contact flow ID
        static_key = load_my_key_from_wherever()
        return WrappingKey(
            wrapping_algorithm=WrappingAlgorithm.RSA_OAEP_SHA512_MGF1,
            wrapping_key=static_key,
            wrapping_key_type=EncryptionKeyType.PRIVATE,
        )

Они используют RSA_OAEP_SHA512_MGF1 в качестве алгоритма обтекания, поэтому мне нужно объявить его при возврате необработанного ключа (используя закрытый ключ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...