エンジニアの佐野です。カンムはカード決済のサービスを提供しています。カード決済にはいくつかの決済手段があり、マグストライプ、IC、IC非接触(俗に言うタッチ決済)、オンライン決済などの機能が提供可能です。iD のようなスマートデバイスにカード情報を入れてスマホでタッチ決済する仕組みもあります。カンムのプロダクトであるバンドルカードはマグストライプとオンライン決済、Pool はマグストライプとオンライン決済に加えて IC接触決済、IC非接触決済(タッチ決済)を提供しています。今日はセキュリティ的な観点から各種決済手段の特徴や問題点とともに、主に IC 決済の仕組みについて小ネタを交えつつ書いていこうと思います。カンムが提供しているカードは Visa カードでありクローズドな仕様や confidential なものについては言及することはできませんが、公開仕様であったり一般的な事柄のみを用いてなるべくわかりやすく書いていこうと思います。カード決済の仕組みや仕様は膨大であり一知半解な部分もありますので、もしそのような記述を見つけた場合はコメントいただけると幸いです。
- 前提知識
- マグストライプの問題点と対策
- オンライン決済の問題点と対策
- ICチップの統一規格EMVの登場
- ICチップ決済の処理フロー
- ICチップ決済(タッチ決済)のフロー
- まとめ
1. 前提知識
記事を読んでもらうための前提知識を書きます。カード決済の技術を説明するには決済周りの知識なしには説明が難しいところがあります。読者はまずは以下の点を抑えてください。
- 業界構造
- オーソリゼーション / オーソリ / Authorization
- カードに入っている情報
1.1 業界構造
次の図はカード決済の仕組みを説明する際に私がよく出している図です。ブランド、加盟店/アクワイアラ、イシュア、ユーザが登場人物として存在します。ブランドがこの業界の中心にいてプラットフォームとルールの策定をしています。両サイドにアクワイアラとイシュアがいます。アクワイアラはブランドの名前を担いで店舗に「(Visa/Mastercard/JCB...)カード決済できるようにしませんか?」とカードを使える場所を増やすプレイヤーです。ユーザはあまりアクワイアラの存在を意識することがないかもしれません。ユーザはカード会社(イシュア)にカード発行を依頼し、発行が完了するとそのカードが使えるようになります。
まとめると、プラットフォームとルールを提供するブランド、カードを使える場所を増やすアクワイアラ、カードを使う人を増やすイシュア、カードを使うユーザ、が存在していてそこでお金がぐるぐる回るのがこの業界のエコシステムです。
1.2 オーソリゼーション / オーソリ / Authorization
似たような図ですがオーソリという言葉を覚えておいてください。これは実店舗、オンラインショップ関わらず、カードを使ったときにイシュアに飛んでくる電文です。カードのデータ、利用金額、店舗や使われた端末の情報などが入っていて、イシュアはそのデータを見て購入可否を判断して店舗に応答を返します。
1.3 カードに入っている情報
バンドルカードとPoolを例に説明します。
https://kanmu.co.jp/news/20190509-newdesign/
https://pool-card.jp/creditcard/
(1) マグストライプ / 磁気ストライプ
Track データと呼ばれるデータが記録されています。Track データには PAN(カード番号のこと), 有効期限, セキュリティコード(CVV: Card Verificaiton Value。カード裏面の物とは別物。)... といった情報が入っています。Track データの仕様やフォーマットは公開されています(ref: ISO/IEC 7813 - Wikipedia)
(2) 署名
直筆のサイン。店舗で決済をした際に求められるサインと同じもの。
(3) カードホルダ名
ネット決済で入力するものはこちら。アルファベットの姓名。豆知識ですが Dr. のような敬称を入れることも可能です。
(4) PAN (Primary Account Number) / 会員番号
カード番号のことです。 業界内では PAN (パン)と呼ばれます。fPAN (Funding Primary Account Number) と呼ぶビジネスパートナーもいますが、付き合いのある会社では PAN という呼称が主流です。
(5) 有効期限
カードの有効期限です。これも豆知識ですが有効期限とは別に effective date (いつから使えるか?)という概念も存在します。
(6) セキュリティコード / CVV2
3桁の数字。ネット決済で入力を求められるものです。たまにこのカード裏面のセキュリティコードを CVV と説明しているサイトがありますが正式名称は CVV2 です。CVV はマグストライプに埋め込まれているものでこれとは別物になります。マグに記録されたセキュリティコード CVV の方はユーザが意識することはないので、対ユーザ向けにセキュリティコードと言うとこちらのカード裏面のものを指すのが一般的です。ビジネスパートナー間では CVV と CVV2 を言い間違えると認識齟齬に繋がったりします。また Visa ブランドでは CVV ですが Mastercard ブランドでは同様のものは CVC と呼ばれたりします。
(7) IC チップ
さて IC チップです。カンムでは Pool の方には搭載されています。ICチップには何が入っているか?ですが、まずはマグストライプと同様に Track データが入っています。こちらにも3桁のセキュリティコードが入っているのですがこちらは iCVV と呼ばれています。これの値もまた CVV, CVV2 とは別です。ややこしいですね。加えて IC チップには PIN (4桁の暗証番号)、 証明書、暗号鍵... などマグにはないデータ、さらに ATC (Application Transaction Counter)という決済回数を記録するカウンタ, PIN入力失敗回数を記録するカウンタ, その他大量の設定が入っています。
その他大量の設定というのは、例えばですが、話が一瞬店頭のカード端末の方に移るのですが、店頭のカード端末にはフロアリミットといって利用可能金額の上限値のような設定が入っていたりします。ICチップにはそれを超過した利用金額だった場合どうするか?というような設定があります。設定値はイシュアが IC チップを作る際に決定していて、前述の例の場合、決済拒否する?そのままイシュアにオーソリを投げる?というような挙動が決められています。他にも CVN (Cryptogram Version Number)と呼ばれる IC を使った決済の時にオーソリとともにイシュアに飛んでくるクリプトグラム(後述: オーソリの正当性を検証するために使う暗号文のようなものです)のバージョンを示す物など、普段カードユーザが意識することはないシステム的な情報も含まれます。
豆ですが PIN は4桁の暗証番号と書きましたが4桁以上にすることも仕様上は可能だったりします。また ICチップでの決済を行った際に加算されるカウンター、ATC の存在を書きましたがこれは2バイトのキャパシティがあり上限は 0xFFFF = 65535 です。つまりタッチ決済を含むICチップ決済を65535回以上行うとこのカウンタの上限を突破します。これを超えるとたぶんそのカードでの IC 決済は不可能になります。カードの有効期限を5年とした場合、IC を使った決済を毎日36回やり続けると5年以内にこれに到達する計算になります。
ATC はカード利用控えに印字されることもあります。次のカード利用控えに記載されている ATC 003E は 0x3E = 62 回目の IC 決済であることを示しています。16進数ではなく10進数で印字される場合もあります。
内部仕様をずけずけと書いて大丈夫か?と思うかも知れませんが、これらはカンム独自の仕様でもビジネスパートナーの仕様でもなく後述する EMV という公開された業界統一仕様です。
(8) ICチップが非接触決済 (タッチ)対応しているという意味のマーク
これは人間のためのマークです。ここに何かのデータが入っているわけではないです。
私の推測を含めた小ネタですが、カード端末側の話になってしまうのですが、端末にもこのマークがついていたりします。以前 Twitter で決済端末にこのマークがついているのに店員がタッチ決済させてくれなかった、というぼやきを見たことがあります。端末の方だとこのマークがついているのはハードウェアが非接触インターフェイスを備えているという意味であって、ソフトウェアであったり店舗側の業務も対応しているかは別問題です。なのでそのような場合は単純に店員が知らなかった可能性ももちろんありますが、業務が対応できていないという可能性も十分にあります。
2. マグストライプの問題点と対策
最も古典的なカード決済手段であるマグストライプの問題点とその対策について書きます。
マグストライプを使った決済はカードの磁気部分をカード端末にスワイプしてそのデータを読み取ります。ここの部分には Track データと呼ばれる PAN や有効期限が刻まれたデータが入っていることは述べました。これが端末から読み取られてイシュアに決済金額などとともにオーソリとして飛んできます。イシュアはカードが有効期限を超過していないか?CVVが正しいか?金額が利用可能枠内に収まっているかなどをチェックして問題なければ商品の購入ができます。
ここで主にセキュリティの面からみた問題点は次の2つになります。
本人確認が店員の裁量に任されているという点
マグストライプを使った決済の本人確認はどうしているのでしょうか?「サイン」です。そして店員はそのサインがカード裏面の署名と一致しているかどうかを目視で確認します。マグストライプはカード決済の中では最も古い決済手段で歴史を考えれば仕方がないことなのかもしれませんが、今の時代からすると一驚の本人確認方法になります。マグストライプ決済の仕組み上、イシュアはオーソリ時の本人確認プロセスに参加することができません。また、図中ではサインによる本人確認をしてからオーソリという形で書きましたが店頭のオペによってはオーソリを飛ばしてから事後にサインを求めるケースもあるかもしれません。
マグストライプにはセキュリティコード CVV が刻まれています。これは磁気データを偽装したとしても CVV が不一致であれば偽物されたカードであるという判定をすることに役立ちます。磁気カードは簡単に作れることに加えて Track データの配列も公開されています。そのため適当な PAN や盗んだ PAN を磁気データに入れたカードは比較的簡単に作ることができてしまいますが CVV でその正当性を確認するという仕組みです。
しかしいわゆるスキミングはどうでしょうか。マグストライプの Trackデータは平文がそのまま入っているため適当なカードリーダで読み取ると CVV を含めマグストライプのデータすべてをキャプチャすることができます。かなり昔からスキミング被害はカード業界やユーザを悩ませる種として存在しています。PCに接続できるカードリーダーも安価に手に入れることができるため今でもポピュラーな脅威として存在しています。もしそのようなデバイスを持っている方で興味がある人は試してみてください。カードリーダを PC に接続して外付けキーボードとして認識させてからマグをスワイプするとキーイベントが上がってきます。Linux であれば linux/input.h を利用してキーイベントを拾えるのでご自身の持っているカードのマグに何が入っているかを見ることができます。このようにマグストライプは非常に単純です*1。
脅威は盗難、スキミングです。ユーザができる対策としては盗難の被害にあったらスマホから即座に利用停止にできるようなカードを使うことくらいでしょうか。またスキミングされて突如高額の請求が来てしまった場合はすぐにカード会社に身に覚えのない決済の申告をすることです。カード会社の裁量や、カード会社と不正利用のあった加盟店間で行われる業務プロセス(チャージバックと呼ぶ)の状況にも依りますが全額返ってくることもあります。イシュア、加盟店といったサービス提供側ができる対策としては PIN 入力ありの IC 決済をなるべく使ってもらうことです。
イシュアが単独でできる対策としては決済トランザクションの異常検知があります。金額的、地理的、時間的な不自然さをモニタリングすることで不正防止につなげることができます。例えば日本の実店舗で1000円の決済トランザクションが発生した10分後に同様のカードでアメリカの実店舗で10ドルの決済トランザクションが発生したら不自然である、というような。
3. オンライン決済の問題点と対策
オンライン決済についても同様に書きます。こちらはオンラインショップのサイトに PAN, 有効期限, CVV2 を手入力して決済を行います。マグストライプが Track データや決済金額をオーソリに乗って飛んでくるのと同様、こちらは手入力されたデータがオーソリに乗って飛んできます。本人確認は強いて言うなら CVV2 の入力でしょうか。セキュリティコードの用途はあくまでカードの正当性だと自分は理解しています。なので図中には本人確認という文言は入れておりません。
ここで問題点は次の通り。
カード番号にはある程度の法則性があり、また有効期限は4桁の数字、CVV2 は3桁の数字なので単純なブルートフォース攻撃で不正被害を受けることがあります。これはクレジットマスター攻撃と呼ばれていてポピュラーな不正手段です。店頭で人力で決済を行うのではなくウェブで行うことができるのでちょっとパソコンに詳しい攻撃者がプログラマブルに不正を仕掛けることもできます。
カード番号、有効期限、CVV2 といったカード両面の情報を記憶されると不正利用ができてしまう点
ブルートフォース攻撃以前にそもそも他人にカード番号と有効期限とCVV2を記憶されてしまうとそれだけで不正利用されてしまいます。記憶力という武器を使った次のような事件も起きています。
www.gizmodo.jp
ユーザ、イシュア、加盟店それぞれが行うべき対策としては、決済時にワンタイムパスワードを使うようにする、3D セキュアに対応する、などがあります。ユーザ、イシュア、加盟店それぞれと書いたのは、これらの対策はまずイシュア・加盟店双方が対応している必要があるというのと、ユーザがカード発行時やその後の設定、ECサイトでの設定でワンタイムパスワードを使うというような設定があった場合、それらを有効にしておく必要があり、サービス提供側、ユーザ側それぞれ合わせ技の対策を講じておく必要があるためです。
バンドルカードと Pool はともに 3D セキュアに対応しています。そちらの詳細は https://tech.kanmu.co.jp/entry/2022/06/27/135210 をご覧ください。3D セキュアは簡単に言うと、オンライン決済で購入ボタンを押下したあとにカード会社からカードを発行する際に設定したパスワードや、登録した電話番号に SMS が飛んできてそれを入力してその認証が通れば本丸の決済に進むことができるような仕組みです。ちなみに3Dセキュアも正確に言うと EMV 3Dセキュアと呼ばれ、後述する統一された業界仕様になります。
加えてですが、イシュア単独でできる対策も存在しています。例えばマグストライプ同様に決済トランザクションの異常検知やモニタリング、CVV2 や有効期限を連続で何回か間違えたらロックをかけるなどです。
4. ICチップの統一規格EMVの登場
ここで IC チップの登場です。現在、ほとんどのカード会社において IC チップは標準的に搭載されるようになっています。ICチップの目的の1つはマグストライプの欠点を埋める、つまりセキュリティの強化です。サインのみで本人確認がされていたのに対し、IC 使用時は4桁の暗証番号(PIN)の入力が必要になります。手書きのサイン+店員による目視確認と比べるとより確実な本人確認となります。
その IC チップですが各ブランドやカード会社が独自に開発しているわけではありません。EMV と呼ばれる統一規格をもとに開発をしています。この規格は Europay International, Mastercard, Visa が共同で策定したためその頭文字をとって EMV と呼ばれています。ICチップ搭載のカードはEMV対応カードと呼ばれたりもします。「1.2 カードに入っている情報」で少し触れた ATC, CVN や PIN の誤り回数のカウンタなどの仕様は EMV で決められています。おそらく Mastercard や JCB ブランドのカードの IC チップにも同じようなものが入っているでしょう。EMV の仕様書は次のサイトからダウンロードすることができます。
www.emvco.com
5. ICチップ決済の処理フロー
ICチップを使った決済の処理フローは次の通りです。先述のマグストライプ、オンライン決済と比べると少し複雑になっています。図は EMV のドキュメントから拝借しています。
EMV 4.3 Book 3 Application Specification
まずカードをカード端末に挿します。するとカード端末が IC の情報を読み出し -> Data Authentication (カードの正当性の確認) -> Cardholder Verification (本人認証: PIN の入力など) -> 後のフェーズの挙動を決定する処理(Terminal Risk Management, Terminal Action Analysis, Card Action Analysis) -> 必要であれば Online Processing & Issuer Authentication (取引認証: オーソリの正当性の確認とオーソリ自体の処理)と Script Processing を行う -> 買い物OK/NG という流れとなります。
もう少しわかりやすく本記事の趣旨になる部分のみを強調して書くとこうなります。
5.1 Data Authentication カード認証
Data Authentication は我々はカード認証と呼んでいます(正確にいうとカード認証の一部ですが...)。これは何かというと IC に仕込まれた証明書をカード端末が検証するフェーズです。マグストライプではCVV を利用して偽装防止を行いますが、IC では証明書の検証によって IC が偽装されていないかをチェックします。仕様のポイントとしてはここで検証 NG になってもエラーになるとは限らないという点です。IC に入っている設定の1つとして、もし Data Authentication でNGになったらどうするのか?という設定があります。この設定によって Data Authentication がNG の場合にそのまま次のフェーズに進むのか?NGとして拒否するのか?が決まっています。次のフェーズに進む、にしてある場合、最終的には Online Processing & Issuer Authentication のフェーズでオーソリに Data Authentication の結果が入ってくるのでイシュアはそれをちゃんと見てOK/NGを判断する必要があります。
5.2 Cardholder Verification 本人認証
続いて Cardholder Verification 、つまり本人認証です。PINを入力するのが主流ですが、IC や 端末の設定であったり店員のオペであったりによりこれは可変します。たとえば IC を挿入したけどレシートやタブレットにサインを書き、結局はサインによる本人確認が行われるケースもあります。皆様も経験があるかもしれません。
また、逆に例えば普段コンビニでカードを使うと PIN を求められることはあまりないと思いますが、ためしに高額の買い物(たしか合計10000円以上)をしてみてください。ICチップかつPIN入力必須の処理に移行すると思います。状況によって求められる本人認証方法が変わるのがこのフェーズの特徴です。
PIN 入力の場合、ユーザが PIN を入力してそれが照合されると本人確認がOKとなり次のフェーズに進みます。ちなみに PIN の照合ですが、場合によってはイシュアに PIN が飛んできてそれの照合をイシュアが行うケースもあります(オンラインPINと呼ぶ)。オンラインPIN の場合は次の Issuer Authentication のフェーズでオーソリとともに暗号化されたPINが飛んでくるのでそれを復号してユーザがカード発行時に設定したPINと一致しているかを確認する必要があります。
5.3 Issuer Authentication 取引認証
最後は Online Processing & Issuer Authentication です。オーソリ自体の処理(利用枠内の決済金額か?有効期限は過ぎていないか?etc)に加えて、オーソリの正当性を検証するフェーズです。IC には証明書や各種設定が入っている旨述べましたが、カード固有の鍵もいくつか入れてあります。このフェーズではそのうちの鍵の1つである ICC Master Key と呼ばれるものを利用して、端末の情報とICの情報、買い物金額などの情報から ARQC (Authorization Request Cryptogram)と呼ばれるクリプトグラムが生成されます、この生成には 3DES などの一般的な暗号化アルゴリズムが用いられます。AES ではなく 3DES というのが気になる点ですが、秘匿化するために暗号化を施しているというよりはクリプトグラムを生成する過程で暗号化アルゴリズムを利用しているので問題はないかもしれません。
イシュアはオーソリとともに飛んできた ARQC を検証し、オーソリ自体が改ざんされていないかのチェックを行います。イシュア側での検証は、イシュア側でも ICC Master Key を使って同様のアルゴリズムで ARQC の生成を行いそれの照合を行う形となります。こちらのアルゴリズムについても EMV の仕様書に詳細が書かれているので興味がある方は追ってみてください。
5.4 その他の処理
Terminal Risk Management, Terminal Action Analysis, Card Action Analysis, Script Processing についても少し触れておきます。Terminal Risk Management, Terminal Action Analysis, Card Action Analysis は購入金額であったり、端末に挿入されたカードのICチップの設定や決済の履歴(前回の決済のOK/NG結果は記録されているはず)、Data Authentication の結果がどうだったか、などを総合してそこでなんらかの制限をかけたり、 Online / Offline Decision の分岐を決めるようなフェーズです。Online / Offline Decision の分岐で Offline となった場合はオーソリがイシュアに飛んでこないケースもあると思われます。カンムの IC の設定は必ずオーソリをオンラインに飛ばす設定で作ってありますがオフラインで完結するケースも例外としてあります。オフラインで完結した場合、後日飛んでくる実売り上げ (https://tech.kanmu.co.jp/entry/2021/06/29/131649 の「1.2. オーソリとクリアリング」参照)で決済金額が確定します。
Script Processing ですが、カンムのカードにはその仕組みを入れていないのであまり詳しく調べていないのですが、イシュア側から IC チップのデータを操作するような仕組みです。PIN入力失敗回数を記録するカウンタが IC に入っていることは述べました。PIN 入力を連続で間違えるとカウントアップしていき、それが閾値(これも IC に入ってます)を超えるとICチップの利用が制限されます。閾値に到達する前に正しい PIN が入力されるといったんリセットされるのですが、閾値に到達してしまい制限がかかってしまった場合はどうやってリセットするのでしょうか?ここで登場するのが Script Processing のフェーズで実行される Issuer Script という仕組みです。これを使うと PIN 入力失敗回数が上限に達した場合もそれをリセットすることができます。カンムのカードは実装していないので、連続で間違えるとカードが使えなくなり再発行する流れになります。推測ですが、おそらく多くのカード会社はこれを実装していないと思います。他社のカードについて調べると、PIN を複数回連続で間違えてロックがかかった場合は再発行します、と書かれている会社が多いので。
6. タッチ決済の処理フロー
タッチ決済のフローですが「5. ICチップ決済の処理フロー」のフロー図とほぼ同じで、ここから本人認証をスキップしたものがタッチ決済のフローになるイメージです。ただ正確にいうと Cardholder Verification は行われるため、リスク分析の結果として PIN ありの IC に移行する可能性もあります。セキュリティの向上のために IC チップ搭載のカードが登場したが今度は利便性のためにPIN入力をスキップしたタッチ決済が後から登場するのがおもしろいところです。
7. まとめ
- 各種決済手段のセキュリティ的な問題点とその対策について説明した。
- マグストライプは本人確認がサインの目視確認という点で弱く、スキミングの脅威もある。
- オンライン決済は本人確認がなく、強いて言うなら CVV2 の入力だが、ブルートフォース攻撃に弱く、カード券面を見られてそれを記憶されてしまうと不正利用できてしまう。
- 対策方法は存在しているがイシュア側や加盟店側の対策に加えてユーザ自身も不正利用のリスクを意識する必要がある。
- IC はマグストライプの弱点であるセキュリティ面の強化がされていて、カード認証、本人認証、取引認証という概念がある。カード認証によりチップの改ざん検知を、本人認証にPINが使えることによりサインよりも強力な本人確認を、取引認証でオーソリの完全性を担保することができる。
最後はお約束のこちら↓になります。個人的には今は泥臭い不正対策で頑張っているのでそこをリッチにしていきたいと思っています。それをやりたいような人に来てもらえると嬉しいです。マグストライプのセキュリティの弱さを埋めるために IC が登場しましたがこちらにももちろん穴はあり、また不正利用のトレンドや手段は年々変わるのでイシュアとして常にそれをモニタリングして防御する必要があり、そこもやっていきたいです。
kanmu.co.jp
おわり