クレジットカードの支払いプロセスを考える

買い物をしていてふとあれ?この仕組みどうなっているんだっけ?というのが気になったので考えてみます。

クレジットカードの支払いプロセスは、一見シンプルに見えるかもしれませんが、裏側には多くのステップと関与するエンティティが存在します。この記事ではVISAの役割を中心にそのプロセスを考えてみようと思います。

クレジットカードの支払いプロセスのステップ

とりあえず以下のようなフローなのではないかというのは

  • 顧客はPOS端末でカードをスワイプします。
  • POS端末は取引情報を取得銀行に送信します。
  • 取得銀行は認証リクエストをカードネットワークに送信します。
  • カードネットワークは認証リクエストを発行銀行に転送します。
  • 発行銀行は認証結果をカードネットワークに返します。
  • カードネットワークは認証結果を取得銀行に返します。
  • 最後に、取得銀行は認証結果をPOS端末に表示します。

図にするとこんな感じ。

自分でもし実装とかするとなると認証フローと決済フローの大きく2つに分けることができそう。

まずは認証フローから。

認証フロー

カードの読み取り

物理的な読み取りをしているのはなんとなくわかると思います。その際、カードは磁気ストライプ、チップ(EMV)、またはNFCを使用して読み取られます。


磁気ストライプ
カードの裏面にある磁気ストライプには、カードの情報(カード番号、有効期限、カード保持者の名前など)がエンコードされています。

チップ(EMV)
カードの表面にある小さな金属のチップ。これは、カード情報をより安全に保存・伝送するためのものです。

NFC
近接無線通信を使用してカード情報を伝送する方法。スマートフォンのモバイル決済や、タッチレスカードで使用されます。

取引情報の生成・送信

POS端末は、読み取ったカード情報(カード番号、有効期限、カード保持者の名前など)と購入金額を組み合わせて、取引情報を生成します。この取引情報は、通常、以下のような形式で生成されます。

{
  "card_number": "1234-5678-9012-3456",
  "expiry_date": "12/23",
  "cardholder_name": "TANAKA TARO",
  "purchase_amount": "¥5,000",
  "merchant_id": "M123456789",
  "timestamp": "1990-01-01 14:30:00"
}
暗号化

取引情報は送信前に暗号化されます。暗号化には以下のような主な方法があります:

対称暗号化
強み: 高速で、リアルタイムのデータ暗号化に適しています。
弱み: 同じ鍵を暗号化と復号化の両方で使用するため、鍵の管理が難しい。
例: AES (Advanced Encryption Standard)

非対称暗号化
強み: 公開鍵と秘密鍵のペアを使用するため、安全性が高い。
弱み: 対称暗号化よりも遅い。
例: RSA (Rivest–Shamir–Adleman)

ハイブリッド暗号化
対称暗号化と非対称暗号化の組み合わせを使用。
通常、データの暗号化には対称暗号化を、鍵の交換には非対称暗号化を使用します。

安全な通信

取引情報を安全に送信するために以下の手段が取られます。

SSL/TLS
サーバーとクライアント間の通信を暗号化するプロトコル。これにより、中間者攻撃やデータの傍受を防ぐことができます。

セキュアなAPIエンドポイント
HTTPSを使用して、データの送受信を行います。

認証
APIキーやトークンを使用して、送信元の正当性を確認します。

認証リクエストの生成・送信

認証リクエストの生成は、以下の手順で行われます

1 取引情報の確認
取得銀行は、受け取った取引情報を確認します。これには、カード情報、購入金額、商人IDなどが含まれます。

2 認証リクエストの形式
取得銀行は、認証リクエストを生成するための特定の形式やテンプレートを使用します。このリクエストには、カード情報、取引金額、商人ID、タイムスタンプなどの情報が含まれます。

3 リクエストの暗号化
認証リクエストは、送信前に暗号化されます。これによりリクエストの内容が外部の攻撃者によって読み取られることを防ぐことができます。

4 カードネットワークへの送信
暗号化された認証リクエストは、カードネットワーク(VISA、Mastercardなど)に送信されます。カードネットワークは、このリクエストを適切な発行銀行に転送します。

カードネットワークを通じた認証リクエストの転送

リクエストの受信
カードネットワーク(VISA、Mastercard、JCBなど)は、取得銀行からの認証リクエストを受信します。

リクエストの解析
カードネットワークは、リクエストの内容を解析して、どの発行銀行が該当するカードを発行したかを特定します。これは、カード番号の最初の6桁(BIN:Bank Identification Number)を使用して行われます。

リクエストの転送
カードネットワークは、特定された発行銀行に認証リクエストを転送します。この転送は、高速かつセキュアなネットワークを通じて行われます。

認証の実行


リクエストの受信
発行銀行は、カードネットワークからの認証リクエストを受信します。

カード情報の確認
発行銀行は、リクエストに含まれるカード情報(カード番号、有効期限など)を確認し、データベース内の情報と照合します。

セキュリティチェック
発行銀行は、不正利用のリスクを評価するためのセキュリティチェックを実施します。これには、カードの利用履歴、取引の地理的位置、取引金額などの情報が考慮されます。

認証結果の生成
発行銀行は、上記の確認とチェックの結果に基づいて、認証結果を生成します。この結果は、承認(Approved)または拒否(Declined)のいずれかとなります。

結果の送信
発行銀行は、生成された認証結果をカードネットワークを通じて取得銀行に送信します。

まとめ

クレジットカード取引の背後には高度な技術とセキュリティが必要です。

以下のポイントは、技術面接や仕事の現場での考え方として重要になってきます。

データの取り扱い
カード取引では、機密性の高いデータを扱います。このデータの取り扱いには、最適化されたプロトコルやエンドツーエンドの暗号化などの技術が必要です。

セキュリティの重要性
カード取引のセキュリティは、侵入検知システムや定期的なセキュリティ監査など、多層的なアプローチで確保されています。技術者として、常に最新のセキュリティ基準に準拠し、データの保護を最優先に考える必要があります。

高速性と効率性
カード取引はリアルタイムで行われるため、高速性と効率性が求められます。データセンターの最適化や専用のインフラストラクチャの利用など、技術的な最適化が不可欠です。

問題解決のスキル
カード取引のプロセスには、多くのステップと要因が関与しています。技術者として、問題が発生した際に迅速かつ効果的に問題を特定し、解決する能力が求められます。

継続的な学習
カード取引の技術やセキュリティ基準は、常に進化しています。技術者として、最新の技術トレンドやセキュリティリスクに常に目を光らせ、継続的に学習する姿勢が重要です。

技術面接でアーキテクチャなどの質問があると思います。

その際にも多分使えるのではないかなと思うので、今後もこうやってまとめていきたい。