はじめに
カードの種類を識別できたら、なんか良いような気がしたので識別してみることにする。
リポジトリはこちら
PaSoRiに対応してます
動機
ICカードのタイプ識別をしたい。
細かい仕様は券面に書いてないので、そういうのを知るために。
脆弱なICカード(Mifare Classic 1K/4K)とかを簡単に識別したかった。
PC/SC
PC/SC仕様に則ってるカードのみが対象になる。
あと、原則として非接触ICカード(Contact Less=CL)を対象とする。
銀行のカードはCLじゃないけどなんか読めた。
ATR(Answer To Reset)
カードを置くと、カードリーダーに対してICカードがATRペイロードを送る。
ATRには、どのようなカードなのか、みたいな簡易的な識別情報が書いてある。
そいつをパースしていい感じに表示する。
パースの補助情報
ここに識別情報がリストされてるので、これを使ってみる。
数が膨大なので7割から8割程度対応できればいい。
パースの方針
原則としてATRを真面目にパースする。
例外として、txtには .. みたいなやつとか [7,8] のような正規表現っぽいものが書かれてるのでそういうのは弾く。
ATRのヘッダ
1バイト目からヘッダ情報に成っていて、ここらへんには興味はない。
必要なのはカードのヒストリカルバイト(履歴バイト・JISX6320-3:2009では管理情報バイト)で識別することにする。
ヒストリカルバイトとカード名だけ抽出したJSON
識別している部分
実行結果
いろんなカードを置いてみる/刺してみる
銀行のICカード
MUFGではないがMUFGと識別された。おそらく共通のものを使っているっぽい。
[Answer to reset(ATR)]
カード名: MUFG (.jp) (Bank)
管理情報バイト: 80-73-c6-01-08
確立したプロトコル: T1(ブロック転送モード)
ATS: 読み出し非対応
カード種別: 不明なカード
種別名: 不明
カードID: 不明
免許証
[Answer to reset(ATR)]
カード名: Driving License card of Japan (NFC type-B) (eID)
管理情報バイト: 00-00-00-00-91-81-c1-00
確立したプロトコル: T1(ブロック転送モード)
PUPI: 95-bb-b9-c7
ATS: 情報無し(コマンドは成功しました)
カード種別: ISO14443-4B (Infineon / Atmel /ST microelectronics)
カード名: Type B(T=CL)
種別名: Type B(T=CL)
カードID: b4
マイナンバーカード
[Answer to reset(ATR)]
カード名: ID card issued by Japan government (eID)
https://www.kojinbango-card.go.jp/mynumber/index.html
管理情報バイト: 00-00-41-e0-b3-81-a1-00
確立したプロトコル: T1(ブロック転送モード)
PUPI: 5b-f7-f3-8b
ATS: 情報無し(コマンドは成功しました)
カード種別: ISO14443-4B (Infineon / Atmel /ST microelectronics)
カード名: Type B(T=CL)
種別名: Type B(T=CL)
カードID: b4
SUICA
[Answer to reset(ATR)]
カード名: RFID - FeliCa (generic) (as per PCSC std part3)
Suica public transit card (Japan IC system)
(also: Hayakaken, ICOCA, Kitaca, manaca, nimoca, PASMO, PiTaPa, SUGOCA, TOICA)
https://en.wikipedia.org/wiki/Suica
Octopus, MTR network from Hong Kong, 2014
管理情報バイト: 80-4f-0c-a0-00-00-03-06-11-00-3b-00-00-00-00
確立したプロトコル: T1(ブロック転送モード)
IDm: **-**-**-**-**-**-**-**
PMm: 10-0b-4b-42-84-85-d0-ff
ROM種別: 10
IC種別: 0b
カード種別: FeliCa
カード名: FeliCa
種別名: FeliCa
カードID: f0
Qurio Lockの施錠・解錠用カード
[Answer to reset(ATR)]
カード名: RFID - FeliCa (generic) (as per PCSC std part3)
Suica public transit card (Japan IC system)
(also: Hayakaken, ICOCA, Kitaca, manaca, nimoca, PASMO, PiTaPa, SUGOCA, TOICA)
https://en.wikipedia.org/wiki/Suica
Octopus, MTR network from Hong Kong, 2014
管理情報バイト: 80-4f-0c-a0-00-00-03-06-11-00-3b-00-00-00-00
確立したプロトコル: T1(ブロック転送モード)
IDm: **-**-**-**-**-**-**-**
PMm: 00-f1-00-00-00-01-43-00
ROM種別: 00
IC種別: f1
カード種別: FeliCa
カード名: FeliCa Lite
種別名: FeliCa
カードID: f2
感想
やったぜ