2020-06-16
厚生労働省から接触管理アプリが発表されました。 近距離無線通信、Bluetoothを使用し、このアプリの利用者同士が近くにいる時刻と長さを記録しつづけるアプリです。

もし、検査し陽性となった際、感染を自己申告すると、過去14日間に接触したアプリ利用者にその感染リスクを知らせることができます。 自己申告には、医療機関からもらう処理番号と共に、サーバーでIDが公表されることへの同意が必要です。 利用者は1日1回、アプリが自動的に感染者リストをダウンロードして確認し、自分の端末内の接触データと照合し、該当すれば通知などで伝えます。

GPSなどの位置情報や、電話番号や端末IDなど、個人情報を一切使わず、接触を管理する「接触管理アプリ」の仕組みを調べてみました。


Exposure Notifications: Helping fight COVID-19 - Google」を元に作図。

GoogleとAppleが共同で作成したAPI「Exposure Notifications」を使ったアプリを提供できるのは1国につき1医療関係機関のみ。 今回提供されるアプリは「接触確認アプリケーション利用規約|厚生労働省」からリンクがあるようにオープンソースです。 公開されている設計図(プログラム)を見て、自分でその安全性をチェックすることができます。

GoogleのAndroidとAppleのiOSを足すと、アクティブなモバイル端末のシェア99.68%(対策ダッシュボードアクセスログ調べ)、この2社が組めばスマホユーザーはほぼカバーできます。 特にiOSでは、Bluetoothの電波を常時出し続けることは仕様上できないようで、OS側の支援は必須だったようです。

ドキュメントには、実際は使われない開発途中のものが混ざっているので注意が必要です。 「Exposure Notifications」の「Exposure Notification Bluetooth Specification」と「Exposure Notification Cryptography Specification」で公開されているように、ユーザー毎のIDは連番ではなく、10分ごとに変わります。 常に、同じIDが発信されてしまうと、誰でも取得できるBluetoothの電波を補足し、個人の行動情報が第三者に補足されてしまいます。


Bluetoothで発信されるデータの仕様がこちら。アプリ固有値が公開されるので、接触確認アプリを使っていることは周知されることは了承した上での利用が必要です。


データの流れのもとになった仕様はこちら。暗号化に128bitのAES、iv付きのAES-CTRが使われています。


AES-CTRを使った暗号化を Node.js で、実験してみました。ESモジュール化に対応した、Denoや、ブラウザ上でも使えるものもほしいところです。(src on GitHub)

新型コロナ感染症、COVID-19の現在患者数、新規陽性者が少なく、続々と退院が進み、ついに福井県も0人になりました。 対策病床数として確保した分の2.6%しか使っていない計算です。

COVID-19 JAPAN 新型コロナウイルス対策ダッシュボード

もともとの感染病床数のみ使用するとどうなるか、「対策病床数オープンデータを使用する」チェックボックスを外したものがこちら。

COVID-19 JAPAN 新型コロナウイルス対策ダッシュボード」(対策病床数未使用)
石川県、北海道、東京都、神奈川県でまだ現在患者数が本来の感染症病床数を上回っていることがわかります。

感染をいち早く封じ込めることが重要です。テクノロジー、うまく使っていきましょう!

Tweet
クリエイティブ・コモンズ・ライセンス
本ブログの記事や写真は「Creative Commons — CC BY 4.0」の下に提供します。記事内で紹介するプログラムや作品は、それぞれに記載されたライセンスを参照ください。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / 「一日一創」画像 / RSS