고객 입력 암호화 - Amazon Connect

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

고객 입력 암호화

흐름에서 수집한 중요한 데이터를 암호화할 수 있습니다. 이렇게 하려면 퍼블릭 키 암호화를 사용해야 합니다.

Amazon Connect 구성할 때 먼저 퍼블릭 키를 제공합니다. 데이터를 암호화할 때 사용되는 키입니다. 나중에 개인 키를 보유하고 있음을 증명하는 서명이 포함된 X.509 인증서를 제공합니다.

데이터를 수집하는 흐름에서 X.509 인증서를 제공하여 로 캡처된 데이터를 암호화합니다.저장된 고객 입력시스템 속성입니다. 이 기능을 사용하려면 .pem 형식의 키를 업로드해야 합니다. 이 암호화 키는 흐름에서 사용할 인증서의 서명을 확인하는 데 사용됩니다.

참고

회전 속도를 높이기 위해 암호화 키를 최대 두 개까지 동시에 활성화할 수 있습니다.

로 데이터를 해독하려면저장된 고객 입력속성, 사용AWS암호화 SDK. 자세한 내용은 AWS Encryption SDK 개발자 안내서를 참조하세요.

자세한 내용은 Amazon Connect를 사용하여 보안 IVR 솔루션 생성을 참조하십시오. 여기서는 다음 작업 방법을 보여줍니다.

  • 신용 카드 번호를 수집하도록 Amazon Connect 커넥트를 구성합니다.

  • 신용 카드 숫자를 암호화합니다.

  • 고객이 제공한 해독 키를 사용하여 이 숫자를 해독하기 위해 백엔드 AWS Lambda로 보냅니다.

OpenSSL 사용하는 두 가지 명령을 제공합니다.

  • RSA key pair 페어와 자체 서명된 X.509 인증서 생성용

  • RSA 키 페어에서 퍼블릭 키를 추출할 다른 키

Amazon Connect 커넥트로 암호화된 데이터를 해독하는 방법

다음 코드 샘플은 로 데이터를 해독하는 방법을 보여 줍니다.AWS암호화 SDK.

package com.amazonaws; import com.amazonaws.encryptionsdk.AwsCrypto; import com.amazonaws.encryptionsdk.CryptoResult; import com.amazonaws.encryptionsdk.jce.JceMasterKey; import org.bouncycastle.jce.provider.BouncyCastleProvider; import java.io.IOException; import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Paths; import java.security.GeneralSecurityException; import java.security.KeyFactory; import java.security.Security; import java.security.interfaces.RSAPrivateKey; import java.security.spec.PKCS8EncodedKeySpec; import java.util.Base64; public class AmazonConnectDecryptionSample { // The Provider 'AmazonConnect' is used during encryption, this must be used during decryption for key // to be found private static final String PROVIDER = "AmazonConnect"; // The wrapping algorithm used during encryption private static final String WRAPPING_ALGORITHM = "RSA/ECB/OAEPWithSHA-512AndMGF1Padding"; /** * This sample show how to decrypt data encrypted by Amazon Connect. * To use, provide the following command line arguments: [path-to-private-key] [key-id] [cyphertext] * Where: * path-to-private-key is a file containing the PEM encoded private key to use for decryption * key-id is the key-id specified during encryption in your flow * cyphertext is the result of the encryption operation from Amazon Connect */ public static void main(String[] args) throws IOException, GeneralSecurityException { String privateKeyFile = args[0]; // path to PEM encoded private key to use for decryption String keyId = args[1]; // this is the id used for key in your flow String cypherText = args[2]; // the result from flow Security.addProvider(new BouncyCastleProvider()); // read the private key from file String privateKeyPem = new String(Files.readAllBytes(Paths.get(privateKeyFile)), Charset.forName("UTF-8")); RSAPrivateKey privateKey = getPrivateKey(privateKeyPem); AwsCrypto awsCrypto = new AwsCrypto(); JceMasterKey decMasterKey = JceMasterKey.getInstance(null,privateKey, PROVIDER, keyId, WRAPPING_ALGORITHM); CryptoResult<String, JceMasterKey> result = awsCrypto.decryptString(decMasterKey, cypherText); System.out.println("Decrypted: " + result.getResult()); } public static RSAPrivateKey getPrivateKey(String privateKeyPem) throws IOException, GeneralSecurityException { String privateKeyBase64 = privateKeyPem .replace("-----BEGIN RSA PRIVATE KEY-----\n", "") .replace("-----END RSA PRIVATE KEY-----", "") .replaceAll("\n", ""); byte[] decoded = Base64.getDecoder().decode(privateKeyBase64); KeyFactory kf = KeyFactory.getInstance("RSA"); PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(decoded); RSAPrivateKey privKey = (RSAPrivateKey) kf.generatePrivate(keySpec); return privKey; } }