クレジットカードのPINチェックの脆弱性

Chip&PIN方式のセキュリティに脆弱性があることが明らかになった

クレジットカードのICチップセキュリティを突破した驚愕の手法とは? - GIGAZINE

まさかそこまでのことはないだろうと思いつつ、リンクされている論文の冒頭部分を読んだ。


During cardholder verification, the PoS queries the PIN from the user and transmits it to the card. The card compares the PIN and responds by “yes” (SW code 0x9000) or “no” (0x63CX).

http://eprint.iacr.org/2015/963.pdf

…脆弱だった。入力を横取りしていつでもyesを返すバイパス回路を設置すれば良い。今回使われたのはそれだろう。


なんで計算力を持つICカードを使っているというのにそんな方法でチェックしているの?


普通に考えれば

  1. PINを入力
  2. カード内の証明書情報を返答
  3. POSで返答された証明書情報のチェック

ぐらいはして良さそうなものだ。


私が設計するなら

  1. POSはカード内から発行者が署名したカード番号付きの公開鍵データを受け取る
  2. POSはカード番号を確認
  3. POSがチャレンジデータ(公開鍵で暗号化したデータ)を作成
  4. チャレンジデータとPINを送信
  5. カードがPINで暗号鍵を有効化して、解読処理
  6. カードがレスポンスデータ(暗号鍵で解読したデータ)を送信
  7. POSがレスポンスデータを検証

かな。発行者の署名検証用公開鍵はPOSにあらかじめ仕込んでおけるから、都度の通信はないはず。


前者の方法では「一度読み出せた証明書情報」をプールすることでやはり詐称が出来るので、ICカードの本領を発揮するには暗号解読をさせるのが本来のやり方だろう。


…というか、そもそもPINというのはICカードのロックを外すためのものであって、それ以上のものではないのにそれを認証に使うって発想はなんなのだろう?ひょっとしてICカード内に証明書入れてないの?それとも低価格取引用の簡易チェックなのだろうか。サイン不要に相当するものとか。