まえがき
今年の四月から私の大学の学生証が新しくなりました。
コロナの影響で、学校が閉鎖される前に行ったときにカードリーダーをみるとFelicaのリーダーになっていたのでFelicaらしいです。
今更ながら、家にあったのFelicaのリーダーが学生証の中のデータを見てました。
環境
Virtual Box Ubuntu18.04
パソリ RC-S320
準備
S320はnfcpyというPythonのライブラリに対応していないので、libpafeを使用する。
- Githubからlibpafeをcloneする
$ git clone https://github.com/rfujita/libpafe.git
- configureコマンドを実行して足りないものを入れる
$ cd libpafe $ ./configure
私の環境では、以下のものが必要でした。
$ sudo apt install make gcc libuseb-dev pkg-config
- インストール
$ make $ sudo make install
- 動作確認
$ sudo ./tests/pasori_test PaSoRi (RC-S320) firmware version 1.40 Echo test... success EPROM test... success RAM test... success CPU test... success Polling test... success
こんな感じなのがでればOK
dump結果
$ sudo ./tests/felica_dump > dump.txt $ cat dump.txt -n 1 # lpdump : Wed Jun 10 03:41:57 2020 2 # --- IDm info (FeliCa) --- 3 # Manufacture Date = 2063/10/8 4 # SN = 6981 5 # Manufacture Code = 2E01 6 # Equip. Code = C748 7 system num 1 8 # FELICA SYSTEM_CODE = 93B1 9 # card IDm = 012E48C7CD98451B 10 # card PMm = 033242828247AAFF 11 # area num = 4 12 # service num = 6 13 # AREA #0 = 0000 (00000) 14 # AREA #1 = 0040 (00000) 15 # AREA #2 = 0080 (00000) 16 # AREA #3 = 00C0 (00000) 17 # 0040:0008 Ramdom Access R/W (PROTECTED) 18 # 0040:000b Random Access Read only 19 0040:0000:3031xxxx30xxxx39xx312020202020 20 # 0080:0008 Ramdom Access R/W (PROTECTED) 21 # 0080:000b Random Access Read only 22 0080:0000:3031xxxx30xxxx39xx312020202020 23 # 00C0:0008 Ramdom Access R/W (PROTECTED) 24 # 00C0:000b Random Access Read only 25 00C0:0000:3031xxxx30xxxx39xx312020202020
x
になっているところは隠している場所です。
中身をみてみる
ドキュメントを見ながら、dumpした中身を読んでいきます。
日本語のドキュメントなんで比較的理解しやすかったです。
大事そうなところだけ書いていきます。
* 7行目 system num 1
このカードにシステムがいくつかあるか示しています。
システムとは、論理的なカードの単位を表します。
1枚のカードにSuicaと楽天Edyの機能を持たせることができるということだと思います。
スマートフォンを読み込んでみるとこの値が3つになっていました。
* 8行目 FELICA SYSTEM_CODE = 93B1
リーダ/ライタがカードを特定するために使われます。
ちなみに、Suicaは0003
です。
* 9行目 card IDm = 012E48C7CD98451B
カードを識別するためのIDです。
基本的にはユニークな番号が付与されます。
簡易的な入室管理システムなどでは、この値を利用して作られいます。
* 10行目 card PMm = 033242828247AAFF
カードの種別および性能を識別するためのパラメータです。
上位2バイトを ICコード、続く6バイトを 最大応答時間パラメータ と呼びます。
ICコードは、ROM種別とIC種別の1バイトずつに分けられています。
このカードのIC種別は32です。
このサイト で確認するとRC-SA00/1で、DESとAES暗号に対応したチップが搭載されていてセキュリティが高いカードらしいです。
19行目 0040:0000:3031xxxx30xxxx39xx312020202020
ここの学籍番号の情報があり、ASCIIでデータが格納されています。
20
になっている部分を除き、変換してみるとこんな感じになりました。
017xxxxx01
下位の01は学籍番号に関係ないので、どういう意味の数字かは不明です。
ほかの人の学生証と比べればなにか分かるかもしれません。
あと、学籍番号がこのブロックを含めて、合計3ブロックにあるのも謎です。
最後に
今度はs380をでPython3に対応したらしいnfcpyを使ってみたいと思います。 余裕があれば、学生証を利用した入室管理システムも作るかもしれないです。
参考文献
raspberrypiでFeliCaのIDmを除く(pasori RC-S320版)