Arduino+RC-S620/SでPollingに任意のIDmで応答させる
Kick off記事にも書いたように、現在取り組んでいるプロジェクトではRC-S620/Sをカードとして取り扱うこと(カードエミュレーション)を根幹に据えている。この根幹技術について、機能としては実現することができたので、記録を残すこととする。
注:本記事でのカードエミュレーションは、R/WのPollingに任意のIDmで応答させることを指しているので、厳密にはカードエミュレーションではない。IDmのみで認証しているシステムにとってはカードエミュレーションになるのかもだけど。
はじめに
何か新しい機能を実現する際、先人がいると何かと心強いものである。参考文献に示すようにRC-S620/Sでのカードエミュレーションは過去にNFC猛者さんがされている。
そんな猛者さんが福岡NFC勉強会の折に、「これくらいならば簡単にできました」としきりに仰っていたことが頭から離れず、今回カードエミュレーション取り組んでみることにした次第である。
偶然にも最近、RC-S620/Sコマンドリファレンスマニュアル<簡易版>が更新された。新たに追加公開されたコマンドにより、猛者さんより格段に有利な状況で実現することができるようになった。(ちなみに猛者さんはPN533のドキュメント(PDF)を元に頑張ってらっしゃったらしい。ヤバい。)
リーダ・ライタをカードのように取り扱うことについて
ご存じの通り、NFCには以下の3つのモードがある。
- NFC Card Emulation Mode …… NFCカード(タグ)のように見せかけるモード。
- Peer-to-Peer Mode …… NFCデバイス同士で通信するモード。Android Beamなど。
- Reader/Writer Mode …… NFCカード(タグ)に情報を読み書きするモード。
この分類に当てはめるのであれば、おサイフケータイはCard Emulation Mode(FeliCaカードの代替)、NFC機能搭載Android端末はR/Wモード(画面ロック解除中は搬送波を出して相手を探している)で通常動作しているということができる。
また、NFCデバイスはInitiator機能とTarget機能という2つの機能を持っている。これら機能がどのモードで使われているかを整理すると次のようになる(と思う)。
- Initiator機能 …… R/W Mode, P2P(Initiator)
- Target機能 …… Card Emulation, P2P(Target)
つまり、NFCデバイスであるRC-S620/Sを(丁度おサイフケータイのように)NFCカードのように「見せかける」ことも可能なのだ。
TgInitTarget コマンド
RC-S620/Sコマンドリファレンスマニュアル<簡易版> v2.0で新しく公開されたコマンドの一つに、TgInitTargetがある。
このコマンド、パラメータを見れば分かるようにNFCID2(FeliCaでいうところのIDm)を指定できるようになっている。ここを任意に指定すれば自分の望むIDmとして認識させられるのではないかと考えた。
このことを元に、Arduinoライブラリを改造してみた。正直、当初はさっぱり上手く行かなかった(Initというくらいだからsetup関数の中に記述していた)。が、少しコードを工夫するだけでPollingしているデバイスに応答させることができた。
TgInitTarget コマンドどう使うのが正しいのか
上の実装方法であるがどうもRC-S620/SからはACKが返ってきていないようだ。コードをキレイキレイ化していないので確かなことは言えないが、どうも邪道なやり方らしい。ここは現在勉強中である。
何はともあれ、これで私もFeliCa IDmを操る能力を手に入れたぞ(こう書くとなんか悪役っぽい)。
参考リンク
技術関係
- RC-S620/Sコマンドリファレンスマニュアル<簡易版>
2012年5月に更新されたRC-S620/Sの簡易コマンドリファレンス。 - UM0801-03 PN533 User Manual
NXPが公開しているPN533のマニュアル(PDF)。RC-S620/Sとコマンドが割と近い。 - [rcs620s]ターゲットになることはできた(修正)
RC-S620/Sで遊ばれていたころの猛者さん。これ近辺の記事を頼りに実装した。 - [rcs620s]カードっぽく振る舞う
1年以上前には、この記事に書いていることをされていた。 - 一人でもNFC開発
第1回福岡NFC勉強会での猛者さんの発表。IDmの偽装(?)についての話もある。
FeliCa IDmでユーザ認証することの危険性
- Twitter / @somafire: おっしゃる通り QT [rcs620s]カードっぽく …
猛者さんの記事に対する中の人のレスポンス。 - Twitter / @SDK4FeliCa: NFC勉強会@福岡、NFC猛者の最終資料が共有されて …
「IDmだけで認証するのはやめた方がいいよ」と@SDK4FeliCaさんも仰っている。 - ⊂ミ⊃^ω^)アウアウ? ⊂(^ω^)⊃セフセフ? NFC周辺のセキュリティ事情
第1回東京NFC勉強会での@muo_jpさんの発表。IDmだけじゃいけないかもね、という内容。