AWS Payment Cryptography

目次

Cost & Commerce セキュリティ・決済暗号処理プラットフォーム

AWS Payment Cryptography は、PCI DSS & PCI PTS 準拠 のマネージド決済暗号処理サービスです。HSM(Hardware Security Module)レベルのセキュリティで、EMV ペイメントカード処理に必要な鍵管理・PIN ブロック生成・カード認証・MAC 生成を 顧客が自社 HSM を調達・保有することなく クラウドで実行。決済サービスプロバイダー・金融機関・フィンテック企業が PCI コンプライアンスを維持しながらスケーラブルな決済処理 を実現します。このページでは、Payment Cryptography の核心・セットアップ・ユースケース・比較を体系的に整理します。


このページの目的

このページでは以下を対象としています。

  • 決済企業の運用者: EMV 決済処理の PCI HSM 要件対応
  • セキュリティアーキテクト: 決済フローの暗号化・鍵管理・コンプライアンス設計
  • 開発者向け: Payment Cryptography API の統合実装
  • 意思決定者向け: オンプレミス HSM vs AWS Payment Cryptography vs KMS の選択判断

2025-2026 年の Payment Cryptography エコシステム

  • TR-31/TR-34 標準化深化: 国際的な鍵交換標準への対応強化
  • ISO 9564 PIN ブロック対応拡張: Format 0/1/3/4 の完全サポート
  • DUKPT(Derived Unique Key Per Transaction)の自動化: POS ターミナル鍵管理簡素化
  • 3DES → AES への段階的移行: 次世代暗号への対応
  • PCI DSS 4.0 準拠: 最新セキュリティ要件への適応
  • マルチリージョン クラスター化: グローバル決済処理への対応

定義

AWS 公式による定義:

“AWS Payment Cryptography is a fully managed service that enables you to perform cryptographic operations needed for payment card processing, compliant with PCI DSS and PCI PIN Security requirements.”

決済に特化した暗号処理をマネージドサービスで提供し、顧客が PCI HSM を所有・管理する負担を排除 しながら高度なセキュリティを実現。


