Mifare(マイフェア)ICカード read/write制御を確認してみました

はじめに

「Mifare(マイフェア)」はNXPセミコンダクターズ(元フィリップスの半導体部門)が製造する非接触型のICカードの通信技術、およびその通信技術を利用したICチップを搭載したカードです。

Mifareには複数種類あり、MIFARE Classic(Standard)は、低価格なので、電子マネーや社員証、交通機関などで幅広く利用されています。

ソフト開発において、MIFARE Standard (MIFARE Classic) 1K / 4K カードを使用することとなった為、動作確認用アプリを作成して、Mifareカードへのread/write制御確認を行いました。

動作確認

下記環境でソフト設計を行いました。

 開発環境
 Visual Studio Community – Windows フォームアプリケーション(.NET Framework)を使用しました。

 通信データの暗号化アルゴリズム(AES)
 OpenSSL(SSLプロトコル・TLSプロトコルの、オープンソースで開発・提供されるソフトウェア)を使用しました。

 IC Reader/Writer
 開発で使用しているものを使用しました。

Mifare仕様は、NXPセミコンダクターズの下記データシートを参照しました。

MIFARE Standard 1K  https://www.nxp.com/docs/en/data-sheet/MF1S50YYX_V1.pdf
MIFARE Standard 4K  https://www.nxp.com/docs/en/data-sheet/MF1S70YYX_V1.pdf
参照項目 8.6 Memory organization 8.7 Memory access

Mifare メモリ/アクセス仕様

・1block 16byteで構成。
・1sectorは、データ部とsector trailer(認証AKey, データ部/sector trailerのアクセスbit, 認証BKey)で構成。
・1Kカードの場合:1sectorは、3(block)のデータ部と1(block)のsector trailerで構成。
・4Kカードの場合:
  31sectorまでは1Kカードと同様。
  32sectorからは、1sectorは、15(block)のデータ部と1(block)のsector trailerで構成。
・アクセスbitの組合せでアクセス条件/認証Keyを指定。

sector trailer default値

「FF FF FF FF FF FF FF 07 80 69 FF FF FF FF FF FF」

 認証Key          :FF FF FF FF FF FF
 データ部          :read認証Key A or Bで read/write可能
 sector trailer  :read不可、認証Key A or Bでwrite可能

※補足
購入直後のカードに対して、認証AKey:「FF FF FF FF FF FF」でsector trailerの読込を行うと、「00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF」を取得しました。
よって、sector trailerのdefault値が「FF FF FF FF FF FF FF 07 80 69 FF FF FF FF FF FF」であることを確認しました。

確認結果

各sector trailerに認証Keyを設定後、各blockにデータ書込、データ読込を行い、書込データを読込むことが出来ることを確認しました。

反省点

最初、仕様を理解出来ていないままデータ書込みを行い、1枚、sector trailerの認証Keyに意図しない値を書込んでしまいました。その為、認証Keyの値が分からなくなり、正常使用出来ないカードになってしまいました。

最低限必要な仕様は理解しておかないと取り返しが効かないことになるので、仕様理解は必須であることを再認識しました。

おわりに

MifareのRead/Write制御が理解でき、実際のソフト開発に役立ちました。
Mifareは、暗号機能を最小限にとどめることで機能を簡素化してあるので、ソフト設計において、FeliCaカード(非接触型ICカード)よりも扱いやすい(機密性は別として)と感じました。

よかったらシェアしてね!