Amazon Web Services 한국 블로그

AWS Payment Cryptography – 결제 처리를 클라우드로 옮기기 위한 신규 암호화 도구

암호화는 일상 생활 어디에나 있습니다. 이 블로그 글을 읽고 계신다면 암호화를 사용하여 통신을 보호하는 HTTP의 확장판인 HTTPS를 사용하고 계실 것입니다. AWS에서는 다음과 같은 다양한 서비스와 기능을 사용하여 키와 암호화를 관리할 수 있습니다.

  • 데이터 암호화 또는 디지털 서명을 위한 키를 생성 및 보호하기 위해 사용하는 AWS Key Management Service(AWS KMS)입니다.
  • AWS CloudHSM: 단일 테넌트 하드웨어 보안 모듈(HSM) 관리에 사용할 수 있습니다.

HSM은 암호화 작업과 이러한 작업에 사용하는 키를 안전하게 보호하는 물리적 장치입니다. HSM은 기업, 계약 및 규제 준수 요구 사항을 충족하도록 사용자를 지원합니다. CloudHSM을 사용하면 범용 HSM에 액세스할 수 있습니다. 결제와 관련된 경우 신용 카드 또는 직불 카드의 개인 식별 번호(PIN)와 보안 코드를 생성 및 검증하는 등의 기능을 제공하는 특정 결제 HSM이 있습니다.

오늘 저는 클라우드에서 결제 처리 애플리케이션용 결제 HSM 및 키를 관리하는 탄력적인 서비스인 AWS Payment Cryptography 출시 소식을 전합니다.

결제 HSM을 사용하는 애플리케이션은 결제 처리가 복잡하고, 시간에 민감하며, 규제가 엄격하고, 여러 금융 서비스 제공자와 결제 네트워크의 상호 작용이 필요하기 때문에 요건이 까다롭습니다. 결제할 때마다 두 개 이상의 금융 서비스 제공업체 간에 데이터를 교환하며 각 단계마다 고유한 키를 사용하여 복호화, 변환 및 암호화해야 합니다.

이 프로세스에는 각 결제 서비스 공급자 간의 고성능 암호화 기능 및 키 관리 절차가 필요합니다. 이러한 공급자들은 보호, 관리, 교체 및 감사를 위한 수천 개의 키를 보유하고 있을 수 있기에 전체 프로세스에 비용이 많이 들고 규모를 조정하기 어려울 수 있습니다. 게다가 결제 HSM은 과거에는 복잡하고 오류가 발생하기 쉬운 프로세스를 사용했습니다. 예를 들면 보안실에서 각각 별도의 주요 구성 요소를 인쇄한 휴대용 종이 양식을 여러 장 사용하여 키를 교환했습니다.

AWS Payment Cryptography 소개
AWS Payment Cryptography는 다양한 결제 카드 산업(PCI) 표준에 따라 결제 처리 시 데이터 보호에 사용하는 암호화 기능 및 키 관리 구현을 간소화합니다.

AWS Payment Cryptography를 사용하면 온프레미스 결제 HSM을 프로비저닝 및 관리할 필요가 없고 제공된 도구를 사용하여 오류가 발생하기 쉬운 키 교환 프로세스를 피할 수 있습니다. 예를 들어, 결제 및 금융 서비스 공급업체는 AWS Payment Cryptography를 통해 몇 분 안에 개발을 시작하고 수동 프로세스 없이 전자적으로 키를 교환하도록 계획할 수 있습니다.

AWS Payment Cryptography는 규정을 준수하는 방식으로 탄력적 암호화 기능을 제공하기 위해 PCI PTS HSM 디바이스 승인을 포함하는 HSM을 사용합니다. 이러한 기능으로는 카드 데이터의 암호화 및 암호 해독, 키 생성 및 핀 변환 등이 있습니다. 또한 AWS Payment Cryptography는 PCI DSS, PCI PIN 및 PCI P2PE 등의 PCI 보안 표준에 따라 설계되었고 규정 준수 요건을 충족하도록 지원하는 증거 및 보고를 제공합니다.

