#はじめに
FelicaなどのICカードの固有ID(IDm)を読みだしてカードリーダーとかICカードの動作確認をするのにOpenSCを使うと便利だったのでメモ
#環境
- OS=Windows10
- カードリーダー=今回はPaSoRi RC-S380 をサンプルにしていますが、これ以外も使えます。
- カードリーダーのドライバはインストールしておくこと
- ICカード= SUICA(Felica)
#OpenSCとは
- https://github.com/OpenSC/OpenSC/wiki
- PC/SCとユーザーPGの間のミドルウェア
- オープンソースです
- Linux,Mac,OS X,Windows上で稼動する、汎用的なカード用ライブラリ
- PKCS#11ライブラリ、ツールなどで構成されてる
- なんと、マイナンバーカード(JPKI)にも対応している
#OpenSCダウンロード
https://github.com/OpenSC/OpenSC/wiki
からダウンロードしましょう。
今回は、OpenSC-0.17.0-win64_vs12-Release.msi をインストールしました。
https://github.com/OpenSC/OpenSC/releases/tag/0.17.0
- msc実行 → choose setup type で complete にするだけであとはそのままインストールでOK
- OpenSCのモジュールは、C:¥Windows¥System32 にインストールされます
- pensc-pkcs11.dll
- opensc-minidriver.dll
- など
- ツール群がC:¥Program Files¥OpenSC Project にインストールされます
- opensc-tool.exe
- opensc-explorer.exe
- その他たくさん
#ICカードリーダーの情報取得
opensc-tool.exeを使います。
opensc-tool.exe -a
- ATRを取得する。
- ATR(Answer To Reset)とは、カードが電気的に活性化した際にカードから送られる初期応答情報。これは最高32バイトであり、転送速度やカードを識別情報が含まれている。各情報はキャラクタ単位で識別され、たとえば1バイト目は開始キャラクタ
(TS)と呼ばれている。 - 要するにこのコマンドでカードリーダーを通してICカードが認識されているかどうかを確認することができる。
C:\Program Files\OpenSC Project\OpenSC\tools>opensc-tool -a
Using reader with a card: Sony FeliCa Port/PaSoRi 3.0 0 ← ※1
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx ← ※2
- ※1 接続しているカードリーダーの情報
- ※2 ATR値、カードを認識していない場合は
Failed to connect to card: Card not present
となる
##opensc-tool.exe -s
- ICカードにAPDUを送信し、応答を得る。
- カードのIDmを取得するためのGetDataコマンドでIDmを取得することができる。
C:\Program Files\OpenSC Project\OpenSC\tools>opensc-tool -s FF:CA:00:00:00 ← ※1
Using reader with a card: Sony FeliCa Port/PaSoRi 3.0 0 ← ※2
Sending: FF CA 00 00 00
Received (SW1=0x90, SW2=0x00): ← ※3
01 02 03 04 05 06 07 08 ..=$i... ← ※4
- ※1 FF:CA:00:00:00 GetDataコマンド=IDm(UID)問い合わせ
- ※2 接続しているカードリーダーの情報
- ※3 応答 SW1=0x90,SSW2=0x00 で正常終了という意味
- ※4 カードのIDm(UID) この例ではFelicaを使ってIDm(8Byte)01 02 03 04 05 06 07 08 が取得された。
##その他
- opensc-toolでAPDUコマンドを送れば、カード内情報を読み込んだり書き込んだりできるので、プログラムを作らなくても比較的簡単にICカードのHackができます。
- カードリーダーはPaSoRiに限らず利用できます。
- カードはFelicaに限らずType-AやType-Bにも対応しています。
##参考