#7 ICカード決済のオフラインデータ認証〜SDA・DDA・CDAの話〜
はじめに
「#6 クレジットカード決済の国際標準仕様」でEMV仕様の全体像を説明しましたが、今回はその中の「Offline Data Authentication(オフラインデータ認証)」について書こうと思います。
オフラインデータ認証は決済時にICカードと決済端末の間で実施する認証で、IC取引の全体像を理解する上で理解しておくべき処理となります。
オフラインデータ認証(ODA)とは
オフラインデータ認証(Offline Data Authentication)はカードと端末の間で「カードが改ざんされたものではないか?」を確認するための公開鍵暗号方式の認証となります。EMV仕様における代表的なIC鍵にはRSA鍵(公開鍵暗号方式)とDES鍵(共通鍵暗号方式)がありますが、
・「オフラインデータ認証(Offline Data Authentication)」はRSA
・「オーソリ時のクリプトグラム検証(Online CAM)」はDES
と覚えておきましょう。
オフラインデータ認証で使用するRSA鍵を「イシュア公開鍵証明書(IPKC:Issuer Public Key Certificate)」と言います。イシュア公開鍵証明書は「この長さの鍵を何年まで使っていいよ」という鍵長と有効期限をEMVCoが決めています。現在は1,984bitの鍵を2032年まで使っていいよみたいになっていて、世の中のリスク動向を見て年次アセスメントにより延長可否を決定しています。そして国際ブランドはこの決定をもとにイシュア公開鍵証明書の有効期限ルールや推奨を決定しています。イシュア公開鍵証明書の使われ方は次セクションで説明します。
また、もう一つの代表的なIC鍵のDES鍵は今後書こうと思いますが、ブランド毎に名称は異なりVisaだとMDK、MastercardだとIMKと呼ばれ、これを使って生成するクリプトグラムのことをARQCと言ったりするのがキーワードです。
※以下に書きました
ODAの方式(SDA・DDA・CDA)
EMVにおけるオフラインデータ認証方式はSDA、DDA、CDAの3つですが、現在は基本的にはSDAは使われておらず、DDAもしくはCDAとなります。国際ブランドによってCDAを必須化していたり、DDAを推奨していたりします。
ICカード、決済端末それぞれに自分がどの認証方式に対応しているか?の情報を保有していて、 CDA>DDA>SDAの順で合致した認証を実施することになります。
以下にそれぞれの方式の概要を記載しますが、SDAが静的データ(固定されたデータ)、DDAが動的データ(取引ごとに一意のデータ)で認証、CDAはDDAを改良したものというのが概観です。
SDA(Static Data Authentication):静的データ認証
イシュアがカード番号や有効期限等を対象データとした固定データをカードに格納し、カード利用時に端末でイシュアの公開鍵を用いて固定データを検証する。端末はカード毎に固有のデータを検証することとなる。DDA(Dynamic Data Authentication):動的データ認証
カード発行時、イシュアはカードに固有の秘密鍵を格納。カード利用時に端末から送信される乱数をもとにカードが秘密鍵を使って署名を施し、秘密鍵に対応する公開鍵と共に端末へ送信。これにより端末は取引毎に異なるデータ(DDA署名データ)を検証することになる。CDA(Combined DDA)
DDAと取引認証用のクリプトグラム生成(=AC生成)を合わせて行うことによりカード・端末間の通信回数を削減した認証方法。
なお、これらの認証は開始から相当の期間が経過しており、新たな楕円曲線暗号(ECC)へ移行することも検討されています。対応には決済端末の入れ替えが必要とも言われておりまだ時間がかかるかなと考えています。
次にSDAとDDAの流れについて説明します。
SDAの流れ
現在はあまり使用されてないはずですが、SDAが各プレーヤと暗号鍵の関係性を理解しやすいので簡単に絵にしてみました。
事前準備
・決済端末に「ブランド公開鍵」を格納する。
・ICカードに以下のデータを格納する。
-イシュア公開鍵証明書(イシュア公開鍵をブランド秘密鍵で署名したもの)
-署名済固定データ取引実行時
・決済端末に格納された「ブランド公開鍵」で「イシュア公開鍵証明書」を複合し「イシュア公開鍵」を取り出す。
・取り出した「イシュア公開鍵」で「署名済固定データ」を複合し署名前の「固定データ」を取り出す。
・取り出した「固定データ」を取引時データと比較し、ICカードが改ざんされていないかを検証する。
DDAの流れ
概要説明でも書きましたが、さらにカードに秘密の固有鍵(ICカード秘密鍵)を格納して取引時に端末から送信される乱数に署名して取引毎に異なるデータで認証をする方式です。
ぶっちゃけ、このICカードの鍵ペア(公開鍵・秘密鍵)の生成・格納はICカード発行の際にカード毎にICデータ生成システムで処理されるもので、国際ブランドに署名依頼するようなこともないのであまり意識することはありません。
事前準備
・決済端末に「ブランド公開鍵」を格納する
・ICカードに以下のデータを格納する
-イシュア公開鍵証明書(イシュア公開鍵をブランド秘密鍵で署名したもの)
-ICカード公開鍵証明書(ICカード公開鍵をイシュア秘密鍵で署名したもの)
-ICカード秘密鍵取引実行時
・ICカードは「端末から送信された乱数※」を「ICカード秘密鍵」で署名し、「DDA署名データ」を生成する。
・決済端末に格納された「ブランド公開鍵」で「イシュア公開鍵証明書」を複合し「イシュア公開鍵」を取り出す。
・取り出した「イシュア公開鍵」で「ICカード公開鍵証明書」を複合し署名前の「ICカード公開鍵」を取り出す。
・取り出した「ICカード公開鍵」で「DDA署名データ」を複合し「端末から送信された乱数」を取り出す。
・取り出した乱数を取引時データと比較しICカードが改ざんされていないか検証する。
※Unpredictable Numberと言います
まとめ
EMV仕様のまずは序盤の砦、ICカードと端末の間で実施されるオフラインデータ認証について書きました。これはオンラインで通信する前段階のオフライン(=通信が発生しない)で実施する認証のため、その名のとおりオフラインデータ認証と呼ばれます。
「#5 クレジットカード決済の仕組み」のオーソリのセクションでオンラインオーソリを必要としないオフライン取引があると触れましたが、これはオフラインデータ認証が成功した上で、ICカードと決済端末で許可された範囲の中で可能な取引となります。逆に、一般的にはオフラインデータ認証が失敗したことをもって直ちに取引を拒否するものではなく、失敗した場合にはオンライン処理(オーソリ)でイシュアが必要な認証をし取引をどうするか判断するというのが一般的な流れとなります。
次回はオフラインデータ認証の次工程となる本人確認について書こうと思います。クレジットカード決済時に暗証番号(PIN)を打ったり、署名(サイン)をしたりするのがどんな仕組みかというところです。