ANSI X9 TR-31 프로토콜을 사용하여 키 암호화 키(KEK)로 AWS Payment Cryptography와 온프레미스 HSM 간에 대칭 키를 가져오고 내보낼 수 있습니다. 또한 ANSI X9 TR-34 프로토콜을 사용하여 다른 시스템 및 장치와 대칭 KEK를 가져오고 내보낼 수 있습니다. 이 경우 서비스에서 비대칭 기술을 사용하여 대칭 키를 교환할 수 있습니다.

소비자 결제 처리를 클라우드로 간편하게 이전하기 위해 기존 카드 결제 애플리케이션은 AWS SDK를 통해 AWS Payment Cryptography를 사용할 수 있습니다. 이렇게 하면 결제 HSM에서 흔히 볼 수 있는 것처럼 TCP 소켓을 통해 벤더별 ASCII 인터페이스 대신 Java 또는 Python과 같은 선호하는 프로그래밍 언어를 사용할 수 있습니다.

AWS Identity and Access Management(IAM) ID 기반 정책을 사용하여 액세스를 승인할 수 있습니다. 이 정책에서는 어떤 작업과 리소스를 허용하거나 거부할지, 어떤 조건에서 허용할지 지정할 수 있습니다.

모니터링은 결제 처리에 필요한 신뢰성, 가용성 및 성능을 유지하는 데 중요합니다. AWS Payment Cryptography를 사용하면 Amazon CloudWatch, AWS CloudTrailAmazon EventBridge를 사용하여 무슨 일이 일어나고 있는지 이해하고, 문제가 발생했을 때 보고하며, 적절하다면 자동 조치를 취할 수 있습니다.

이제 실제로 어떻게 작동하는지 알아보겠습니다.

AWS Payment Cryptography 사용
AWS Command Line Interface(AWS CLI)를 사용하여 카드 확인 키(CVK)로 사용할 이중 길이의 3DES 키를 생성합니다. CVK는 CVV, CVV2 및 유사한 값 등의 카드 보안 코드를 생성 및 확인하기 위해 사용하는 키입니다.

참고로 CLI에는 두 개의 명령이 있으며, 마찬가지로 API 및 SDK에도 두 개의 엔드포인트가 있습니다.

  • 키와 별칭의 나열 및 생성 등의 컨트롤 플레인 작업을 위한 payment-cryptography입니다.
  • 키를 사용해 PIN 또는 카드 유효성 검사 데이터를 생성하는 암호화 작업 등을 위한 payment-cryptography-data입니다.

키 생성은 컨트롤 플레인 작업입니다.

aws payment-cryptography create-key \
    --no-exportable \
    --key-attributes KeyAlgorithm=TDES_2KEY,
                     KeyUsage=TR31_C0_CARD_VERIFICATION_KEY,
                     KeyClass=SYMMETRIC_KEY,
                     KeyModesOfUse='{Generate=true,Verify=true}'
{
    "Key": {
        "KeyArn": "arn:aws:payment-cryptography:us-west-2:123412341234:key/42cdc4ocf45mg54h",
        "KeyAttributes": {
            "KeyUsage": "TR31_C0_CARD_VERIFICATION_KEY",
            "KeyClass": "SYMMETRIC_KEY",
            "KeyAlgorithm": "TDES_2KEY",
            "KeyModesOfUse": {
                "Encrypt": false,
                "Decrypt": false,
                "Wrap": false,
                "Unwrap": false,
                "Generate": true,
                "Sign": false,
                "Verify": true,
                "DeriveKey": false,
                "NoRestrictions": false
            }
        },
        "KeyCheckValue": "B2DD4E",
        "KeyCheckValueAlgorithm": "ANSI_X9_24",
        "Enabled": true,
        "Exportable": false,
        "KeyState": "CREATE_COMPLETE",
        "KeyOrigin": "AWS_PAYMENT_CRYPTOGRAPHY",
        "CreateTimestamp": "2023-05-26T14:25:48.240000+01:00",
        "UsageStartTimestamp": "2023-05-26T14:25:48.220000+01:00"
    }
}

