時事随想

時事随想

ニュースや新聞を見て、想ったことを綴った随想・論説集

【コロナ】 デジタル庁のワクチン接種証明のAPI仕様をざっとみた。残念!

 デジタル庁のワクチン接種証明のための「二次元コード及びAPIの仕様」*1に対して意見公募がされています*2, *3。資料は実質、3ページのパワポです。

 ざっと見ました。

f:id:toranosuke_blog:20211004095708j:plain:w400

1. ワクチン接種証明書の電子交付の方向性について

f:id:toranosuke_blog:20211003174623j:plain

ワクチン接種記録システム(VRS)を利用

 スマホアプリや事業者APIを介したリクエストに対して、ゲートウェイサーバを介して、ワクチン接種記録システム(Vaccination Record System; VRS)へアクセスして、ワクチン接種記録を取得し、接種証明を交付します。

マイナポータルを用いた申請

 マイナポータルのぴったりサービス*4を利用します。当然ですが、申請にはマイナンバーカードが必須です。いまのところ、自治体窓口対応は想定していません。

 なお、海外渡航者向けの紙の接種証明書については、既にマイナポータルから申請できるみたいなことが書いてあります*5

f:id:toranosuke_blog:20211004082252p:plain
(対応している自治体を発見できないのですけど...)

2. 渡航向け二次元コード付き証明書(案)

f:id:toranosuke_blog:20211003174724j:plain

渡航向けQRコード

 渡航向けQRコードは、ICAOの規格です*6。出入国管理でICAO規格は必須でしょう。ちゃんと規格準拠すれば、これはこれで問題はないでしょう。

 EU規格*7, *8など別規格への対応も必要もあるかもしれませんが、まずはICAO対応です。

3. 国内向け二次元コード付き証明書とAPIの仕様(案)

f:id:toranosuke_blog:20211003174759j:plain

国内向けQRコード

 SMART Health Cardsという規格*9, *10を想定しています。よく知らないですが、これも、この規格にちゃんと準拠すれば、問題はないのでしょう。

 SMART Health Cards におけるワクチン接種証明用の規格は、HL7(Health Level Sevel International)という規格団体が策定しているFHIR(Fast Healthcare Interoperability Resources)規格*11となるようです(間違っているかも)。バージョンは 0.6.2 Ballot Version。安定するまでは時間がかかりそうですが、まあ、仕方がないです。

接種情報取得API

接種情報取得APIの仕様
予約サイト等での利用を念頭に置き、ワクチン接種情報を取得するAPIも提供予定です。
(1)「接種券番号」「生年月日」の情報を入力する
(2)「最終接種回数」「最終接種日」等の情報を返す

 おい、責任者出てこい!(怒)

 防衛省のワクチン接種予約システムに、遂に「生年月日」でアクセス制限できる機能が付きました!というレベルの素敵なAPI仕様です。

4. あまりに論外なAPI仕様

低すぎるセキュリティ強度

 接種情報取得API仕様は、インタネット経由でアクセスするための仕様です。インタネット経由のアクセスのためのアクセスキーが、「接種券番号」+「生年月日」になっています。

 生年月日では4桁PINか5桁PIN程度のセキュリティ強度しかありません。あまりにもセキュリティ的に問題なので、「最終接種回数」「最終接種日」しか返さない仕様のようです。

同APIは、「接種券番号」と「⽣年⽉⽇」を送ると、「最終接種回数」と「最終接種⽇」を返す仕様を想定している。「接種券番号や⽣年⽉⽇をランダムに⼊⼒して、不正に接種情報を取得することが懸念される」(デジタル庁の村上敬亮国⺠向けサービスグループグループ⻑)ため、返す情報は接種記録を確認するために最低限必要なものに限った。
https://xtech.nikkei.com/atcl/nxt/column/18/00001/06039/

 サイバー防御が十分でないならば、リバースブルートフォース攻撃で「接種券番号」「生年月日」「最終接種回数」「最終接種日」が抜き出せます。「これを抜き出して何が美味しいの?美味しくないから、誰も攻撃しないでしょ。だから、ザルでいいでしょ」という安全設計思想です。死んでください。

 信頼できる事業者だけにシステムへのアクセス鍵を渡して、「攻撃はしない、攻撃をさせないように運用してください」ということなんですかね。で、信頼できる事業者だけに事業者を絞れるの?(「誓約書を書かせて、安全性は確保されました!」とする政府お得意の誓約書ソリューションをやりそうな気がする...)