本質・定義 {#本質定義}

初心者向け説明

Payment Cryptography は「決済業界専用の暗号化サービス」です。通常、EMV カード処理には PCI PTS 認定の物理 HSM(Thales payShield, Utimaco など)が必須で、調達コストは数百万円、運用チームも必要。Payment Cryptography はこれを AWS のマネージドサービス化し、API で暗号化操作を実行できます。

Service の役割

Payment Cryptography は以下の決済固有機能を提供:

機能 説明
Key Management(PCI 準拠) TR-31/TR-34 形式での鍵交換、BDK・ZMK・TMK 管理
PIN Processing PIN ブロック生成・変換・検証(DUKPT・ISO 9564)
Card Validation CVV/CVC 生成・検証、EMV 動的データ認証、ARQC 検証
Cryptographic Operations 3DES・AES 暗号化、ANSI X9.9/X9.19 MAC 生成
PCI DSS Compliance ネイティブな PCI コンプライアンス、監査ログ

Payment Cryptography が解決する課題 {#課題}

1. PCI HSM の調達・運用コスト排除

課題:PCI PTS 認定 HSM(Thales payShield, Utimaco SecurityServer)は初期投資 $100K+、専門運用チーム必須

Payment Cryptography の解決:AWS マネージドサービスで HSM 相当機能を提供、初期構築・パッチ・障害対応を AWS が負担

2. TR-31/TR-34 鍵交換の標準化

課題:EMV 決済の鍵交換標準(TR-31/TR-34)を自前実装するのは複雑で QSA 認証にも時間要

Payment Cryptography の解決:標準サポート、決済ネットワーク(VISA/Mastercard)との鍵交換を自動化

3. DUKPT による POS ターミナル鍵管理

課題:POS ターミナルごとに異なる暗号化鍵(DUKPT)を生成・配布・ローテーションするのは運用負荷

Payment Cryptography の解決:API で DUKPT 鍵生成・PIN ブロック変換を自動化、ターミナル鍵管理を簡素化

4. CVV/CVC 検証の標準化

課題:VISA/Mastercard ごとに異なる CVV 計算(Visa Amex vs Visa)を実装・テストするのは複雑

Payment Cryptography の解決:カードブランドごとの検証ロジックを標準化、API で一括対応


主な特徴 {#特徴}

1. PCI DSS Level 1 / PCI PIN Security 準拠

  • AWS が所有する PCI PTS 認定 HSM で暗号化を実行
  • 顧客の PCI スコープを縮小(決済処理部分を AWS に委託)
  • PCI QSA 監査対象外(AWS 責任範囲)

2. 暗号アルゴリズムの多様性

対応暗号化:
  ├─ 3DES(3-Key TripleDES)← 従来型
  ├─ AES(Advanced Encryption Standard)← 次世代
  └─ DUKPT(Derived Unique Key Per Transaction)

対応 MAC:
  ├─ ANSI X9.9(単一 DES)
  └─ ANSI X9.19(3DES チェーン)

対応 PIN ブロック:
  ├─ ISO 9564 Format 0(ISO 標準)
  ├─ ISO 9564 Format 1
  ├─ ISO 9564 Format 3
  └─ ISO 9564 Format 4

3. Key/Alias による階層的鍵管理

CMK(Customer Master Key)
  ├─ Symmetric(3DES/AES)
  ├─ Asymmetric(RSA)
  └─ Alias(参照用)

BDK(Base Derivation Key)
  └─ DUKPT で自動的に派生鍵生成

ZMK(Zone Master Key)
  └─ 取引先との鍵交換用

TMK(Terminal Master Key)
  └─ POS ターミナル個別鍵

4. 複数の Key Store タイプ

  • AWS owned keys:AWS が鍵を管理(低コスト)
  • Customer managed keys:顧客が KMS で管理(高度な制御)
  • External Key Store(XKS):オンプレミス HSM と連携

アーキテクチャ {#アーキテクチャ}

【図1】Payment Cryptography 全体フロー

決済ネットワーク / POS ターミナル
    ↓ PIN ブロック・カード情報(暗号化)

取引先決済プロセッサー
    ↓ AWS Payment Cryptography API

Payment Cryptography Service
    ├─ Key Store(鍵の管理・保存)
    ├─ Cryptographic Operations(暗号化・検証)
    │  ├─ PIN ブロック変換
    │  ├─ CVV/CVC 検証
    │  ├─ MAC 生成・検証
    │  └─ 3DES/AES 暗号化
    └─ CloudTrail ログ(監査証跡)

アプリケーション(決済処理)
    ├─ 認可・検証判定
    ├─ ERP・決済ゲートウェイと統合
    └─ 決済ネットワークへの送信

【図2】DUKPT PIN ブロック変換フロー

POS ターミナル
  ├─ BDK(Base Derivation Key)を保持
  ├─ 顧客が PIN を入力
  └─ Terminal Unique Key で暗号化

AWS Payment Cryptography
  ├─ BDK から Terminal Unique Key を派生
  ├─ PIN ブロック(ISO 9564 Format 0)を復号
  ├─ IPSN(Initialization PIN Segment Number)で新キーを派生
  └─ PIN ブロックを新キーで再暗号化

決済イシュアー(銀行)
  ├─ PIN ブロックを復号
  ├─ 顧客 PIN と照合
  └─ 認可・否認 を返す

暗号鍵管理(PCI DSS 準拠) {#鍵管理}

Key タイプと用途

1. CMK(Customer Master Key)

# CMK 作成(対称鍵 - 3DES)
import boto3

payment = boto3.client('payment-cryptography', region_name='us-east-1')

response = payment.create_key(
    KeyMaterial={
        'Tr31KeyBlock': {
            'WrappingKeyIndex': 0,
            'WrappingKeySpec': '3DES',
            'ImportToken': 'import-token-from-export'
        }
    },
    KeyAttributes={
        'KeyUsage': 'PIN_ENCRYPTION',
        'KeyClass': 'SYMMETRIC_KEY',
        'KeyAlgorithm': 'TDES_3KEY',
        'KeyModesOfUse': {
            'Encrypt': True,
            'Decrypt': True,
            'Wrap': True,
            'Unwrap': True,
            'Sign': False,
            'Verify': False
        }
    }
)

key_id = response['Key']['KeyId']
print(f"CMK created: {key_id}")

2. Alias(参照用短名)

# Alias 作成
response = payment.create_alias(
    AliasName='prod-pin-encryption-key',
    KeyArn=key_id
)

# API 呼び出し時に ARN の代わりに Alias を使用
# KeyIdentifier='arn:aws:payment-cryptography:us-east-1:123456789012:key/prod-pin-encryption-key'

Key ローテーション戦略

# 新キー生成(現在のキーを置き換え用)
new_key_response = payment.create_key(...)
new_key_id = new_key_response['Key']['KeyId']

# 段階的な切り替え(Blue-Green)
# 1. 新キーを準備(2-4 週間)
# 2. 新キーへのリダイレクト(段階的)
# 3. 旧キーを使用禁止
# 4. 旧キーを削除

PIN 処理・変換 {#pin処理}

ISO 9564 PIN ブロック フォーマット

Format 0(ISO 標準)

構成: [制御バイト] [PIN] [フィラー] = 8 バイト

例: PINが 1234 の場合
  ├─ 04: PIN 長(4 ディジット)
  ├─ 31 32 33 34: PIN("1234" の BCD)
  ├─ FF FF FF FF: フィラー
  └─ 結果: 04 31 32 33 34 FF FF FF(3DES で暗号化)

Format 1(Visa/MasterCard 標準)

構成: [ランダムハーフ] [PIN ハーフ] = 8 バイト

PIN ハーフ = 0x[PIN長][PIN パッド]
例: PIN 1234 → PIN ハーフ = 0x41234FFF

結果: [random 4 bytes] + [PIN ハーフ] → 3DES 暗号化

PIN 検証 API

# PIN ブロック変換(ターミナル鍵 → イシュアー鍵)
response = payment.translate_pin_data(
    EncryptedPinBlockData={
        'TripleDESEncryptedData': {
            'CipherText': ciphertext_from_terminal,  # Base64
            'KeyArn': 'arn:aws:payment-cryptography:...:key/terminal-bdk'
        }
    },
    TranslationAttributes={
        'PinBlockFormat1': {
            'PrimaryAccountNumber': '4111111111111111'  # カード番号
        }
    },
    SessionKeyDerivation={
        'Dukpt': {
            'KeySerialNumber': '0123456789ABCDEF01',  # ターミナル KSN
            'Mode': 'CBC'
        }
    },
    OutgoingKeyIdentifier='arn:aws:payment-cryptography:...:key/issuer-master-key'
)

new_pin_block = response['EncryptedPinBlock']['TripleDESEncryptedData']['CipherText']

カード認証・CVV 検証 {#カード認証}

CVV(Card Verification Value)生成・検証

# CVV 検証(VISA)
response = payment.verify_card_validation_data(
    KeyIdentifier='arn:aws:payment-cryptography:...:key/cvv-key',
    PrimaryAccountNumber='4111111111111111',
    VerificationAttributes={
        'VisaAmex': {
            'CardExpiryDate': '1225',  # MMYY 形式
            'ServiceCode': '101',       # VISA 標準
            'CvdServiceCode': '2'       # CVC2 = 3 ディジット
        }
    },
    ValidationData='123'  # カード裏面の CVC
)

if response['ValidationResult'] == 'VALID':
    print("CVV is valid")
else:
    print("CVV is invalid")

EMV Cryptogram 検証

# ARQC(Authorization Request Cryptogram)検証
response = payment.verify_auth_request_cryptogram(
    KeyIdentifier='arn:aws:payment-cryptography:...:key/icc-master-key',
    PrimaryAccountNumber='4111111111111111',
    AuthRequestCryptogram='A1B2C3D4E5F6G7H8',  # EMV レスポンス
    AuthUnpredictableNumber='0123456789ABCDEF'  # ATM から提供
)

if response['AuthorizationResult'] == 'APPROVED':
    print("EMV authentication successful")

MAC 生成・検証 {#mac}

ANSI X9.19 MAC(銀行標準)

# MAC 生成(メッセージ認証コード)
response = payment.generate_card_validation_data(
    KeyIdentifier='arn:aws:payment-cryptography:...:key/mac-key',
    GenerationAttributes={
        'AmexAttributes': {
            'PrimaryAccountNumber': '4111111111111111',
            'CardExpiryDate': '1225'
        }
    },
    ValidationDataLength=3  # 3 ディジット(標準)
)

mac_value = response['GenerationData']
# 例: "123" → メッセージと一緒に送信

# 検証側
verify_response = payment.verify_card_validation_data(
    KeyIdentifier='...:key/mac-key',
    PrimaryAccountNumber='4111111111111111',
    VerificationAttributes={'AmexAttributes': {...}},
    ValidationData=mac_value  # 受け取った MAC と比較
)

主要ユースケース {#ユースケース}

ユースケース 1: 決済プロセッサーの PIN 変換

シナリオ:Visa / MasterCard の決済プロセッサーが POS からの PIN を受け取り、イシュアー(銀行)に転送

流れ:
  1. POS 端末が DUKPT で暗号化した PIN ブロック送信
  2. Payment Cryptography が PIN ブロックを復号(BDK 使用)
  3. 別の鍵でイシュアー向け PIN ブロックを生成
  4. イシュアーが PIN 検証

コスト削減: オンプレミス HSM ($100K+ 初期投資) 不要

ユースケース 2: カード発行プログラムの CVV 生成

シナリオ:フィンテック企業が自社クレジットカード発行プログラムで CVV を生成

流れ:
  1. Card Issuing System が Payment Cryptography API を呼び出し
  2. CVV 生成(カード番号・有効期限から計算)
  3. 物理カードに印刷
  4. 顧客がカード決済時に CVV 検証

コスト削減: PCI HSM 保有不要、決済サービス即座に提供可能

ユースケース 3: 決済ゲートウェイの TR-34 鍵交換

シナリオ:決済ゲートウェイが取引先(アクワイアラー)と鍵交換(TR-34)を自動化

流れ:
  1. Payment Cryptography が TR-34 形式で鍵エクスポート
  2. 取引先が受信・秘密鍵で復号
  3. 以降の通信は新キーで暗号化

コスト削減: 手動鍵交換プロセス(複数営業日)をコンピュータ化

ユースケース 4: POS ネットワークの大規模展開

シナリオ:大手小売業が全国 1000+ POS ターミナルの鍵を一元管理

流れ:
  1. BDK を Payment Cryptography に登録
  2. ターミナルごとの KSN(Key Serial Number)で個別鍵を派生
  3. PIN ブロック受信時に自動的にターミナル鍵で復号・再暗号化

コスト削減: 従来型 HSM では複数クラスタが必要($500K+)、Payment Cryptography は従量課金

設定・操作の具体例 {#設定操作}

1. 初期セットアップ(AWS CLI)

# リージョン確認(Payment Cryptography 対応リージョン)
# 対応リージョン: us-east-1, us-west-2, eu-west-1, ap-southeast-1

# CMK 作成(対称鍵 3DES)
aws payment-cryptography create-key \
  --key-material '{
    "Tr31KeyBlock": {
      "WrappingKeyIndex": 0
    }
  }' \
  --key-attributes '{
    "KeyUsage": "PIN_ENCRYPTION",
    "KeyClass": "SYMMETRIC_KEY",
    "KeyAlgorithm": "TDES_3KEY",
    "KeyModesOfUse": {
      "Encrypt": true,
      "Decrypt": true,
      "Wrap": true,
      "Unwrap": true
    }
  }' \
  --region us-east-1

# 出力: Key ID(例: arn:aws:payment-cryptography:us-east-1:123456789012:key/xxx)

2. Python SDK での PIN 処理

import boto3
import base64

payment = boto3.client('payment-cryptography-data', region_name='us-east-1')

# PIN ブロック受信(Base64 エンコード)
encrypted_pin_block = base64.b64decode('ABCD1234...')

# PIN ブロック変換(ターミナル鍵 → イシュアー鍵)
response = payment.translate_pin_data(
    EncryptedPinBlockData={
        'TripleDESEncryptedData': {
            'CipherText': encrypted_pin_block.hex
        }
    },
    TranslationAttributes={
        'PinBlockFormat1': {
            'PrimaryAccountNumber': '4111111111111111'
        }
    },
    SessionKeyDerivation={
        'Dukpt': {
            'KeySerialNumber': '0123456789ABCDEF01'
        }
    },
    OutgoingKeyIdentifier='arn:aws:payment-cryptography:us-east-1:...:key/issuer-key',
    IncomingEncryptionAttributes={
        'TripleDES': {
            'KeyLength': 192
        }
    },
    OutgoingEncryptionAttributes={
        'TripleDES': {
            'KeyLength': 192
        }
    }
)

# 結果
issuer_pin_block = response['EncryptedPinBlock']['TripleDESEncryptedData']['CipherText']
print(f"Issuer PIN Block: {issuer_pin_block}")

3. Terraform IaC(インフラストラクチャコード)

# Payment Cryptography Key 定義
resource "aws_payment_cryptography_key" "pin_encryption" {
  key_material = {
    tr31_key_block = {
      wrapping_key_index = 0
    }
  }

  key_attributes = {
    key_usage            = "PIN_ENCRYPTION"
    key_class            = "SYMMETRIC_KEY"
    key_algorithm        = "TDES_3KEY"
    key_modes_of_use = {
      encrypt = true
      decrypt = true
      wrap    = true
      unwrap  = true
    }
  }

  enabled = true
}

# Alias 定義
resource "aws_payment_cryptography_alias" "pin_encryption_alias" {
  alias_name = "prod-pin-encryption-key"
  key_arn    = aws_payment_cryptography_key.pin_encryption.arn
}

# 出力
output "pin_key_arn" {
  value       = aws_payment_cryptography_key.pin_encryption.arn
  description = "Payment Cryptography Key ARN for PIN Encryption"
}

類似サービス比較 {#比較}

特性 Payment Cryptography KMS Thales payShield Utimaco SecurityServer
形態 マネージド決済 HSM マネージド汎用暗号 決済専用 HSM エンタープライズ HSM
PCI DSS Level 1 準拠 Level 2 Level 1 Level 1
決済固有機能 ◎ 3DES/DUKPT/CVV △ 基本的暗号のみ ◎ 完全サポート ◎ 完全サポート
TR-31/TR-34 ◎ ネイティブ ✗ 非対応 ◎ ネイティブ ◎ ネイティブ
PIN 処理 ◎ ISO 9564 △ 暗号化のみ ◎ 完全対応 ◎ 完全対応
初期投資 低(API 課金) 低(API 課金) 高($100K+) 高($150K+)
運用負荷 低(AWS マネージド) 低(AWS マネージド) 高(専門チーム必須) 高(専門チーム必須)
スケーラビリティ ◎ 自動スケール ◎ 自動スケール △ 手動スケール △ 手動スケール
AWS 統合 ◎ ネイティブ ◎ 完全統合 △ 連携ツール △ 連携ツール
グローバル対応 ◎ マルチリージョン ◎ マルチリージョン ✗ リージョン別 ✗ リージョン別

ベストプラクティス {#ベストプラクティス}

✅ 推奨される構成

✓ リージョン複数化(us-east-1 + eu-west-1)
✓ CMK + Alias の階層的管理
✓ キー ローテーション(年 1 回以上)
✓ CloudTrail 監査ログの永続保存(S3)
✓ IAM ポリシーで細粒度アクセス制御
✓ VPC エンドポイント(プライベート接続)
✓ 定期的なセキュリティ監査(PCI QSA)

❌ アンチパターン

× キーを複数リージョンに複製(鍵の拡散)
× Alias なしで Key ARN を直接指定
× キーローテーション無し(セキュリティ低下)
× CloudTrail ログ削除(コンプライアンス違反)
× 過度に広い IAM ポリシー(権限昇格リスク)
× オンプレミス PIN キーとの混在(複雑性増加)

トラブルシューティング {#トラブルシューティング}

症状 原因 解決策
PIN ブロック変換失敗 BDK 設定誤り / KSN 不正 BDK・KSN 値を再確認、CloudTrail でエラー詳細確認
CVV 検証失敗 カード番号・有効期限の不正 API パラメータ(PAN・日付)を確認
API レート制限 大量リクエスト(>10K/秒) リクエスト分散、AWS Support に増加申請
Key Not Found 削除済みキーへのアクセス キー ARN / Alias の存在確認
IAM 権限不足 policy に payment-cryptography:* 含まれない IAM ポリシーに payment-cryptography API 追加

近年の動向 {#近年の動向}

  1. AES(次世代暗号)への完全移行:3DES 廃止スケジュール対応
  2. Post-Quantum Cryptography 準備:量子耐性暗号キー生成サポート
  3. Multi-Region Cluster:グローバル鍵管理・自動フェイルオーバー
  4. AI ベースの異常検知:不正な暗号化パターン自動検出
  5. ISO 9564-2 対応:ピンパッド・端末認証の標準化

学習リソース {#資料}

公式ドキュメント

  1. AWS Payment Cryptography User Guide
  2. Payment Cryptography API Reference
  3. PCI DSS Compliance Guide
  4. TR-31 / TR-34 Standards
  5. ISO 9564 PIN Security
  6. EMV Specifications
  7. DUKPT Algorithm

参考資料

  • Thales payShield ドキュメント(比較参考)
  • Utimaco SecurityServer ドキュメント(比較参考)
  • AWS Well-Architected Security Pillar

実装例・チェックリスト {#実装チェック}

実装フェーズ

【Week 1】設計・計画
  Day 1-3: PCI DSS 要件整理
  Day 4-7: 決済フロー設計(PIN・CVV・MAC 処理)

【Week 2-3】セットアップ・テスト
  Day 8-10: CMK 作成・Alias 設定
  Day 11-14: PIN ブロック変換テスト(テスト決済网)
  Day 15-21: CVV・MAC 検証テスト

【Week 4】本番化
  Day 22-28: セキュリティ監査・PCI QSA 認証

実装チェックリスト

【設計フェーズ】
☐ PCI DSS コンプライアンス要件確認
☐ 暗号化フロー設計(Terminal → Payment Cryptography → Issuer)
☐ キー管理ポリシー定義
☐ リージョン・冗長性戦略検討

【セットアップ】
☐ Payment Cryptography リージョン選択
☐ CMK 作成(PIN・CVV・MAC 用)
☐ Alias 設定
☐ IAM ロール / ポリシー設定

【実装】
☐ PIN ブロック変換 API 統合
☐ CVV 検証 API 統合
☐ MAC 生成・検証 API 統合
☐ CloudTrail ログ有効化

【テスト】
☐ テスト決済ネットワークで PIN 変換テスト
☐ 複数カードブランド(VISA/MC)での CVV テスト
☐ ローテーション動作テスト
☐ エラーハンドリング

【本番運用】
☐ モニタリング・アラート設定
☐ キーローテーション スケジュール
☐ インシデント対応計画
☐ スタッフトレーニング

コスト・プライシング {#コスト}

月額概算

【小規模決済企業】(月間 100 万トランザクション)
  CMK 1 個 × $2/月                    = $2
  暗号化操作 100 万 × $0.0005/100    = $5
  月額合計: 約 $7/月(+ AWS 使用料)

【中規模決済プロセッサー】(月間 1 億トランザクション)
  CMK 10 個 × $2/月                   = $20
  暗号化操作 1 億 × $0.0005/100      = $500
  月額合計: 約 $520/月

【エンタープライズ決済ゲートウェイ】(月間 10 億トランザクション)
  CMK 50 個 × $2/月                   = $100
  暗号化操作 10 億 × $0.0005/100     = $5,000
  月額合計: 約 $5,100/月

比較: オンプレミス Thales payShield
  初期投資: $100K-150K
  年間保守: $20K-30K
  → AWS Payment Cryptography は小~中規模で圧倒的に有利

まとめ {#まとめ}

AWS Payment Cryptography は、PCI DSS 準拠の決済暗号処理をマネージドサービスで提供するサービスです。オンプレミス PCI HSM の調達・運用負荷を排除しながら、EMV ペイメント処理に必要な PIN 変換・CVV 検証・MAC 生成を API で簡潔に実装 できます。

核心ポイント

  1. PCI HSM の完全置き換え:Thales/Utimaco HSM なしで PCI DSS Level 1 準拠
  2. 決済固有機能:3DES/DUKPT/TR-31/ISO 9564 をネイティブサポート
  3. スケーラビリティ:従量課金で数百万~数十億トランザクション対応
  4. AWS ネイティブ統合:CloudTrail・IAM・KMS と標準連携
  5. コスト効率:小~中規模決済企業でオンプレ HSM より大幅低コスト