다음 단계에서 이 키를 참조하려면 Amazon 리소스 이름(ARN)(KeyARN 속성에 있음)을 사용하거나 별칭을 생성할 수 있습니다. 별칭은 친숙한 이름으로 전체 ARN을 사용하지 않고도 키를 참조할 수 있게 해줍니다. 다른 키를 참조하도록 별칭을 업데이트할 수 있습니다. 키를 교체해야 하는 경우 애플리케이션의 구성 또는 코드를 변경할 필요 없이 별칭만 업데이트하면 됩니다. 쉽게 알아볼 수 있도록 별칭 이름은 alias/로 시작합니다. 예를 들어 다음 명령은 방금 생성한 키의 alias/my-key를 생성합니다.

aws payment-cryptography create-alias --alias-name alias/my-key \
    --key-arn arn:aws:payment-cryptography:us-west-2:123412341234:key/42cdc4ocf45mg54h
{
    "Alias": {
        "AliasName": "alias/my-key",
        "KeyArn": "arn:aws:payment-cryptography:us-west-2:123412341234:key/42cdc4ocf45mg54h"
    }
}

새 키를 사용하기 전에 모든 키를 나열하여 상태를 확인합니다.

aws payment-cryptography list-keys
{
    "Keys": [
        {
            "KeyArn": "arn:aws:payment-cryptography:us-west-2:123421341234:key/42cdc4ocf45mg54h",
            "KeyAttributes": {
                "KeyUsage": "TR31_C0_CARD_VERIFICATION_KEY",
                "KeyClass": "SYMMETRIC_KEY",
                "KeyAlgorithm": "TDES_2KEY",
                "KeyModesOfUse": {
                    "Encrypt": false,
                    "Decrypt": false,
                    "Wrap": false,
                    "Unwrap": false,
                    "Generate": true,
                    "Sign": false,
                    "Verify": true,
                    "DeriveKey": false,
                    "NoRestrictions": false
                }
            },
            "KeyCheckValue": "B2DD4E",
            "Enabled": true,
            "Exportable": false,
            "KeyState": "CREATE_COMPLETE"
        },
        {
            "KeyArn": "arn:aws:payment-cryptography:us-west-2:123412341234:key/ok4oliaxyxbjuibp",
            "KeyAttributes": {
                "KeyUsage": "TR31_C0_CARD_VERIFICATION_KEY",
                "KeyClass": "SYMMETRIC_KEY",
                "KeyAlgorithm": "TDES_2KEY",
                "KeyModesOfUse": {
                    "Encrypt": false,
                    "Decrypt": false,
                    "Wrap": false,
                    "Unwrap": false,
                    "Generate": true,
                    "Sign": false,
                    "Verify": true,
                    "DeriveKey": false,
                    "NoRestrictions": false
                }
            },
            "KeyCheckValue": "905848",
            "Enabled": true,
            "Exportable": false,
            "KeyState": "DELETE_PENDING"
        }
    ]
}

보시다시피 이전에 생성한 키가 하나 더 있으나 이후에 삭제되었습니다. 키가 삭제되면 삭제 대상(DELETE_PENDING)으로 표시됩니다. 실제 삭제는 구성 가능한 기간(기본적으로 7일) 이후에 발생합니다. 이는 키의 우발적 또는 악의적 삭제를 방지하기 위한 안전 메커니즘입니다. 삭제 대상으로 표시된 키는 사용할 수 없지만 복원할 수 있습니다.

비슷한 방식으로 모든 별칭을 나열하여 어떤 키를 참조하는지 확인합니다.

aws payment-cryptography list-aliases
{
    "Aliases": [
        {
            "AliasName": "alias/my-key",
            "KeyArn": "arn:aws:payment-cryptography:us-west-2:123412341234:key/42cdc4ocf45mg54h"
        }
    ]
}

