2011/09/06

[felica]片側認証でできること

やってみて、わかることがある。
わかっていたはずなのに、つくって、動かしてみて、「ああ、そういえばそうやん」というようなことだ。
片側認証を実装してみて、久しぶりにそういう感触を味わった。


片側認証を文字にすると、だいたいこんなことになる。

  1. カード発行時、発行者がカード鍵をFeliCa Liteに書き込んで、変更できないようにする。
  2. 使うとき、ユーザは発行されたFeliCa LiteをR/Wにかざす。
  3. R/WはFeliCa Liteを捕捉し、RCブロックにランダム値を書き込む。
  4. FeliCa LiteはRCブロックに書き込まれると、内部でセッション鍵を生成する。
  5. R/WはFeliCa LiteのIDブロック、MACブロックをまとめて読み込む。
  6. FeliCa LiteはMACが読み出される前のブロック情報を使ってMACブロックの値を生成するので、5ではIDブロックを使ったMAC値が取得できることになる。
  7. R/WはRCブロックに書き込んだ値と読み取ったIDブロック値から自分でMAC値を計算する。
  8. R/Wは両者のMAC値を比較し、一致したら自分が発行したカードということがわかる。

大切なのは8番。
一致したとわかるのはR/W、すなわち発行者側だけであって、FeliCa Liteは認証などしていないのだ。
これが片側認証の片側たるゆえんである。

 

悪意のある人が、FeliCa Liteを書き換えようとする際はどうしたらよいか?
どうもしない。
なぜなら、FeliCa Liteへの書き込みは認証を必要としないからだ。
Write Without Encryption。
もちろん、読み込む方も同じである。

コマンド名を見れば、そんなことは初めからわかっていたはずなんだけどね-。
片側認証できたので、なにか書き換えられたくない情報を書くようなソフトを考えていて、ようやく思い至ったのだ。


中身を書き換えられることを防ぐことはできないが、書き換えられたことを判断することはできる。
しくみは、MACと同じようにやることだ。
カードのどこかに、ブロック値をカード鍵で暗号化したデータを書き込めば、次に読み込んだときにMACと同じように答え合わせすることで、誰かに書き換えられたかどうかを判断できる。

まあ、防御策にしかならないのだが、そういった用途ができるのであれば十分に有用である。

0 件のコメント:

コメントを投稿

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

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