3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WindowsでOpenSCを使う(3.MIFARE Classicブロックデータ読み出し編②)

Last updated at Posted at 2019-10-18

はじめに

WindowsでOpenSCを使う(3.MIFARE Classicブロックデータ読み出し編①)の続きです。
そもそもMIFARE Classicとは?前回使用したコマンドの意味は?KeyA、KeyBとは何?
一つずつ解説していきましょう。

MIFARE Classicとは

概要

NFC規格ISO/IEC 14443 Type A(Mifare)の一種。
シンプルなメモリーカードであるが、メモリー全体はセクターに分かれ、
各セクターはブロックに分かれています。
各セクターごとに48ビット長の暗号鍵が二組(AとB)用意され、
Aのみ、またはAとBの組を使用して各領域をプロテクトできるようになっています。

ICに対するコマンドとしては、各ブロックに対して読み込み、書き込み、値の増減などが用意されています。

種類

総メモリ空間のバイト数でMIFARE Classic 1k、MIFARE Classic 4k、MIFARE Classic miniに分類されます。

分類 総メモリー空間 実メモリー 実メモリー中の
ユーザー領域
全体のセクター数 各セクターのブロック数 1ブロック
1k 1024
byte
768
byte
752
byte
16 4 16
byte
4k 4096
byte
3456
byte
3440
byte
40 セクター0~31:4
セクター32~39:16
16byte
mini 320
byte
240
byte
224
byte
5 4 16
byte

KeyA、KeyBとは?

ブロックデータをプロテクトするための暗号キーです。
デフォルトではFF:FF:FF:FF:FF:FFが設定されています。
指定されたキーがある場合、
Load Authentication Keysコマンドでキーを指定しないとデータを読み出すことができません。
また、Authenticationコマンドを使用する際にも、KeyA、KeyBのどちらを使用するか指定する必要があります。

MIFARE Classicのデータ構造説明

下の画像はMIFARE Classic 1Kのデータ構造です。
mifare1kmemoryorganization.png

セクターの使われ方

分類 Manufacturer block データブロック セクタートレーラー
1k/mini セクター0のブロック0
32ビットのNUIDを含む、リードオンリーのカード情報が記録されている。
各セクターのブロック0から2まで
(セクター0のみブロック1と2)
各セクターのブロック3
Key A/Bとアクセス条件が記録されている。
4k セクター0のブロック0
32ビットのNUIDを含む、リードオンリーのカード情報が記録されている。
各セクターのブロック0から2または14まで
(セクター0のみブロック1と2)
各セクターのブロック3または15
Key A/Bとアクセス条件が記録されている。

コマンド解説

上記のMIFARE Classicのデータ構造説明の画像を見ながら、各コマンドについて見ていきましょう。

Load Authentication Keysコマンド解説

FF:82:00:00:06:FF:FF:FF:FF:FF:FFコマンドで、プロテクトを解除するためのキー情報をメモリにロードします。

ISO 7816におけるコマンドのフォーマットはこれ。

ヘッダー ボディ
CLA INS P1 P2 Le データ
byte No 項目名 指定値 説明
0 CLA FF 命令クラス。FF固定。
1 INS 82 Load Authentication Keys
2 P1 00 00固定
3 P2 00 キーナンバー。キーを格納するメモリの番号。
4 Le 06 キーの長さ。キーのバイト数。
5~11 Data FF:FF:FF:FF:FF:FF キーデータ。キーのデータ。

byte No.3は指定されたKeyAまたはKeyBを格納する一時的なメモリ?です。00固定で良いようです。
byte No.4は指定されたKeyAまたはKeyBのバイト数です。
byte No.5~11のキーデータは指定されたKeyAまたはKeyB。この時点ではKeyAとKeyBのどちらを使用するなどは指定しなくても良いです。

Authenticationコマンド解説

FF:86:00:00:05:01:00:00:60:00コマンドで、セクタに対して認証を実施し、プロテクトを解除します。

ISO 7816におけるコマンドのフォーマットはこれ。

ヘッダー ボディ
CLA INS P1 P2 Le データ
byte No 項目名 指定値 説明
0 CLA FF 命令クラス。FF固定。
1 INS 86 Authentication
2 P1 00 00固定
3 P2 00 00固定
4 Le 05 データ部の長さ。5byte。
5 【データ部】
バージョン番号
01 01固定
6 【データ部】
-
01 00固定
7 【データ部】
ブロック番号
00 認証したいセクタの先頭のブロック番号。
8 【データ部】
キーのタイプ
60 KeyAを使うかKeyBを使うかを指定します。
Aは60、Bは61です。
9 【データ部】
キーナンバー
00 Load Authentication Keysの
byte No3で指定したキーのメモリの番号

byte No.7について、MIFARE Classicのデータ構造説明の画像を見てみましょう。
指定した値が00ということは、セクター0のブロック0を指定しています。
画像を見ると、1セクターに4つブロックが存在するので、セクター番号×4を指定することになります。
例えば、セクター3のデータを認証したい場合は3×4で12を指定します。

byte No.8について、今回は60を指定しているので、KeyAを使用していることがわかります。

Read Block Dataコマンド解説

FF:B0:00:01:10コマンドで、プロテクトが解除されたセクタのブロックデータを読み出します。

ISO 7816におけるコマンドのフォーマットはこれ。

ヘッダー ボディ
CLA INS P1 P2 Le
byte No 項目名 指定値 説明
0 CLA FF 命令クラス FF固定
1 INS B0 Read Block Data
2 P1 00 00固定
3 P2 01 読み出すブロック番号。
4 Le 10 読み取りバイト数。10(16byte)固定。
byte No.3の読み出すブロック番号は00から指定可能です。 今回は01を指定しているので、セクター1のブロック2のデータを読み出したいということを意味しています。 ここでは、Authenticationコマンドのデータ部のブロック番号指定のようにセクター番号は指定せず、 ブロック番号でどのセクタのどのブロックを指定するかを示します。 例えば、セクター2のブロック1を指定するなら、04、セクター3のブロック3を指定するなら10を指定します。 MIFARE Classicのデータ構造説明の画像を見ながら指定すると分かりやすいと思います。

参考サイト

WindowsでOpenSCを使ってMIFARE Standard(Classic)カードデータを読み出す方法
Mifareの基礎知識
Android入門 MifareClassicの認証に関して
ISO/IEC 14443 Type A(Mifare)
MIFARE Classic
NFC FORUM
mifare classic 1k/4k user manual - SonMicro

関連ページ

WindowsでOpenSCを使う(1.準備編)
WindowsでOpenSCを使う(2.カードのIDm確認編)
WindowsでOpenSCを使う(3.MIFARE Classicブロックデータ読み出し編①)

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?