이제 키를 사용하여 CVV2 인증 시스템에서 카드 보안 코드를 생성합니다. 일반적으로 신용 카드 뒷면에 쓰여있는 CVV2 번호에 익숙할 것입니다. 이것이 계산되는 방식입니다. 신용 카드의 기본 계좌 번호, 카드 만료일 및 이전 단계의 키를 입력합니다. 키를 지정하려면 해당 별칭을 사용합니다. 다음은 데이터 영역 작업입니다.

aws payment-cryptography-data generate-card-validation-data \
    --key-identifier alias/my-key \
    --primary-account-number=171234567890123 \
    --generation-attributes CardVerificationValue2={CardExpiryDate=0124}
{
    "KeyArn": "arn:aws:payment-cryptography:us-west-2:123412341234:key/42cdc4ocf45mg54h",
    "KeyCheckValue": "B2DD4E",
    "ValidationData": "343"
}

ValidationData 속성의 세 자리 숫자를 기록해 두었습니다. 결제를 처리할 때 카드 데이터 값이 정확한지 확인할 수 있습니다.

aws payment-cryptography-data verify-card-validation-data \
    --key-identifier alias/my-key \
    --primary-account-number=171234567890123 \
    --verification-attributes CardVerificationValue2={CardExpiryDate=0124} \
    --validation-data 343
{
    "KeyArn": "arn:aws:payment-cryptography:us-west-2:123412341234:key/42cdc4ocf45mg54h",
    "KeyCheckValue": "B2DD4E"
}

검증에 성공했고, 그 대가로 유효성 검사 데이터를 생성할 때와 동일한 KeyCheckValue를 받게 됩니다.

예상대로 잘못된 검증 데이터를 사용하면 확인에 실패하고 오류가 다시 발생합니다.

aws payment-cryptography-data verify-card-validation-data \
    --key-identifier alias/my-key \
    --primary-account-number=171234567890123 \
    --verification-attributes CardVerificationValue2={CardExpiryDate=0124} \
    --validation-data 999

An error occurred (com.amazonaws.paymentcryptography.exception#VerificationFailedException)
when calling the VerifyCardValidationData operation:
Card validation data verification failed

AWS Payment Cryptography 콘솔에서 키 보기를 선택하여 키 목록을 확인합니다.

콘솔 스크린샷입니다.

예를 들어 키 유형(대칭/비대칭) 및 사용한 알고리즘을 볼 수 있도록 더 많은 열을 활성화할 수도 있습니다.

콘솔 스크린샷입니다.

자세한 내용을 보려면 이전 예제에서 사용한 키를 선택합니다. 여기서는 암호화 구성, 키에 할당된 태그 및 이 키를 참조하는 별칭을 볼 수 있습니다.

콘솔 스크린샷입니다.

AWS Payment Cryptography는 여기서 보여드린 것보다 훨씬 더 많은 작업을 지원합니다. 이 연습에서는 AWS CLI를 사용했습니다. 애플리케이션에서는 모든 AWS SDK를 통해 AWS Payment Cryptography를 사용할 수 있습니다.

가용성 및 요금
AWS Payment Cryptography는 현재 미국 동부(버지니아 북부) 및 미국 서부(오레곤) AWS 리전에 출시되었습니다.

AWS Payment Cryptography를 사용하면 선결제 금액이나 최소 요금 없이 활성 키 및 API 호출 수를 기준으로 사용한 만큼만 비용을 지불하면 됩니다. 자세한 내용은 AWS Payment Cryptography 요금을 참조하십시오.

AWS Payment Cryptography는 전용 결제 HSM 및 레거시 키 관리 시스템에 대한 종속성을 제거하여 AWS 네이티브 API와의 통합을 간소화합니다. 또한 전체 결제 애플리케이션을 클라우드에서 운영하여 왕복 통신 및 지연 시간을 최소화할 수 있습니다.

AWS Payment Cryptography를 사용하여 결제 처리 애플리케이션을 클라우드로 옮깁니다.

Danilo