Upgrade to Pro — share decks privately, control downloads, hide ads and more …

マイナンバーカードに2日で対応、4日でリリースした記録 / Supported to the Japanese Individual Number Card in 2 days, released in 4 days

マイナンバーカードに2日で対応、4日でリリースした記録 / Supported to the Japanese Individual Number Card in 2 days, released in 4 days

マイナンバーカードに2日で対応、4日でリリースした記録
@treastrain | @JapanNFCReader

NEW DEBUG!! ~転職してプログラマーになったら一切エラーがでないんだが~ @ CASPUR 2020/05/17 22:00~

More Decks by treastrain / Tanaka Ryoga

Other Decks in Programming

Transcript

  1. Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. マイナンバーカードに2日で対応、

    4日でリリースした記録 @treastrain | @JapanNFCReader 1 NEW DEBUG!! ~転職してプログラマーになったら一切エラーがでないんだが~ @ CASPUR May 17, 2020
  2. 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」リリース
  3. 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
  4. 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
  5. 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
  6. Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. TRETJapanNFCReader

    の対応カード • ICカード運転免許証 ◦ 運転免許証の券面+本籍を読み取れる (氏名、住所、生年月日、免許の年月日、写真…) ◦ 読み取りには交付時に自分で設定した暗証番号が必要 ◦ 日常生活で読み取りを必要とする場面はほとんどない ◦ 仕様は警察庁交通局から公開されている ◦ ISO/IEC 14443 Type B (JIS X 6301) に準拠 ⇒ NFC-B 6
  7. Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. 個人番号カード(マイナンバーカード)

    • 「パスワードは忘れてはいけない」……けど • マイナンバーカードには4つのアプリが入っている ことになっている 10
  8. Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. マイナンバーカード

    4つのアプリ • 署名用電子証明書(公的個人認証 署名用) • 利用者証明電子証明書(公的個人認証 利用者証明用) • 券面事項入力補助用 • 個人番号カード用(住民基本台帳事務用) 11
  9. Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. •

    署名用電子証明書(公的個人認証 署名用) ◦ 6〜16字、英大文字と数字を組み合わせる 5回試行可能 • 利用者証明電子証明書(公的個人認証 利用者証明用) ◦ 4桁の数字 3回試行可能 • 券面事項入力補助用 ◦ 4桁の数字 3回試行可能 • 個人番号カード用(住民基本台帳事務用) ◦ 4桁の数字 3回試行可能 マイナンバーカード 4つのアプリ パスワード 12 同じでもOK
  10. Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. •

    署名用電子証明書(公的個人認証 署名用) ◦ 6〜16字、英大文字と数字を組み合わせる 5回試行可能 • 利用者証明電子証明書(公的個人認証 利用者証明用) ◦ 4桁の数字 3回試行可能 • 券面事項入力補助用 ◦ 4桁の数字 3回試行可能 • 個人番号カード用(住民基本台帳事務用) ◦ 4桁の数字 3回試行可能 マイナンバーカード 4つのアプリ パスワード 13 同じでもOK ⬅ 今回 求められて いるもの ⬅
  11. Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. •

    署名用電子証明書(公的個人認証 署名用) ◦ 6〜16字、英大文字と数字を組み合わせる 5回試行可能 • 利用者証明電子証明書(公的個人認証 利用者証明用) ◦ 4桁の数字 3回試行可能 • 券面事項入力補助用 ◦ 4桁の数字 3回試行可能 • 個人番号カード用(住民基本台帳事務用) ◦ 4桁の数字 3回試行可能 マイナンバーカード 4つのアプリ パスワード 14 ⬅ 今回 求められて いるもの ⬅ 同じでもOK
  12. 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
  13. Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. ライブラリが紹介されている…

    • マイナンバーカードはICカード運転免許証と同じ NFC-B • NFC 通信のコマンドは同じ ISO/IEC 7816-4 • 私が持っていないので対応作業をしていなかった • @GOROman さんがマイナンバーカードで遊んでいる… • 楽しそう…… ⇒ 祖母からマイナンバーカードを借りて、 ライブラリだけでも対応しよう…! 18
  14. Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. ISO/IEC

    7816-4 データの構造 • MF - Master File - 主ファイル ◦ ルートのようなイメージ • DF - Dedicated File - 専用ファイル ◦ ディレクトリのようなイメージ • EF - Elementary File - 基礎ファイル ◦ ファイルのようなイメージ 20
  15. Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. パスワード残り試行回数取得のイメージ

    22 DF を指定 EF を指定 処理 アプリの個数分(4回)繰り返す
  16. 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
  17. Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. コールバック・ネスト地獄

    • DispatchSemaphore で 同期処理に変えてしまうのがいい • システムによるアラートが表示されているので、 ユーザーはキャンセル以外の操作ができない 24
  18. Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. treastrain/TRETJapanNFCReader

    の場合 毎度 NFCISO7816APDU を書かなくていいように 各コマンドを作っておく 25
  19. Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. verify

    の pin には何も入れない verify(tag: detectedTag, pin: [], /// 何も入れない // ... ) 26 • VERIFY コマンドのデータ部 (= APDUのデータ部)には 空の [UInt8] を指定 • 残り試行回数が 分かるようになる
  20. 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
  21. 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
  22. Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. @GOROman

    さんのツイート 29 GOROman @GOROman ストア版のアプリにこの機能が付いたら助かる人増えそうですね。 午前3:29・2020年5月12日・Twitter for iPhone
  23. 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
  24. 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
  25. Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. 総括

    • みんなもマイナンバーカードで遊ぼう • 対応済みのICカード運転免許証のコードを流用できた ◦ 公的書類に関するリリースは少し怖いが、 検証済みのコードがあったから早めの対応ができた ◦ キャッチアップ・アウトプットは大事 • Swift → Java/Kotlin に 翻訳できる方、Android 版をお待ちしています 33
  26. Copyright © 2020 treastrain / Tanaka Ryoga All rights reserved. おまけ

    • App・OSSライブラリ 使ってください ください https://japannfcreader.tret.jp/ https://github.com/treastrain/TRETJapanNFCReader • ライブラリの使い方(パスワード残り試行回数取得方法)について Qrunch で公開しています ください マイナンバーカードのパスワード残り試行回数を調べる | Qrunch(クランチ) 34
  27. 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