2012年7月29日日曜日

Mifare Classic と FeliCa FCF 同時対応

SONY FeliCa の秘密主義と SONY の NFC リーダの SDKをあんまり売る気のないのか?という代理店にちょっと途方にくれたが,研究家の方々がインターネット上に公表している成果(1, 23 ほか)を参考にして,Adafruit 等から購入できる PN532 / I2C をつかったリーダで読み取りが可能になった.SONY の現行最新 NFC チップでもほぼ同じコマンドシーケンスなので USB タイプや RCS620S でも使えるだろう.

サービスコードの違うバージョン?やバイトオーダーが仕様書と違う記載があったりしたが,結局 PN532 のスルー通信コマンド InCommunicateThru で FeliCa カードの仕様書通りのコマンド送信とレスポンスを実装して,
(1) Polling をシステムコード ANY 0xFFFF ではなくEdy/FCF の 0x00FE でかける.Suica 系は ANY でも読めてしまう...Edy つき FCF カードは Edy が読めれば FCF も読めるということだろうか.
(2) そうすると Service Request で FCF のサービスコード 0x1a8b が確認できる.最初に見たページのいくつかでは Edy は 0x1317 ? だったが,手持ちのカードではサービスがなかった.別のページのソースコードにあった 0x170F でやっとサービスを確認できた...
(3) そして Read Without Encryption で 0 番から数ブロックを読めばいいのだった.FeliCa カードのコマンド仕様どおり2バイトのブロック番号指定で最初のバイトの msb はビットをたてるから 0x80, 0x00, 0x80, 0x01, ... となる.

これで,やっといまだに半角カナ文字が使われている世界にたどりついた.

しかし仕様を公開しない,SDKでお金をとる,というのでセキュリティがはたしてまもれるものなのか...世界中でつかわれ,かつ脆弱という主張がある Mifare Classic でも,いまだ電子チケットシステムがやられたという話はきかないけれども.
次期チップは NXP と SONY で共同開発するという話もあるようなので期待したいですね.

2012年7月3日火曜日

Mifare と Felica 同時対応

NXP の NFC チップ PN532 をつかった Adafruit の RFID reader shield と Arduino をつかって,Felica の IDm ? カード ID 8 バイトを読み出すことに成功した!ような気がする.
Mifare の UID とデータセクタの読み書きは,これまでサンプルコードもライブラリも拾ってこれるし,StrongLink 社ほかの安価なリーダでできていた.Felica もスイッチサイエンスなどがリーダモジュールなど販売していて SONY のサンプルコードなどがあるようだった.しかし,欧米では Felica はほぼ使われておらず,日本では Mifare がマイナーであるため,両対応のNFCの情報はとぼしかったのだ.
今回はPN532のユーザーマニュアル?とアプリケーションノート AN10609_3, PN532 C106 をもとにして,というかよく見たら Felica reader としてのコマンドサンプルが載っていたので,Adafruit の I2C PN532 ライブラリを参考にしながら自家製ライブラリを作った.GitHub の Arduino-sketches の libraries の RFID_PN532_I2C がそれだ.
これで両方に切り替えながらカードを検知すれば,両方式対応のカードリーダーができるであろう,きっと.