なりすましが容易

 氏名さえも返さない仕様なので、なりすましが容易にできます。ワクチン接種している人から接種券番号と生年月日を教えてもらえれば、接種証明が不正入手できます。

 民間事業者側で利用者の身分証明書の生年月日を教えてもらって、身分証明書の生年月日と照合すれば、同じ生年月日の人を探すことが必要になるので、ハードルが高くなりますが、飛行機や旅行の予約ならまだしも、イベントやお店の予約などで生年月日まで要求されたら嫌ですよね。身分証明書を使って本人確認をする時に、身分証明書にも生年月日が記載されているから問題ないという話はあるかもしれないが、ネット申請時に身分証明書を提出するの?もっと嫌。

 そもそも、発行サーバーへのアクセスキーである「接種番号」+「生年月日」は、事業者側には渡さないようにシステムを組むはず(なんとなく怪しそうだが)。そうなると、接種証明の生年月日と身分証明書の生年月日は一致する必要はないので、やはりなりすましが容易です。

本人は接種証明の発行履歴を確認できない

 接種証明の発行履歴をユーザーが確認できるようにするためには、ユーザーにシステムにログインする機会を与える必要があります。すると、単純な「接種券番号」+「生年月日」のログインIFをインタネットに晒す必要があります。さすがに、セキュリティ強度が低いIFをインタネットに晒すわけにはいきませんから、ユーザーが接種証明の発行履歴を確認できるようにはしないのでしょう。

 これはこれで問題で、接種証明の不正利用を本人が発見できないことになります。

 ほとんどの人は確認することはないでしょうが、1%の人が確認するだけでもユーザーが膨大になる(はず)なので、システム攻撃があれば検知される可能性があります。(医療保険の医療費のお知らせのように)発行履歴をはがきで通知するというのはあるのかもしれませんが、ITとは程遠い世界です。

5. 発行システムへのアクセスは、どうすればよいか?

 証明書発行のためのユーザ認証について、ちょっと考えてみました。例えば、次のものがありそうです。

① マイナンバーカードを使う。
② 接種券番号にパスワードを付けておく(今更)。
③ 紙でパスワードをユーザーに郵送する。
④ 接種券番号とマイナンバーをID/PWとして発行システムへアクセスする。
⑤ 接種券番号と免許証番号・旅券番号をID/PWとして発行システムへアクセスする。
⑥ 発行システムへのアクセス権限をLINEやgoogleなどのアカウントに与える。
⑦ 発行システムのアクセスキーとしてEdyなどのICカードを用いる。

 それぞれの実現性は、以下の通り。

①:実施困難。マイナンバーカードが普及率や利用規制などのため。
②:過去の話。
③:実現可能。
④:実現可能。民間側のマイナンバー利用には規制緩和が必要。
⑤:実現可能。政府は、健康保険証と同様に、運転免許証・パスポートとマイナンバーを紐付けることは可能。マイナンバーカードの健康保険証化には、マイナポータルにアクセスして、利用許諾をする必要があったが、保険証の場合は、マイナンバーカードを民間が利用するケース。こちらは、マイナンバーを使うのは政府システムの内部の話で、外部とのやりとりには、マイナンバーは使わない。マイナンバーの規制には抵触しない(と思うが、よく知らない)
⑥:実施困難。少なくとも一回は、マイナポータルなどで利用許諾することが必要。
⑦:実施困難。同上

 マイナンバーカードを使わずに簡単に実現できるのは、ID/PW方式でしょう。一回、ユーザーがシステムにログインしたら、後は2段階認証を設定するなり、なんなりすればよい。

 ID/PW方式なら、③(PWを郵送)、④(マイナンバーをPW)、⑤(運転免許証番号・旅券番号をPW)でしょうか。マイナンバーの規制を考慮しないならば、マイナンバー、運転免許証番号、旅券番号で発行システムへアクセスできるようにするのが、簡単そうです。マイナンバーは国民全員が持っているので、全国民をカバーできます。

 でも、マイナンバーは拒否反応が強いのですよね...。すると、やはり、③のPWを郵送するということになるのでしょうかね?

6. 最後に

 デジタル庁のAPI仕様をみてかなりズッコケましたが、これが、我が国のデジタル庁の技術レベルなのでしょうか?

 非常に残念です。

(2021/10/3)

関連記事

Copyright © Tenyu Toranosuke. 時事随想 All Rights Rreserved.