2014/08/09

[felica]FeliCa Lite-Sの相互認証が通った!!

まだ・・・FeliCa Lite-SのMAC_A(W)が計算できていないのだ・・・。

基本的な注意点は、以下。

  • 内部認証時のMAC計算や、読み込み時のMAC_A(R)計算とは異なる。
    • SK2→SK1→SK2の順で3DESする
    • 初期IVはRC1(エンディアン反転)で、初期値はWCNTとブロック番号

まず、前回疑問だった、発行していないのにできるのか?については、「できる」だと考えている。
その根拠は、WCNTレジスタの説明に、1次発行作業中でもMACつき書込が正常で終わると書かれているからだ。「WCNTの動作」という表があり、WCNT==0xFFFFFFになってなければ正常に書き込めるらしい。
今は0xFFFE58とかだから、まだ大丈夫そうだ。

 

では、考えられるのはMAC不一致か、WCNT不一致か。
WCNTは、読み込んだ値をそのまま使うだけなので、考えにくい。
となると、MACが不一致、ということになる。

ここで、スターターマニュアルを読んで気付いたことがある。
カード側に必要条件があるようなのだ。

  • CKブロックにカード鍵が書いてあること
  • STATEブロックがMACつき書込に設定されていること

STATEに? MAC付き書込設定?
MCレジスタを確認すると、MC_STATE_W_MAC_Aという設定があった。
全然気にしていなかったのだが、なんか重要そうだ。


MC_STATE_W_MAC_Aに0x01を書き込むと、STATEブロック書込にMAC必要となるらしい。
つまり、今まで、外部認証の処理だと考えていたシーケンスは、実は「STATEブロックにMAC付き書込を行う」という動作をしているだけだったのだ!
はらはら(目から鱗が落ちる音)。

もし私のMAC_A(W)計算が正しかったのならば、Write without Encryptionレスポンスのステータスフラグ2が0xB2である要因として、「MAC付き書込不要なブロックに対してMAC付き書込を行った」もあるということになる。

では、実証実験を。
・・・・・・・・・・

image

きたーーーーーー!!
Write without EncryptionまでOKで通った!!


では、外部認証へのまとめを。

  1. MC_STATE_W_MAC_Aには0x01を書き込んでおくこと
  2. STATEブロックへ書き込むときのEXT_AUTHは0x01
  3. MAC_A(W)を計算するときのEXT_AUTHは0x01

3番については?と思われるかもしれないが、FeliCa Lite-Sのユーザーズマニュアルには外部認証でのMAC(W)生成の説明に、

  • WCNT値とブロック番号とブロックデータからMAC(W)を生成
  • STATE[0]に01hを、MAC_AブロックにWとWCNT値を書き込む
  • の順で書かれているので、「じゃあMAC(W)を計算するときのSTATE[0]は、現在値なのか書き込む予定の値なのか?」で迷いが生じたのだ。
    しかし、ここまで確認した過程でわかったように、外部認証というのは「STATEレジスタへのMAC付き書込」を指しているので、計算するときは当然書き込む予定の値で行うことになる。

    あー、夏休みの宿題が終わった!

    2 件のコメント:

    1. 匿名18:42

      FeliCa Lite-Sの相互認証について質問があります。

      記事中に、
      「ステータスフラグ2が0xB2である要因として、....」
      をもう少し詳しくお教え頂ければと思います。

      また、「実証実験を。」の画像が現在見つかりません。
      再度、どのように回避したのかをご説明頂ければ助かります。

      また、上記のソース等をHP上で公開してますでしょうか?


      古い記事にコメントを致しますがご容赦ください。

      返信削除
      返信
      1. コメントありがとうございます。
        ただ、歯切れの良い回答ができるものが無く。。。

        ・記事の内容について、まったく記憶が残っていない
        ・画像はGoogleフォトから気付かずに削除して、手元に残っていない
        ・ソースファイルはGitHubを見た感じではなさそうで、それ以外に残っているかわからない

        せっかくなのに、申し訳ないです。
        ソースは出てきたら、どこかに載せられるようにします。

        削除

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