MIFAREの読み取り

ICカードこれひとつ
FeliCaのビューアーとしてはほぼ完成の域に達し、機能面でも世界最高レベルのものを作ることができたと考えています。
しかしいくら国内で世界最高レベルのソフトウェアを提供しても、お金を出してくれる日本人は想定以上に少なくて、開発費の回収など夢、赤字が増え続ける状況は今後も続きそうです。

このままでは無理ですが、せっかくのアプリを廃棄するわけにもいかないので別の収入源を得られるよう海外進出も念頭に入れ、FeliCaだけでなくNFC-A、つまりMIFAREにも挑戦してみようと思うに至った今日この頃です。

手元にあるMIFARE


これまでかき集めたMIFAREなカードは次のようなものです。
・生のMIFARE Classic 1K ×3枚
・でんてつハイカード hi-card (MIFARE Classic 1K)
・aime (MIFARE Classic 1K)
・NESiCA (MIFARE Ultralight)
・バナパスポート (仕様不明、MIFAREのICタグと思われる)

MIFAREへの挑戦のはじめ


元々は「でんてつハイカード」を読むことができないかということから始まったMIFAREへの挑戦。
カードを壊してはいけないと思い入手した空のMIFARE Classic 1K含め、スマホやタブレット(Nexus 7)ではまったく読み取れず、最終的にNFCチップが対応していないので読めないという結論に至って数年放置されました。

aime、NESiCA、バナパスポートはゲームセンターのカードですが、最近になり対応できないか?という要望があったのでかき集めてみたものです。

MIFAREへの再挑戦


スマホでMIFARE Classicが満足に読めないので、案件もあったことからUSBのNFCカードリーダーを入手してアプリの対応に加えました。
FeliCaは無事に読み取れるようになったので、次はいよいよMIFAREへの挑戦です。

ここで分かったことは、認証の要らないMIFARE Ultralightはすんなり読み取れて、アプリにも無事に機能が追加できたことです。
しかしながら、MIFARE Classicはどう頑張っても読めません。空のものも。

MIFARE Classicはよく分からない


実際の読み込みコマンドは、MIFARE ClassicもMIFARE Ultralightも同じで良いはず。

現在は、Read Binary BlocksというAPDUコマンド FFh B0h 00h P2 Le という5バイトを使って、これでMIFARE Ultralightは正常に読めている。しかしMIFARE Classicは読めていない。


MIFARE Ultralightは認証が必要なので、まず鍵を登録する。
Load Authentication KeysというAPDUコマンド FFh 82h 00h P2 06h xx xx xx xx xx xx という11バイトを使う。
P2はキー番号。00hと01hの二つがあるあらしいがよく分からないので両方にデフォルトのffh ffh ffh ffh ffh ffh を登録してみる。これは読み込み処理の前に1回だけ実施。

次に認証をする。これはブロックごと。
AuthenticationというAPDUコマンド FFh 86h 00h 00h 05h 01h 00h B# KT K# という10バイトを使う。
B#は通しのブロック番号、KTは60hでKey-A、61hでKey-Bとして認証する。
K#はキー番号。00hか01h

でんてつハイカードのように他の番号がある場合、デフォルトのキーではErrorレスポンス 63 00h が返るが、生のカードでは正常に認証でき 90 00h が返ってきた。

そして、この認証後に先に書いたRead Binary BlocksというAPDUコマンドを実行すると、何やらLEDがピコピコするのでカードを読んでいるだろうと予想されるものの、Errorレスポンス 63 00h が返ってしまい、結局読めていない。

リーダーやライブラリーが悪いのか、コマンドの送り方が悪いのか、などはまだよく分からない。
どこかに解決のヒントがあれば良いのですが


(追記)読めました


デフォルトキーがffh ffh ffh ffh ffh ffh だという情報を得ていたのですが、これは正しくもあり間違いでもありました。

正確には、出荷状態は Key-Aは 00h 00h 00h 00h 00h 00h であり、Key-Bが ffh ffh ffh ffh ffh ffh だったのです。
ということで、プログラム自体は大きく変えた記憶はないですが認証させたり使用したりするキーを変えることで、無事に読み込み処理が完成しました。
MIFARE Classicも、カードリーダー(とNFCチップ)さえきちんとしていれば、ちゃんと読めることが分かりました。

2018/08/02(木)18:54 |Comments(0) |Trackback(0)

製造開発 | ソフトウェア開発 | コンピュータ | [編集]

▲ページトップ

コメント

コメントの投稿

物販対応の今後について ホーム ICカードこれひとつの抜本的な仕様変更
トラックバック

この記事にトラックバックする(FC2ブログユーザー)
▲ページトップ

カレンダー

11 | 2018/12 | 01
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -

プロフィール

miraicorp

Author:miraicorp
未来情報産業(株) 社長

主として「ICカードこれひとつ」や「文字、文字コード」処理、時々C++などについて記述しています。

twitterマストドン

管理用

検索フォーム

お知らせ

コメント等お気軽にどうぞ。

気に入ったら拍手して頂けると、今後の記事を書く際の参考や励みになります。

■お仕事を募集しております
ソフトウェア製造の仕事や、原稿執筆の仕事などを随時受け付けております。
お気軽にご相談下さい

■初めての方へ
こまごまと更新しているため、他にも関連する記事があるかもしれません。
「月別アーカイブ」「検索フォーム」「カテゴリ」などをお試し下さい。
トップページはこちら

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

広告枠

メール

メールはこちら

リンク

このブログをリンクに追加する

RSSリンクの表示

QRコード

QR