マイナンバーカードに2日で対応、4日でリリースした記録 @treastrain | @JapanNFCReader
NEW DEBUG!! ~転職してプログラマーになったら一切エラーがでないんだが~ @ CASPUR 2020/05/17 22:00~
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved.マイナンバーカードに2日で対応、4日でリリースした記録@treastrain | @JapanNFCReader1NEW DEBUG!! ~転職してプログラマーになったら一切エラーがでないんだが~ @ CASPUR May 17, 2020
View Slide
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. 2自己紹介 @treastrain / Tanaka Ryogahttps://treastrain.jp高専卒 → 大学学部4年 → 21新卒予定Swift (iOS, watchOS), Core NFC2019年9月22日 iOS・watchOS App「Japan NFC Reader」リリース
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved.Japan NFC ReaderiOS 13.0 以降の iPhone で電子マネーの残高・利用履歴の読み取りiPhone で読み取った履歴をiCloud 経由で他のデバイスから確認できるhttps://japannfcreader.tret.jp/Twitter @JapanNFCReader3iOS App
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved.treastrain/TRETJapanNFCReaderhttps://github.com/treastrain/TRETJapanNFCReaderJapan NFC Reader のコア部分を OSS 化したライブラリ MIT LicenceInitial commit: 2019年6月19日 265 Stars 2020年5月16日時点(複数の企業の社内 Wiki? or Slack? からのアクセスログも…)4OSS Library
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved.TRETJapanNFCReader の対応カード 2020年5月16日時点NFC-F (FeliCa®)● 交通系IC(10カード + それと同仕様のもの)● 地方交通系IC(りゅーと)● 楽天Edy、nanaco、WAON● OKICA● 大学生協ICプリペイド● 八達通 - Octopus 5
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved.TRETJapanNFCReader の対応カード● ICカード運転免許証○ 運転免許証の券面+本籍を読み取れる(氏名、住所、生年月日、免許の年月日、写真…)○ 読み取りには交付時に自分で設定した暗証番号が必要○ 日常生活で読み取りを必要とする場面はほとんどない○ 仕様は警察庁交通局から公開されている○ ISO/IEC 14443 Type B (JIS X 6301) に準拠⇒ NFC-B6
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved.本題7
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. 8
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved.マイナンバーカードのパスワードが分からない 9
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved.個人番号カード(マイナンバーカード)● 「パスワードは忘れてはいけない」……けど● マイナンバーカードには4つのアプリが入っている ことになっている10
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved.マイナンバーカード 4つのアプリ● 署名用電子証明書(公的個人認証 署名用)● 利用者証明電子証明書(公的個人認証 利用者証明用)● 券面事項入力補助用● 個人番号カード用(住民基本台帳事務用)11
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved.● 署名用電子証明書(公的個人認証 署名用)○ 6〜16字、英大文字と数字を組み合わせる 5回試行可能● 利用者証明電子証明書(公的個人認証 利用者証明用)○ 4桁の数字 3回試行可能● 券面事項入力補助用○ 4桁の数字 3回試行可能● 個人番号カード用(住民基本台帳事務用)○ 4桁の数字 3回試行可能マイナンバーカード 4つのアプリ パスワード12同じでもOK
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved.● 署名用電子証明書(公的個人認証 署名用)○ 6〜16字、英大文字と数字を組み合わせる 5回試行可能● 利用者証明電子証明書(公的個人認証 利用者証明用)○ 4桁の数字 3回試行可能● 券面事項入力補助用○ 4桁の数字 3回試行可能● 個人番号カード用(住民基本台帳事務用)○ 4桁の数字 3回試行可能マイナンバーカード 4つのアプリ パスワード13同じでもOK⬅今回求められているもの⬅
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved.● 署名用電子証明書(公的個人認証 署名用)○ 6〜16字、英大文字と数字を組み合わせる 5回試行可能● 利用者証明電子証明書(公的個人認証 利用者証明用)○ 4桁の数字 3回試行可能● 券面事項入力補助用○ 4桁の数字 3回試行可能● 個人番号カード用(住民基本台帳事務用)○ 4桁の数字 3回試行可能マイナンバーカード 4つのアプリ パスワード14⬅今回求められているもの⬅同じでもOK
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved.試行回数をオーバーするとロックされる(役所に行ってロック解除しないといけない)15
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved.せめて残りの試行回数だけでも分かれば… 16
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved.@GOROman さんのツイート17GOROman@GOROmanマイナンバーカードは対応してなかったけど、非常に参考になりました。--日本の NFC、FeliCa カード向けリーダーライブラリ(iOS 13.0 以降)https://github.com/treastrain/TRETJapanNFCReader午前3:29・2020年5月9日・Twitter Web App
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved.ライブラリが紹介されている…● マイナンバーカードはICカード運転免許証と同じ NFC-B● NFC 通信のコマンドは同じ ISO/IEC 7816-4● 私が持っていないので対応作業をしていなかった● @GOROman さんがマイナンバーカードで遊んでいる…● 楽しそう……⇒ 祖母からマイナンバーカードを借りて、ライブラリだけでも対応しよう…!18
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved.TRETJapanNFCReader のマイナンバーカード対応19
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved.ISO/IEC 7816-4 データの構造● MF - Master File - 主ファイル○ ルートのようなイメージ● DF - Dedicated File - 専用ファイル○ ディレクトリのようなイメージ● EF - Elementary File - 基礎ファイル○ ファイルのようなイメージ20
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved.処理のイメージ21MF を指定 DF を指定 EF を指定 処理
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved.パスワード残り試行回数取得のイメージ22DF を指定 EF を指定 処理アプリの個数分(4回)繰り返す
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved.NFCISO7816Tag.sendCommand(apdu:completionHandler:)● Core NFC - iOS 13.0 以降● ISO 7816 タグにコマンドを送るときに使う● apdu に Application Protocol Data Unit を指定● 完了後、completionHandler が呼ばれる 非同期○ 何度も繰り返すとなるとコールバック・ネスト地獄に陥る23
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved.コールバック・ネスト地獄● DispatchSemaphore で同期処理に変えてしまうのがいい● システムによるアラートが表示されているので、ユーザーはキャンセル以外の操作ができない24
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved.treastrain/TRETJapanNFCReader の場合毎度 NFCISO7816APDU を書かなくていいように各コマンドを作っておく25
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved.verify の pin には何も入れないverify(tag: detectedTag,pin: [], /// 何も入れない// ... )26● VERIFY コマンドのデータ部(= APDUのデータ部)には空の [UInt8] を指定● 残り試行回数が分かるようになる
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved.状態バイト(SW1-SW2)● SW1○ 0x90(正常終了)○ 0x63(警告)● 0x63 のときの SW2○ 0xCX(X に残り回数)● verify で pin を指定しないと SW1は 0x63 になる● SW2 に残り回数の情報が含まれる○ 0xC3 ⇒ 残り3回let remaining = Int(sw2 & 0x0F)27
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved.マイナンバーカード(一部の機能)に対応!28treastrain / Tanaka Ryoga@treastrainTRETJapanNFCReader のマイナンバーカード対応を行いました。今のところはマイナンバーの取得のみとなっていて、master には上がっていますが内部処理の破壊的変更が行われる可能性は大きいです。https://github.com/treastrain/TRETJapanNFCReader午後6:13・2020年5月11日・TweetDeck
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved.@GOROman さんのツイート29GOROman@GOROmanストア版のアプリにこの機能が付いたら助かる人増えそうですね。午前3:29・2020年5月12日・Twitter for iPhone
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved.GO サインが出た 30
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved.App の方にも実装● ライブラリに対応する作業● 注意事項や各パスワードの説明を書いた● 5/13 1:00 完成 そのときのツイート● 2:43 App Store Connect に提出● 2:48 Waiting for Review● 5:57 In Review● 8:53 Pending Developer Release● 10:12 Ver 1.0.5 Approved for the App Store31
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved.リリース!32Japan NFC Reader - iPhone で電子マネーの残高チェック@JapanNFCReader【Ver 1.0.5 アップデート】App Store にて Ver 1.0.5 のアップデートが配信開始されました。運転免許証の暗証番号1、マイナンバーカードのパスワードの残り試行回数を確認できるようになりました。詳しくは添付の画像およびこのツイートに続くスレッドをご確認ください。午後0:01・2020年5月13日・TweetDeck
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved.総括● みんなもマイナンバーカードで遊ぼう● 対応済みのICカード運転免許証のコードを流用できた○ 公的書類に関するリリースは少し怖いが、検証済みのコードがあったから早めの対応ができた○ キャッチアップ・アウトプットは大事● Swift → Java/Kotlin に翻訳できる方、Android 版をお待ちしています33
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved.おまけ● App・OSSライブラリ 使ってください くださいhttps://japannfcreader.tret.jp/https://github.com/treastrain/TRETJapanNFCReader● ライブラリの使い方(パスワード残り試行回数取得方法)についてQrunch で公開しています くださいマイナンバーカードのパスワード残り試行回数を調べる | Qrunch(クランチ)34
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved.謝辞● JIS X 6320-4:2017(ISO/IEC 7816-4:2013)○ 日本産業標準調査会:データベース にて閲覧● treastrain/TRETJapanNFCReader の README● Special Thanks○ @GOROman さん - 機会の提供・モチベーション○ @k_katsumi さん - SwiftPM に関する情報&プルリク○ App のユーザーのみなさん、ライブラリの Stargazers35