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 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。