PasoriとFelicaとWindows

ふとFelicaの認証に興味を持った。
特に意味はない。職業柄思い付きで興味を持つことがある。

手元には昔ヤフオクで落札したRC-S370がある。

Windows11上でFelicaの認証をしてみたいと考えた。

まずはPython環境をインストール。

AI Claudeを使ってコーディングさせたが、PaSoRiはPythonから認識したようだが、SuicaのIDmが読み取れない。

調べていくと、リーダの機種( RC-S370 )によって差があるのか?

さらに調べると汎用USBドライバ?なるものがある。

 → <解決> WinUSB 未適用だとusb1.USBErrorNotSupported: LIBUSB_ERROR_NOT_SUPPORTED [-12]というエラーになる

zadig、WinUSB、libusb?わざわざ別にこれが必須なのだろうか?

 →ほかのUSBデバイスに影響しないのだろうか?

以下のサイトの手順に従ったが、ZadigでPaSoRiを認識しない。

 →<解決>Zadigの[List]-[All devices]で表示された

libusbをダウンロードする

“libusb-1.0.29\VS2015\MS64\dll\libusb-1.0.dll”を「C:\Windows\System32 」と「C:\Windows\SysWOW64」の2か所へコピーする。

デバイスマネージャ上でPaSoRiを認識する箇所が変わった。

下記のサイトのPythonのコードで試す。

【Python】PaSoRiによるICカードの読み取り

Suicaでは以下の結果だった。

ほとんどの値は空だが、ID、PMM、SYSには値がセットされている。IDの値がカードの固有値なのだろうか。

 →<解決>PMMはPMm (製造パラメータ/Manufacture Parameter)、IDm (製造ID/Manufacture ID)は「製造者コード(2バイト)」+「カード識別番号(6バイト)」

Suicaの場合

しかし、スマホのモバイルSuicaでは以下のようになってIDが読み取れない。これはモバイルSuicaが他の決済にも使えるからセキュリティ上こうなっているのか?現時点では不明。

Timesカーシェアのカードは以下のように読み取った。

Timesカーシェアのカード

試しにSMBCのキャッシュカードを読み取ったら以下のようなデータで固有値は見当たらなかった。「Type4ATag」と表示されているからタイプが違うのだろう。

ついでにいろいろなカードで試してみた。

Edy。「Type3Tag」でIDも読み取れている。

部屋の入退室に使っているSECOMのWireless IC Cardでは「Type2Tag」と表示されたがIDは取得できている。

NFCのタイプについてはここでは深く掘り下げないが、Type1~Type5まであり、FelicaはType3のようだ。Type4は目運転免許証やマイナンバーカードらしい。

Type4では以下のサイトのコードを利用すると毎回コードが異なるが、同じURLに書かれている情報を利用するとType4のカードでもType3のIDmが取得できる?みたいだ。

実際に、やってみた。

最初のコードでは実行するたびにType4では値が異なる。

モバイルSuicaで試すとType3の値は以下のように同一の値が何度やっても取得できた。これなら入退室管理で使える。

Type3とType4でこのあたりの仕様がどう違うのだろうか。
上記のサイトでは以下のコードを使ってType3のIDmが取得できていたがなぜなのか。「 ‘targets’: [‘212F’, ‘424F’] 」を指定するとType4のカードでもType3のカードの情報(IDm)が読み取れるのか?

tag = clf.connect(rdwr={‘targets’: [‘212F’, ‘424F’], ‘on-connect’: lambda tag: False})