Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. マイナンバーカードに2日で対応、 4日でリリースした記録 @treastrain | @JapanNFCReader 1 NEW DEBUG!! ~転職してプログラマーになったら一切エラーがでないんだが~ @ CASPUR May 17, 2020
Slide 2
Slide 2 text
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. 2 自己紹介 @treastrain / Tanaka Ryoga https://treastrain.jp 高専卒 → 大学学部4年 → 21新卒予定 Swift (iOS, watchOS), Core NFC 2019年9月22日 iOS・watchOS App 「Japan NFC Reader」リリース
Slide 3
Slide 3 text
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. Japan NFC Reader iOS 13.0 以降の iPhone で 電子マネーの残高・利用履歴の読み取り iPhone で読み取った履歴を iCloud 経由で他のデバイスから確認できる https://japannfcreader.tret.jp/ Twitter @JapanNFCReader 3 iOS App
Slide 4
Slide 4 text
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. treastrain/TRETJapanNFCReader https://github.com/treastrain/TRETJapanNFCReader Japan NFC Reader のコア部分を OSS 化したライブラリ MIT Licence Initial commit: 2019年6月19日 265 Stars 2020年5月16日時点 (複数の企業の社内 Wiki? or Slack? からのアクセスログも…) 4 OSS Library
Slide 5
Slide 5 text
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
Slide 6
Slide 6 text
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. TRETJapanNFCReader の対応カード ● ICカード運転免許証 ○ 運転免許証の券面+本籍を読み取れる (氏名、住所、生年月日、免許の年月日、写真…) ○ 読み取りには交付時に自分で設定した暗証番号が必要 ○ 日常生活で読み取りを必要とする場面はほとんどない ○ 仕様は警察庁交通局から公開されている ○ ISO/IEC 14443 Type B (JIS X 6301) に準拠 ⇒ NFC-B 6
Slide 7
Slide 7 text
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. 本題 7
Slide 8
Slide 8 text
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. 8
Slide 9
Slide 9 text
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. マイナンバーカードの パスワードが分からない 9
Slide 10
Slide 10 text
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. 個人番号カード(マイナンバーカード) ● 「パスワードは忘れてはいけない」……けど ● マイナンバーカードには4つのアプリが入っている ことになっている 10
Slide 11
Slide 11 text
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. マイナンバーカード 4つのアプリ ● 署名用電子証明書(公的個人認証 署名用) ● 利用者証明電子証明書(公的個人認証 利用者証明用) ● 券面事項入力補助用 ● 個人番号カード用(住民基本台帳事務用) 11
Slide 12
Slide 12 text
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. ● 署名用電子証明書(公的個人認証 署名用) ○ 6〜16字、英大文字と数字を組み合わせる 5回試行可能 ● 利用者証明電子証明書(公的個人認証 利用者証明用) ○ 4桁の数字 3回試行可能 ● 券面事項入力補助用 ○ 4桁の数字 3回試行可能 ● 個人番号カード用(住民基本台帳事務用) ○ 4桁の数字 3回試行可能 マイナンバーカード 4つのアプリ パスワード 12 同じでもOK
Slide 13
Slide 13 text
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. ● 署名用電子証明書(公的個人認証 署名用) ○ 6〜16字、英大文字と数字を組み合わせる 5回試行可能 ● 利用者証明電子証明書(公的個人認証 利用者証明用) ○ 4桁の数字 3回試行可能 ● 券面事項入力補助用 ○ 4桁の数字 3回試行可能 ● 個人番号カード用(住民基本台帳事務用) ○ 4桁の数字 3回試行可能 マイナンバーカード 4つのアプリ パスワード 13 同じでもOK ⬅ 今回 求められて いるもの ⬅
Slide 14
Slide 14 text
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. ● 署名用電子証明書(公的個人認証 署名用) ○ 6〜16字、英大文字と数字を組み合わせる 5回試行可能 ● 利用者証明電子証明書(公的個人認証 利用者証明用) ○ 4桁の数字 3回試行可能 ● 券面事項入力補助用 ○ 4桁の数字 3回試行可能 ● 個人番号カード用(住民基本台帳事務用) ○ 4桁の数字 3回試行可能 マイナンバーカード 4つのアプリ パスワード 14 ⬅ 今回 求められて いるもの ⬅ 同じでもOK
Slide 15
Slide 15 text
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. 試行回数をオーバーするとロックされる (役所に行ってロック解除しないといけない) 15
Slide 16
Slide 16 text
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. せめて残りの 試行回数だけでも 分かれば… 16
Slide 17
Slide 17 text
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. @GOROman さんのツイート 17 GOROman @GOROman マイナンバーカードは対応してなかったけど、非常に参考になりました。 -- 日本の NFC、FeliCa カード向けリーダーライブラリ(iOS 13.0 以降) https://github.com/treastrain/TRETJapanNFCReader 午前3:29・2020年5月9日・Twitter Web App
Slide 18
Slide 18 text
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. ライブラリが紹介されている… ● マイナンバーカードはICカード運転免許証と同じ NFC-B ● NFC 通信のコマンドは同じ ISO/IEC 7816-4 ● 私が持っていないので対応作業をしていなかった ● @GOROman さんがマイナンバーカードで遊んでいる… ● 楽しそう…… ⇒ 祖母からマイナンバーカードを借りて、 ライブラリだけでも対応しよう…! 18
Slide 19
Slide 19 text
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. TRETJapanNFCReader の マイナンバーカード対応 19
Slide 20
Slide 20 text
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. ISO/IEC 7816-4 データの構造 ● MF - Master File - 主ファイル ○ ルートのようなイメージ ● DF - Dedicated File - 専用ファイル ○ ディレクトリのようなイメージ ● EF - Elementary File - 基礎ファイル ○ ファイルのようなイメージ 20
Slide 21
Slide 21 text
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. 処理のイメージ 21 MF を指定 DF を指定 EF を指定 処理
Slide 22
Slide 22 text
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. パスワード残り試行回数取得のイメージ 22 DF を指定 EF を指定 処理 アプリの個数分(4回)繰り返す
Slide 23
Slide 23 text
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
Slide 24
Slide 24 text
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. コールバック・ネスト地獄 ● DispatchSemaphore で 同期処理に変えてしまうのがいい ● システムによるアラートが表示されているので、 ユーザーはキャンセル以外の操作ができない 24
Slide 25
Slide 25 text
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. treastrain/TRETJapanNFCReader の場合 毎度 NFCISO7816APDU を書かなくていいように 各コマンドを作っておく 25
Slide 26
Slide 26 text
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. verify の pin には何も入れない verify(tag: detectedTag, pin: [], /// 何も入れない // ... ) 26 ● VERIFY コマンドのデータ部 (= APDUのデータ部)には 空の [UInt8] を指定 ● 残り試行回数が 分かるようになる
Slide 27
Slide 27 text
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
Slide 28
Slide 28 text
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. マイナンバーカード(一部の機能)に対応! 28 treastrain / Tanaka Ryoga @treastrain TRETJapanNFCReader のマイナンバーカード対応を行いました。 今のところはマイナンバーの取得のみとなっていて、master には上がっていま すが内部処理の破壊的変更が行われる可能性は大きいです。 https://github.com/treastrain/TRETJapanNFCReader 午後6:13・2020年5月11日・TweetDeck
Slide 29
Slide 29 text
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. @GOROman さんのツイート 29 GOROman @GOROman ストア版のアプリにこの機能が付いたら助かる人増えそうですね。 午前3:29・2020年5月12日・Twitter for iPhone
Slide 30
Slide 30 text
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. GO サインが出た 30
Slide 31
Slide 31 text
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 Store 31
Slide 32
Slide 32 text
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. リリース! 32 Japan NFC Reader - iPhone で電子マネーの残高チェック @JapanNFCReader 【Ver 1.0.5 アップデート】 App Store にて Ver 1.0.5 のアップデートが配信開始されました。 運転免許証の暗証番号1、マイナンバーカードのパスワードの残り試行回数を確 認できるようになりました。 詳しくは添付の画像およびこのツイートに続くスレッドをご確認ください。 午後0:01・2020年5月13日・TweetDeck
Slide 33
Slide 33 text
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. 総括 ● みんなもマイナンバーカードで遊ぼう ● 対応済みのICカード運転免許証のコードを流用できた ○ 公的書類に関するリリースは少し怖いが、 検証済みのコードがあったから早めの対応ができた ○ キャッチアップ・アウトプットは大事 ● Swift → Java/Kotlin に 翻訳できる方、Android 版をお待ちしています 33
Slide 34
Slide 34 text
Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. おまけ ● App・OSSライブラリ 使ってください ください https://japannfcreader.tret.jp/ https://github.com/treastrain/TRETJapanNFCReader ● ライブラリの使い方(パスワード残り試行回数取得方法)について Qrunch で公開しています ください マイナンバーカードのパスワード残り試行回数を調べる | Qrunch(クランチ) 34
Slide 35
Slide 35 text
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 のユーザーのみなさん、ライブラリの Stargazers 35