Android Pay APIをコールして、最後に得られるクレジットカード会社に請求する情報が記載されているPayment Method Token(FullWalletの内部で保持しているPaymentMethodTokenインスタンス)について調査したので纏めます。

これ自体はセキュアな情報のため暗号化されています。その暗号化時の鍵となるのが、MaskedWallet取得時に設定した公開鍵とGoogleで管理している公開鍵から生成した共通鍵となります。

Payment Method Tokenは以下の3要素を持つJSONとなります。
要素名値の概要
encryptedMessage文字列(base64エンコード済)暗号化されたクレジットカード情報
詳細はこちらを参照
ephemeralPublicKey文字列(base64エンコード済)共通鍵を生成する際に使用したGoogle管理のキーペアの公開鍵
これとデバイスで管理しているキーペアの秘密鍵から復号化用の共通鍵を生成
tagencryptedMessageのMAC値文字列(base64エンコード済)

encryptedMessageを復号化することで得られるJSONの構成
要素名値の概要備考
dpan文字列(数字のみ)クレジットカードの番号-
expirationMonth数字クレジットカードの期限(月)-
expirationYear数字クレジットカードの期限(年)-
authMethod文字列"3DS"固定将来的には変更される可能性有
3dsCryptogram文字列3Dセキュア用の暗号化文字列詳しい情報なし
3dsEciIndicator文字列3Dセキュア用のECIインディケータ詳しい情報なし

このクレジットカード情報を用いて、清算することになるようです。
なお、デバイス管理のキーペア(秘密鍵)とGoogleサーバ管理のキーペア(公開鍵)から、復号化用の共通鍵を作成する方法は、こちらのコード(Example: Token decryption)を参照するとよいかと。

参考文献:
https://developers.google.com/android-pay/integration/payment-token-cryptography

コメントの投稿