技術記事
EMV向け開発、パート II
過去の 本記事のパート Iでは、EMVトランザクションとその構造について少し説明しました。確認した内容は以下のとおりです。
- MSR(磁気ストライプ)トランザクションとは異なり、EMVトランザクションは複数のステージで実行されます。
- ICカードとリーダー間のやり取りの大部分は、 カーネル レベルで行われ、アプリケーションロジックの制御の外側で発生します。
- トランザクション結果はTLV(「タグ」)として返されます。
- ある クリプトグラム (カードのみが知る秘密鍵を使ってカードが生成する、8バイトの一意なデータ)は、トランザクションのCompletionステージの前に生成されます。さらに2つ目のクリプトグラムは、トランザクション完了の呼び出しの 後 に生成されます。
- クリプトグラムは、タグ9F26(ID TECH独自タグではなく、EMVCoが定義したタグ)にてカードから返されます。
一般的には、1つ目のクリプトグラム(およびバックエンドプロセッサーが必要とするその他のTLVデータ)をパッケージ化し、リアルタイムで通信回線経由でプロセッサーに送信して、認証コード(タグ89)を取得してから、Completionフェーズを開始する呼び出しを行います。オンラインの認証リクエストの実行は、お客様の責任で行う必要があります(リーダーも当社のSDKもこの部分は処理しません)。ゲートウェイのウェブAPIを使用してください。ほとんどのゲートウェイは、この部分を簡単にするための独自のSDKを提供しています。
ゲートウェイ(または「バックエンドプロセッサー」)は、認証リクエストに対してタグ89、8A、91、および(オプションで)71または72を返します。トランザクションを完了するには、これらのTLVをUniversal SDKの emv_completeTransaction() メソッドに渡します。コードはコールバックを通じて結果が通知されます。コールバックでは、TLVのグループを含むトランザクションデータへのハンドルを取得できます。これらのTLVの中に、上述の2つ目かつ最終のクリプトグラムが含まれます。これも、タグ9F26に格納されています。
クリプトグラムの種類
タグ9F26で返されるクリプトグラムは不透明です。直接調べても、それがどのような種類のクリプトグラムなのかを判別できません。ただし、9F26とともに返されるタグ9F27を調べることで、どの種類のクリプトグラムを取得したのか判別できます。9F27の上位ニブルに必要な情報が含まれます。各ビットは以下のように解読できます(この情報の出典は EMV Book 3):
一般的に、9F27の値(16進数)は80、40、または00となり、それぞれARQC、TC、AACに対応します。これらは順に、「オンライン要求」、「承認」、「拒否」を意味します。
重要な点として、これらの値はあくまでもカードからの アドバイスを表すものに過ぎないことを理解する必要があります。このアドバイスが必ずしも拘束力を持つとは限りません。例えば、最初のクリプトグラムがARQCであったにもかかわらず、決済アプリがオンラインに接続できなかった場合、カードは2つ目のクリプトグラム(Completion時)でAACを返すことが 必須 となっています。この場合のAACは、自動的にトランザクションが拒否されたことを意味するわけではありません。その判断はオンラインの認証機関(最終的にはイシュアー)に委ねられます。Quick Chip(またはFaster EMV)として知られる特別なEMVシナリオでは、オンラインリクエストが後で発生するため、 常に AACが返されます。これで問題ありません。引き続きトランザクションを決済処理に送信できます。カードのアドバイスはあくまで アドバイスです。最終的な判断はオンライン認証機関が下します。
米国(オンライン専用市場とみなされます)では、最初のクリプトグラムでほぼ常にARQCが返される点に注意してください。例外となるのは、カードが期限切れである場合や、トランザクションを直接的に拒否する必要がある何らかの理由がある場合で、その場合は(理論上)最初の「Gen AC」リクエスト後にAACが返されることがあります。
TLVデータの取得
Universal SDKは、USB、RS-232、Bluetooth、オーディオジャック、またはイーサネット(リーダーの種類に応じて)を介してID TECHリーダーとの通信を代行します。このSDKでは、リーダーとのトランザクション関連の通信はすべて非同期で行われます。つまり、リーダーから「応答を受け取る」ためには、1つ以上のカスタムコールバックルーチンをSDKに登録する必要があります。その手順は、SDKドキュメントだけでなく、SDKに付属するサンプルコードにも記載されています。コールバックの使用に難しいことは何もありません。SDKのサンプルコードを少し時間をかけて学習し、フローを把握することをおすすめします。
重要なポイントは、EMVトランザクションがフェーズ単位で実行され、各フェーズの終了時に異なるTLVが返されるということです。よくある誤解として、Completionフェーズの終了時に、必要なすべてのタグが一度に取得できると考えてしまうことが挙げられます。それは正しくありません。 各 フェーズでTLVを収集する必要があります。
各フェーズで取得できるタグはどれでしょうか?トランザクションのフェーズ別に、典型的なタグを以下に示します。
Start Transaction:
4F
50
57
5A
5F20
5F24
5F25
5F2D
5F34
84
9F20
DFEE12
DFEE23
取引の認証:
95
9B
9F02
9F03
9F10
9F13
9F26
9F27
9F34
9F36
9F37
9F4D
9F4F
取引の完了:
95
99
9B
9F02
9F03
9F10
9F13
9F26
9F27
9F34
9F36
9F37
9F4D
9F4F
9F5B
これらのほぼすべては、業界標準で定義されたEMVCoタグです。「DF」で始まるものはID TECH独自のタグです。ID TECH独自タグとその意味の完全な一覧については、ドキュメント80000503-001をご参照ください。 ID TECH TLVタグリファレンスガイドは、当社の以下のサイトからダウンロードいただけます。 ナレッジベース.
必要なタグが見当たりませんか?ご心配なく。Universal SDKを使用すれば、取引時に追加のタグをリクエストできます。具体的な方法は、SDKのドキュメントだけでなく、当社のホワイトペーパーにも記載されています。 Universal SDKを使用したEMV取引.
どのタグが暗号化されますか?
リーダーに鍵が注入され、暗号化が有効になっている場合、機密データを含むタグの内容は暗号化されます。これには当然、トラックデータを含むタグ(タグ57など)やPANデータ(5A)も含まれます。暗号化されるタグの完全なリストは、以下をご参照ください。 ドキュメント80000502-001-F、 ID TECH暗号化データ出力。デモ用ユニット(デモ鍵が注入されたもの)を使用している場合は、当社の以下のツールを使用して手動でデータを復号できます。 オンラインツール。ただし一般的には、データはそのまま処理業者に渡されるため、本番環境のコードでご自身でデータを復号する必要はないはずです。 本番 コードでは、データを処理業者にそのまま渡すため、ご自身で復号する必要はありません。
暗号化は大きなテーマです。ここではこれ以上詳しく触れませんが、関心がある方は、以下の過去記事を是非ご覧ください。 過去の投稿 について。
ご質問はありますか?
ここまでお読みいただき、さまざまな疑問が浮かんでいることでしょう。ご心配なく!当社では、こちらで多数の無料リソースをご用意しています。 ナレッジベースそれでも疑問が解決しない場合は、当社の技術担当者がお電話一本で対応いたします。
