Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Windows 10 mobileでnfc~suica・edy対応編~(公開用)

Windows 10 mobileの端末でSuica、EdyなどのFelicaカードのサービスにアクセスしてデータ(利用履歴など)を取得する方法を紹介します。

  • Login to see the comments

Windows 10 mobileでnfc~suica・edy対応編~(公開用)

  1. 1. Windows 10 MobileでNFC ~Suica・Edy対応編~ @第13回まどべんよっかいち 2015/10/10 青木 宣明(@kumar0001)
  2. 2. 今日の内容 Windows 10 MobileでのNFCタグ、特 にFelicaの読み取りについて • Windows.Devices.SmartCards.SmartCard Reader クラス • NFC Smart Card Reader PC/SC Library • Felicaの読み取り方法 Edyでの注意点と対応策 Windows Phone 8.1の場合の補足
  3. 3. Windows 10 Mobileと 非接触ICカード
  4. 4. NFCとは? NFCIP-2 ISO/IEC 21481 NFCIP-1 ISO/IEC 18092 Type F (Felica) Type A (MIFARE) ISO/IEC 14443 Type B ISO/IEC 15693 Suica,Edy taspo 住基カード 免許証 RFIDタグ いずれも13.56MHz
  5. 5. Windows Phoneと非接触ICカード Windows Phone 8まで • Proximity APIでNFCタグの読み書きが可 能 NDEFと呼ばれるフォーマットだけサポートし ている • Publish/Subscribeでタグデータにアクセ スする AP起動 URI (Web, GeoTag, Telphone, Mail, …) デモ
  6. 6. Windows Phoneと非接触ICカード Windows Phone 8.1以降 • 条件付きながらNDEF形式でないICカード の読み書きが可能になっている What's New in Windows Phone 8.1を読 んで (その5) http://app.strawhat.net/posts/2014/04/12/What s-New-in-Windows-Phone-81-part5/ • 条件 PN547を搭載した端末 現状では同チップのドライバーしか対応していない
  7. 7. 対応する端末 Lumia 730 Lumia 830 Lumia 640 Lumia 640XL
  8. 8. SmartCardReaderクラス Windows.Devices.SmartCards名前 空間 • ICカードリーダ、ICカードを扱うクラス が属している • この名前空間を使ってICカードと通信する SmartCardReader ICカードリーダのクラス。 カード追加・離脱の検知イベント SmartCard ICカードのクラス。 ICカードとの接続、ステータス取得 SmartCardConnection ICカードとの通信のクラス。 データの転送、通信路のクローズ
  9. 9. SmartCardReaderでの通信手順 SmartCardReaderでICカードリーダを取得して、 カード検知のイベントハンドラを設定 カードを検知したらSmartCard.ConnectAsyncでIC カードに接続して、SmartCardConnectionを取得 SmartCardConnection.TrasnmitAsyncでICカード にAPDUでコマンドを送信する SmartCardConnection.Disposeで通信を閉じる
  10. 10. APDU Application Protocol Data Unit • ICカードに送信するコマンドのデータ コマンドクラス, コマンド指示コード, P1, P2, データ長, データ, 出力長 PC/SC Workgroup Specifications 2.01.14 “Part 3. Requirements for PC-Connected Interface Devices”から引用
  11. 11. NFC Smart Card Reader PC/SC Library Windows Phone 8.1でNFCタグと raw通信するライブラリ • https://nfcsmartcardreader.codeplex.c om/ • NFCタグごとにAPDUを組み立てて送信す るクラス群を提供 Windows 10 UWPアプリのサンプル にも収録されている https://github.com/Microsoft/Windows- universal- samples/tree/master/Samples/Nfc
  12. 12. PC/SC PC/SCとは? • 各社のICカードリーダ、ICカードを相互利用 するためのAPI • Microsoftを中心としたワークグループで定義 http://www.pcscworkgroup.com/ PC/SC Libraryでは、APDUを使わない ICカード(Felicaなど)においてもPC/SC に沿ってAPDUでコマンドを送信 • ドライバが適切なネイティブのコマンドに変 換する
  13. 13. PC/SCでの処理の流れ 接続 •SCardEstablishContext – リソースマネージャに接続 •SCardListReaders – カードリーダの取得 •SCardConnect – カードとの接続 通信 •SCardStatus - カードの状態を取得 •SCardTransmit – カードとの通信 切断 •SCardDisconnect – カードとの切断 •SCardReleaseContext – リソースマネージャの解放
  14. 14. PC/SC Libraryでの通信手順 SmartCardReaderでICカードリーダを取得して、 カード検知のイベントハンドラを設定 カードを検知したらSmartCard.ConnectAsyncでIC カードに接続して、SmartCardConnectionを取得 ICカードのAccessHandlerを作成して、ReadAsync / WriteAsyncでデータを読み書き SmartCardConnection.Disposeで通信路を閉じる
  15. 15. Felicaのファイルシステム Felicaカードユーザーズマニュアルから引用 http://www.sony.co.jp/Products/felica/business/tech-support/ Felicaには複数のシステムが共存できて、それぞれ独立している。 ファイルシステムのアクセス単位はブロック(16バイト)で、サービスごと に0から始まるブロック番号で指定される。
  16. 16. Felicaコマンド一覧 Polling カードを検出する ・システムコードを指定 Read Without Encryption 認証が不要なサービスからブロックデータを取得する ・カードのIDm、サービスコード、ブロック番号を指 定 Request Service サービスの存在確認 Request Response カードの存在確認 Write Without Encryption 認証が不要なサービスへブロックデータを書き込む Request System Code カードに登録されているシステムコードを取得する 情報の入手に別途契約が必要なコマンドもあるため、他は省略する。
  17. 17. サービスコード・ブロックコード情報 どこで入手可能? 多くが非公開 有志が解析した情報がWebで入手可 Felicaのアクセスに必要な情報 ・サービスコード ・ブロック番号 ・バイトデータのデータ構造
  18. 18. PC/SCでのFelicaの読み取り Felica.AccessHandlerのReadAsync • Felica.AccessHandler SmartCardConnectionを指定して生成 • 引数 サービスカウント数 サービスコードリスト ブロックカウント ブロックリスト • 戻り値 バイト配列 指定したサービスコードのブロックリストから読み込 んだデータ
  19. 19. Suicaのフォーマット 引用元 http://iccard.jennychan.at-ninja.jp/format/suica.xml
  20. 20. Suicaのフォーマット 引用元 http://iccard.jennychan.at-ninja.jp/format/suica.xml
  21. 21. SuicaのReadAsync結果 デモ
  22. 22. Edyのフォーマット 引用元 http://iccard.jennychan.at-ninja.jp/format/edy.html
  23. 23. Edyのフォーマット 引用元 http://iccard.jennychan.at-ninja.jp/format/edy.html
  24. 24. EDYのReadAsync結果 デモ
  25. 25. nanacoのフォーマット 引用元 http://iccard.jennychan.at-ninja.jp/format/nanaco.html
  26. 26. nanacoのReadAsync結果 共通領域 それ以外の領域
  27. 27. Edyの読み込み失敗 共通領域FE00を使うEdyの読み込みが失 敗する • それ以外のシステムの読み込みはOK 原因の推測 • PC/SC LibraryでFelicaを読むとき、システム コードを指定するタイミングがないため、ワ イルドカードのFFFFでポーリングしていると 考えられる。 このため、常に1番目のシステムにアクセスしてい るのではないか? • 共通領域は2番目に配置されるとの情報があ り、このため共通領域が読めないのでは?
  28. 28. Edyを読むには…? PC/SC LibraryのReadAsyncではなく、 Felicaのコマンドを直接発行する 1. システムコードを指定したPollingを行い、 カードを検出してIDmを取得 2. 取得したIDmでRead Without Encryption を実行して、ブロックデータを取得 Polling + システムコード⇒ IDm取得 Read Without Encryption + IDm + サービスコード・ブロック番号 ⇒ブロックデータ取得
  29. 29. Felicaのコマンド送信 PC/SCのTransparent Exchangeコマンドが あります でも、どうやってFelicaにコマンドを送 信するの? PC/SCライブラリでは Felica.AccessHandleクラスのTransparentExchangeAsyncメソッド
  30. 30. Transparent ExchangeでPolling private async Task<byte[]> FelicaPolling(Felica.AccessHandler felicaAccess, UInt16 systemCode) { byte systemCodeUpper = (byte)(systemCode >> 8); byte systemCodeLower = (byte)(systemCode & 0x00ff); byte[] commandData = new byte[] { 0x00, 0x00, systemCodeUpper, systemCodeLower, 0x01, 0x0f }; commandData[0] = (byte)commandData.Length; var result = await felicaAccess.TransparentExchangeAsync(commandData); return result; }
  31. 31. Transparent ExchangeでRead Without Encryption Read Without Encryptionも同様にコ マンドを作成して送信
  32. 32. EDYのRead Without Encryption結果 デモ
  33. 33. PC/SC Libraryを使わない方法 Windows.Devices.SmartCards名前 空間だけを利用する方法も • SmartCardConnctionのTransmitAsync メソッド • PC/SCの仕様書通りTransparent ExchangeのAPDUを作成して送信する
  34. 34. Transparent Exchange
  35. 35. Transparent Exchange
  36. 36. Windows Phone 8.1と 非接触ICカード
  37. 37. Windows Phone 8.1では? Transparent Exchangeが利用不可 ReadAsyncは利用可能 • Suicaは読み取り可、Edyは不可
  38. 38. まとめ
  39. 39. まとめ 非接触ICカードの読み書き • PN547搭載端末ではSmartCardReaderクラスで実現可 • Transparent ExchangeでFelicaコマンドを発行するこ とでSuica・Edyにアクセスできる PC/SC ライブラリ • PC/SCライブラリのRead BinaryはSuicaは読み込み可、 Edyは読み込み不可
  40. 40. 課題 日本国内でのNFC対応端末 • MADOSMAはNFC非搭載 • 今後の端末でTransparent Exchangeに対応した端末が 出てくるかどうか… Felicaアクセスのライブラリの整備 • PC/SCライブラリに依存しない方向で作成を検討中
  41. 41. 参考資料 Felica • http://www.sony.co.jp/Products/felica /business/tech-support/ PC/SC • http://www.pcscworkgroup.com/ ICカードフォーマット • http://iccard.jennychan.at- ninja.jp/format/index.html システムコードのバイト順序が他サイトと異な るので注意(0xfe00 ⇔ 0x00fe)
  42. 42. 今回扱わなかった発表テーマ ホストカードエミュレーション • カードとして振舞う エミュレータでのNFCの扱い • エミュレータで開発可能

×