台湾に行ってきました
DESCRIPTION
2012-09-08 Fukuoka NFC Hack 4にてTRANSCRIPT
台湾に行ってきました2012/09/08 Fukuoka NFC Hack 4
@treby006
自己紹介• @treby006• まどろみはじめ
• コミケで本出しました。• 冬も出せるといいな。
今日のおはなし• 台北滞在• 国際会議参加報告• 台北の ICカード事情、というか実物紹介
• (おまけ) NFC Shieldで FeliCa IDmを読む
台北の様子• 割と日本と変わらない雰囲気• 食べ物も美味しかったです。• 過ごしやすいところだと思います。• 中国語を少しは知ってた方がいいです。
• 写真の紹介
国際会議• IEEE ASID2012• Anti-Counterfeiting, Security and Identification
• 「偽造防止やセキュリティ、個人識別」がテーマ• 論文内容
• SNSアカウントと Android NFCを組み合わせて会議等の出席者を管理するシステム(の提案)
• 実際に使用したスライドをご紹介
反省点• 及第点の発表• 準備不足• 提案のみしかできなかった• 教員のお力を借りた部分が多すぎた
• 余裕を持ったスケジュール設定が大事• 発表慣れすることも大事
MRT(鉄道 )のシステム• きっぷ• 20~ 50 NTD(約 60~ 150円)• 改札に入るときはかざして、出るときは投入口に入れる• トークン状のMIFARE Ultralight
• データ解析・複製が簡単にできsゴホンゴホン
MRT(鉄道 )のシステム• 非接触 ICカード(悠遊卡/ EASY CARD)• 500 NTDで 400 NTD分チャージされたものが買える。• 何度でもチャージできる。• カード状のMIFARE Classic 1K
• つまりセキュリティ機能付き
(おまけ )NFC Shieldで FeliCa IDmを読む• NFC Shieldってなんぞ?• Arduino用のシールド• NXP(MIFAREの企業 )の PN532というチップを搭載• NFC Shield Wiki : http://www.seeedstudio.com/wiki/NFC_Shield• SPIで通信しているのでシリアルモニタが使える!
• ありがちな勘違い• NFC Shieldは NXP製だからMIFAREしか対応してないよ……• ……実際過去に発表した作品(?)、 NFCキャンドルではタグにMIFARE Ultralightを使っていました。• http://www.slideshare.net/treby/nfc-13347078
• 確かに標準ではMIFAREしかサポートされておりません
問題点• 標準で提供されているライブラリは最低限の機能しか持っていなかったりする• P2Pできねーじゃん!• FeliCa読めないじゃん!
• つまり、ライブラリが整備されていない感じなのです。• PN532のデバイスとしてはできることを、プログラムで実現しようとしたらとても大変
• とはいえいきなり全部は無理なので、まずは FeliCaのIDmを読んでみました( 1 回の RFやり取りで取れます)。
予備知識• コマンドにはホストコマンドと RFコマンドがある。• ホストコマンド:マイコンとチップの間のコマンド• RFコマンド:各 NFCテクノロジ用のコマンド
• ホストコマンドは RFコマンドを内包している
マイコンボード( Arduino)
チップ( PN532)
タグ・
デバイス
ホストコマンド
RFコマンド
予備知識• Polling …… FeliCaカードを検出するための RFコマンド• 参考: FeliCaカード ユーザーズマニュアル
• http://www.sony.co.jp/Products/felica/business/tech-support/index.html#Standard01
• InListPassiveTarget …… R/Wが対象のタグやデバイスを探すためのホストコマンド• FeliCaを対象とする場合、 Pollingコマンドを内包する• 参考: PN532 User Manual
• http://www.nxp.com/documents/user_manual/141520.pdf
現状のコードを読むreadPassiveTargetID 関数
InListPassiveTargetを知る
PN532 User Manualより
現在の InListPassiveTarget
• BrTyの部分が 0x00で渡されている→ボーレートが106kbps、つまり Type A 向け• この時、 InitiatorDataは「まるっと」省ける
現在の InListPassiveTarget
• TargetDataが Type A 仕様なので適当に切りだしている感じ
余計な部分を削って変更readPassiveTargetID 関数
変更後の InListPassiveTarget
• BrTyを 0x01(212kbps)、つまり FeliCa 向けに変える• 実際には引数を取ってるため、 Arduinoプログラムをちょこっと変えると良い。
• FeliCaの場合、 InitiatorDataには Pollingコマンドが入る
Polling
FeliCaカードユーザーズマニュアルより
変更後の InListPassiveTarget
• ここでいう NFCID2tというのが、 IDmを指す。ちなみにPOL_RESは Pollingコマンドのレスポンスを意味する。
• あとはてけとーに欲しいデータを切り出してあげる
実際に返ってきたデータを見る
まとめ• 台湾に行ってきました• カキ氷屋さんの女の子がとても可愛かったです