Amazon Web Services ブログ

新着情報 – AWS Payment Cryptography で決済処理をクラウドに移行

暗号は私たちの日常生活のいたるところにあります。このブログを読まれている方は、暗号化を使用して通信を保護する HTTP の拡張機能である HTTPS を使っていらっしゃることでしょう。AWS では、次のような複数のサービスと機能がキーと暗号の管理に役立ちます。

  • AWS Key Management Service (AWS KMS): データを暗号化またはデジタル署名するためのキーを作成および保護できます。
  • AWS CloudHSM: シングルテナントのハードウェアセキュリティモジュール (HSM) の管理に使用できます。

HSM は、暗号化操作とその操作で使用されるキーを安全に保護する物理デバイスです。HSM は、企業、契約、規制のコンプライアンス要件を満たすのに役立ちます。CloudHSM では、汎用 HSM にアクセスできます。決済を行う場合、特定の決済 HSM があります。これは、クレジットカードやデビットカードの個人識別番号 (PIN) やセキュリティコードの生成や検証などが行えます。

今日は、クラウドで決済処理アプリケーションの決済 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 を使用しています。このような機能には、カードデータの暗号化と復号化、キーの作成、PIN 変換が含まれます。また、AWS Payment Cryptography は PCI DSS、PCI PIN、PCI P2PE などの PCI セキュリティ標準にも従って設計されており、コンプライアンスのニーズを満たすのに役立つ証拠やレポートが用意されています。

ANSI X9 TR-31 プロトコルを使用して、AWS Payment Cryptography とオンプレミス HSM の間で対称キーをキー暗号化キー (KEK) でインポートおよびエクスポートできます。ANSI X9 TR-34 プロトコルを使用して、対称 KEK を他のシステムやデバイスでインポートおよびエクスポートすることもできます。これにより、サービスは非対称技術を使用して対称キーを交換できます。

消費者の決済処理をクラウドに移行する手間を省くため、既存のカード決済アプリケーションでは AWS SDK を通じて AWS Payment Cryptography を使用できます。この方法では、決済 HSM によくあるベンダー固有の TCP ソケット経由の ASCII インターフェイスの代わりに、Java や Python などのお気に入りのプログラミング言語を使用できます。

アクセスは、AWS Identity and Access Management (IAM) のアイデンティティベースのポリシーを使用して承認できます。このポリシーでは、どのアクションやリソースをどのような条件で許可または拒否するかを指定できます。

決済処理に必要な信頼性、可用性、およびパフォーマンスを維持するには、監視が重要です。AWS Payment Cryptography を使用すると、Amazon CloudWatchAWS CloudTrailAmazon EventBridge を使用して、何が起こっているかを把握し、問題が発生した場合は報告し、必要に応じて自動的に措置を講じることができます。

ここからは、実際にどのように機能するのかを見ていきましょう。

AWS Payment Cryptography の使用
AWS コマンドラインインターフェイス (AWS CLI) を使用して、カード検証キー (CVK) として使用する 2 倍の長さの 3DES キーを作成します。CVK は、CVV、CVV2、および同様の値などのカードセキュリティコードの生成と検証に使用されるキーです。

CLI には次の 2 つのコマンド (および API と SDK 用の 2 つのエンドポイント) があります。

  • キーやエイリアスの一覧表示や作成などのコントロールプレーン操作のための payment-cryptography
  • キーを使用して暗証番号やカード検証データを生成するなどの暗号化操作のための 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"
    }
}

次のステップでこのキーを参照するには、KeyARN プロパティにある Amazon リソースネーム (ARN) を使用するか、エイリアスを作成します。エイリアスは、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 プロパティの 3 桁の数字を書き留めておきます。決済を処理する際、カードデータの値が正しいことを確認できます。

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 コンソールで、[View Keys] (キーを表示) を選択すると、キーのリストが表示されます。

コンソールのスクリーンショット。

オプションで、例えばキータイプ (対称/非対称) や使用されているアルゴリズムを確認するなど、より多くの列を有効にできます。

コンソールのスクリーンショット。

詳細を確認するには、前の例で使用したキーを選択します。ここには、暗号化設定、キーに割り当てられたタグ、およびこのキーを参照するエイリアスが表示されます。

コンソールのスクリーンショット。

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

原文はこちらです。