2011/05/05

FeliCa Liteの片側認証はこうなのか?

IDmは、唯一性を保証してくれない。
どこかで重なる数値が出てくるかもしれないし、R/Wであれば意図的にIDmを作り出すこともできる。

R/Wのこの仕様は、もう少し変更した方がよかったのではないかと思っている。
Type-Aは4byteタイプしか作り出せず、しかもそのうちの3byteしか指定できないと思うからだ(PN533では)。
いろいろと事情はあるのかもしれないけど、私はそんなに知らないのだ。

それはいいとして。
どうやって偽カードから守るかを考えなくてはならない。
FeliCa Liteカードの場合、それは「片側認証」という手順を用いるようだ。
これは別に秘密でもなんでもなく、ダウンロードできる資料に書かれている。
以下は、私の認識でしかないので、各人調べてほしい。


発行

サービス事業者は、カードを発行するときに、

  • ID
  • カード鍵

をカードに書き込んでから渡す。


認証

サービス事業者がR/Wを用意し、それとカードがやりあう。

まずR/Wが乱数を発生させ、それをカードに書き込む。
この乱数は「ランダムチャレンジブロック」に書き込まれる。

次に、IDブロックとMACブロックを読み込む。
このときMACブロックには、ランダムチャレンジ値とカード鍵値を元にしてIDブロック値から生成したMACが返ってくる。
サービス事業者は、IDブロック値さえあれば、カード側が生成するMACと同じ値が作り出せるはずである。
なぜなら、MACの計算方法は指定されていて、そのパラメータはすべて取得するか、事前にわかっているからだ。
最後にサービス事業者は、自分で生成したMAC値と、読み取ったMAC値が等しいことを確認し、認証を終える。


なぜこの手順で認証できるのか?
MACの計算方法がわかるのであれば、偽カードでも同じことができるのでは?

では、簡易的な偽カードソフトを作ったと仮定して考えてみよう。


カードを発行するまでは、同じ。

その後、悪い人が間に入ってくる。
R/WでFeliCa Liteカードの中身を全部読み取ってしまえ!

IDm、PMmはもちろん、スクラッチパッドの中身なんかも読み取ることができてしまう。
あやうし、FeliCa Liteカード!!

さて、悪い人はソフトを作り、読み取ったIDmとPMm、システムコードなんかもPollingで返すように作ってしまう。
Read Without Encryptionでスクラッチパッドのブロックを指定されても、それを返すようにしてやればいい。
しめしめ、これで完璧だ。。。


しかし安心してほしい。
読んだときに、書き込んである値を返さないレジスタがある。
それがMAC値を作るときに使う、ランダムチャレンジ値とカード鍵値だ。

ランダムチャレンジブロックはR/Wから与える方なので、その場にならないとわからない。
読み取るなら、アクセスするその場にいなくてはならない。
通常なら、そんな不審な人はだめだろう。


では、R/Wを奪い取ったとしよう。
そしたら、何度でも試せるではないか。
しかし…だ、ランダムチャレンジブロックへのアクセスはR/Wから行うものの、カード鍵へのアクセスは行わないのだ。
行っても、値が取れないし。
だから、簡単にはMAC値を作り出すことができない。

やるとするなら、認証ソフトも自分で作って、ランダムチャレンジブロックへの書き込み値を一定にして、同じMAC値が返ってくるカード鍵値を求める、というくらいだろうか。
カード鍵さえわかれば、ランダムチャレンジブロックは毎回変化するのでどうでもいい。
自分で認証ソフトを作り、繰り返すだけでいいのだ!


もはやここまでか、と思ったが、なかなかそうもいかない。

ここらへんで、3DESという暗号が出てくる。
残念ながら、私は暗号化に詳しくない・・・。
昔読んだゴルゴ13に、簡単にするためにこんな説明があった。

  a^2 + b^2 = c

という場合、aとbがわかればcはすぐに出てくるけど、cがわかってもaとbはなかなか割り出せない、とか。
何となくいわんとするところはわかる。
まあ、この説明がどの暗号化に対してだったか知らないのだけど。。

今回のような悪事を働いた場合、aとcは出てくるので、bだけであればそんなに難しくない。
しかし3DESは一昔前までは最前線だった暗号化だから、そう易々と解析できないのではなかろうか。


これは、FeliCa Liteカードの話で、FeliCaカード(FeliCa Standardカード)のことではない。
あくまで廉価版なので、セキュリティは弱めなのだ。
なので、非常に大変な情報(お金とか)を扱うのであれば、FeliCa Liteカードは不向きである。

FeliCa Standardカードの場合は、さらに頑強になっている。
のかどうかはわからないが、少なくともFeliCa Liteよりもやれることが多いので、頑強にできるはず。

FeliCa Liteだって、カード鍵がわかって偽造方法がわかったとしても、影響は同じカード鍵を使っている範囲に限られる。
それにIDmの書き換えは一部のバイトしかできないようなので、そうそう同じIDmにはできない。
やるならR/Wが向いているけど、店でカードじゃなくてR/Wをかざすような人には「ちょっとお客様、こちらへよろしいですか?」と尋ねるくらいの指導はしてほしいものだ。

やっぱり、人間に向いた作業ってのはあるのよねー。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。