非接触ICカード/NFCと相互認証

e-Taxで確定申告しました。マイナンバーカードを使って。
作業中に署名だったり券面情報(納税者情報)の読み取りだったりでPINの入力を何回か求められたわけだが、
カードはこのPINを処理するまえに、そもそも処理してよいものかを確認しているのだろうか。
この手のPIN認証は通常試行回数の上限があり、一定回数失敗するとロックする。そして使えなくなる。
事前の認証なく処理しているのなら、
AndroidとかでNFCリーダライタ(RW)をカードにこそっとかざせし認証エラーを繰り返せば、カードを使えなくする嫌がらせが出来る。確定申告の期日が差し迫った日に。
運転免許証は事前の認証などないので、ロックされうる。ICカード的使い方したことないけど。
まれによくある FeliCaのIDmで認証するな(コピーして使いまわせるから) も似たような話かもしれない。

だから相互認証しましょう、という話がある。
ICカードとRW(それぞれICC, IFDという気がした)というのは、
システムを構成するためにバラまかれ、お互いが出会うのはどこかの現場である。
よって、実処理前に正しい相手かをお互いに確認し合う必要がある。

  1. ICCがIFDを認証する
  2. IFDがICCを認証する

両方やって相互認証である。
自分の生成した乱数に対し、相手の知る秘密の情報を使って相手に演算(暗号処理)してもらい、その結果を自分で検証する。
これで片側認証。そして反対の流れもやる。
この後、生成した乱数を使って通信路の暗号化とMAC付与するなどして通信することになる。ネットでのセキュアな通信と同じようなものだ。

その他

  • OpenSCでマイナンバーカード読み取れるようになったというのは聞いたことあったのだが、仕様がオープンということではなかった。
  • マイナンバーカード処理が綺麗にまとまってるコード

See also