~その後~接触感染通知アプリCOCOAの仕組みを調べてみた - ラック・セキュリティごった煮ブログ

ラック・セキュリティごった煮ブログ

セキュリティエンジニアがエンジニアの方に向けて、 セキュリティやIT技術に関する情報を発信していくアカウントです。

【お知らせ】2021年5月10日~リニューアルオープン!今後はこちらで新しい記事を公開します。

株式会社ラックのセキュリティエンジニアが、 エンジニアの方向けにセキュリティやIT技術に関する情報を発信するブログです。(編集:株式会社ラック・デジタルペンテスト部)
当ウェブサイトをご利用の際には、こちらの「サイトのご利用条件」をご確認ください。

デジタルペンテスト部提供サービス:ペネトレーションテスト

~その後~接触感染通知アプリCOCOAの仕組みを調べてみた

※こちらの記事は2020年12月21日公開note版「ラック・セキュリティごった煮ブログ」と同じ内容です
f:id:lac_devblog:20211019105741p:plain
こんにちは
デジタルペンテストサービス部のみゅーろっくまるです。
前回の記事で接触感染通知アプリ「COCOA」について、技術的な仕組みを説明しましたが、その後ちょっとした変更があったので追加で解説したいと思います。
前回をまだ読んでいない方、ぜひ読んでみてください。

■前回の記事:接触感染通知アプリCOCOAの仕組みを調べてみた

「保健所が行う積極的疫学調査において濃厚接触者の探索を行う期間」...??

2020年12月15日にCOCOAバージョン1.2.1へアップデートされました。
その際、厚生労働省から下記のような改修をしたという案内がありましたが、

今回の修正版では、保健所による積極的疫学調査との整合性を図る観点から、陽性者との接触の可能性について本アプリで通知を行う対象期間を、保健所が行う積極的疫学調査において濃厚接触者の探索を行う期間にあわせる改修を行いました。

正直何を言っているのかわかりませんよね? 私は分かりませんでした。
(厚労省にはこういう説明をかみ砕ける人がいないのか。。。汗)

~対象期間を、保健所が行う積極的疫学調査において濃厚接触者の探索を行う期間に~

この「積極的疫学調査において濃厚接触者の探索を行う期間」ってなんだよ(# ゚Д゚)
謎の答えはこちらのページにある「(別添)バージョン1.2.1による接触通知の対象範囲の変更のご案内」というpdfファイルにありました。
f:id:lac_devblog:20210728103650j:plain

※これまでは陽性登録から 遡って 14 日間の接触の可能性について通知していましたが、アップデート により、陽性となった利用者が入力した発症日又は検査日の約2日前以降に接触の可能性のある利用者に通知するようになります。

つまりどうやらこう言いたいらしいです。

• これまで:14日前から入力時点までの接触者を捜索
• これから:発症日又は検査日の約2日前以降の接触者を捜索

これで動作はどう変わるんだ?
いまいちわからんのでGithubで公開されているソースコード(アプリになる前のプログラム)を見ました。
結論としては、厚生労働省へTEK(TEK+ENIN=診断キー)を送る陽性者登録の際に

診断日+過去3日分

送るように指示しています。

つまり、以前の説明でつけたこの図のところで、厚生労働省の通知サーバへキーを過去14日分ではなく診断日(発症日)+過去3日分遡って送るように変更したよという事のようです。
f:id:lac_devblog:20210728112943p:plain

「発症日又は検査日の約2日前」ということなので、余裕を持って過去3日分送っているのでしょう。

以前は発症日から過去14日間遡らないといけないと言われていましたが、実際に運用してみてどうやら約2日前から遡ればよいという知見が得られたということでしょうか?
この辺は医学的な観点で統計データを分析した担当の人達でないと判りませんね。

でも変更する際、「⼀時的なID(RPI)の⽐較と判定」の箇所で調整することも出来たはずです。
(つまり、ユーザのスマホ側で比較処理する日数を絞るだけにすることも出来たはず)
ですが、そうしなかったのはやはり「不要なデータはそもそも集めない」ということでしょうか。
相変わらずそのあたりはしっかり考えているようです。

バージョン1.2.1当該箇所の説明

詳細を説明します。
バージョン1.2.0から1.2.1の間にあった変更内容を探したところ、どうやら下記がその部分のようです。

f:id:lac_devblog:20210728113219j:plain
https://github.com/cocoa-mhlw/cocoa/compare/v1.2.0...v1.2.1

Githubなどに慣れていない人のために説明すると、これはソースコードの2つのバージョン間で何が変わったかを機械的に出してくれる機能で、赤は消された内容、緑が追加された内容です。
上記から、

DaysToSendTek = -3;

という変数が新しく増えています。

※(AppConstants.csにある)「OutOfDateDays = -14」は元から使用していなかった変数のようですので、実は関係ないです。
(全体的にAppConstants.OutOfDateDaysではなくConstants.OutOfDateDaysが使われています)

この「DaysToSendTek = -3」はどう使われているかというと

f:id:lac_devblog:20210728113417j:plain
https://github.com/cocoa-mhlw/cocoa/search?q=DaysToSendTek

「ExposureNotificationService.cs」クラスの「FliterTemporaryExposureKeys」というメソッドから呼び出されています

var fromDateTime = diagnosisDate.AddDays(AppConstants.DaysToSendTek);

呼び出し時に診断日(発症日)へAddDaysで加算(-3)しています。

f:id:lac_devblog:20210728113626j:plain
Covid19Radar/Covid19Radar/Services/ExposureNotificationService.cs#L214

そして上記の通り、最終的には送信処理である「ExposureNotificationHandler」クラスの「CreateSubmissionAsync」メソッドに呼ばれています。
つまり、陽性者登録の際、Tekを診断日(発症日)+過去3日分送るように指示しています。

あとがき

ところで、COCOAのダウンロード数は2020年12月15日現在約2,173万件だそうです。 日本の人口が約1億2000万人ですので、1/6(約17%)の人が使っている計算になりますね。

せめて半数の6000万人使ってくれればという気持ちもありますが、最近感染者が報告されている介護施設の高齢者はスマホを日常的に使っていないと思うので、難しい面もあるでしょう。
(ご家族の方でスマホを持たせているよという方は、アプリを入れてあげてください。入れてしまえば操作不要のアプリなので、難しいことはありません。)

ただ、人と人で会話しないと成立しない接客業などの方には特に入れておいて欲しいです。
通知が来ても怖がらなくていいように、感染時のアクションプランをあらかじめ話し合っておくなど、事前に対策を皆で考えるきっかけにするのも良いでしょう。

ちなみに弊社LACは総務よりCOCOAアプリは全員社用携帯に必ず入れるよう指示がありました。
各々の自助努力に任せてしまうと、結局誰も備えないことになってしまいがちですが、弊社のようにあえて指示をしてしまうというのも効果的だと感じました。
仕組みを理解していれば、プライバシーは侵さないアプリとはっきりわかるので、こういう指示をしても問題ないという決断も出来ます。
ぜひお役立てください。