COCOAのハッシュ(HASH)値から接触日を調べる方法

 
 
厚生労働省Q&A Q4-7によると、iOSの「一致したキーの数」が1以上という表示は、「1メートル以内で15分以上という判定基準よりも広範な」範囲での陽性者との接触を示します。この広範な範囲での陽性者との接触日(非公式)を知りたい方向けに、引き続き、HASHによる接触日シート別冊の更新を続けます(2020/9/25追記, 2021/1/12修正)。
 
iOS 12.5か、iOS 13.5より新しいバージョンでは、iPhoneが検出したすべての接触について、一致したキーの数(matchedKeyCount)を数え、表示するようになりました。Androidもバージョンによらず同様と思います。
Appleによる開発者向け情報
 

1. ハッシュキーで接触日(非公式)を調べる

接触確認アプリCOCOAでは接触なしと表示されているのに、iOSで一致がでるのは、正常です。
 
 
接触確認アプリCOCOAの濃厚接触
→ 1m以内15分以上という判定基準内での陽性者登録社と接触
 
 
iOSやAndroidで一致したキーの数が1以上
→ 例えば3mで10分など、COCOAでは接触ありとして表示されない「広範な」接触
(2021/1/12修正)
 
 
非公式ですが、iOSにあるデータ(一致があるキーのHASH)を調べて、「接触日シート別冊」にいき、そのHASHで「広範」かもしれない接触日の候補を推定する方法があります(9/27修正)。
 
 Androidの方は、Android版のCOCOAでキーの一致がでたときにHASH検索を使わずに接触日を推定する方法を見てください(2021/1/12追記)。
 
 

1.1 一致のあるHASHをみつけます。

(1)「接触チェックの記録」画面でみる

[iOS 13.6まで] 設定→プライバシー→ヘルスケア→COVID-19接触ログの記録→接触チェックの記録
 
[iOS 13.7] 設定→接触通知→接触のログ記録の状況→接触チェックの記録
 
接触チェックの記録
 
この接触チェックの記録画面で、一致のある日時(タイムスタンプ)開いて、「チェックの詳細」画面にて一致したキーの数が1以上の画面を探してください(表示例は0です)。キーの数1以上で、一致があったら、画面のスクショをとってください。
 
その画面のHASHが、目的のHASHです。画面例では、70DF….です。
 
1日13個のタイムスタンプがあるので、3日分だと39回タップしないといけません。大変ですね。
ファイルへの検索でチェックすることもできます。
 

(2).「接触チェックの記録を書き出す(ExportChecks.json)

「接触チェックの記録」画面の一番したの方に、「接触チェックの記録を書き出す」というボタンがあります。これをタップすると、ExportChecks.json というファイルをメールしたり、保存したり、DropBoxやGoogleDriveで自分の Mac / PC に送ることができます。
 

(3). “MatchCount” : 1 (一致)

“MatchCount” : 1 と、MatchCountが0ではない組みのHASHを特定します。
1つのExportChecks.jsonに複数の一致が含まれていることがありますので、複数の一致を見落とさないようにご注意ください。
 
 
ExportChecks V1
 
 
ExportChecks V2
 
“Files” : [] のあるものが、iOS 13.7から採用されたバージョン2のフォーマットです。
またバージョン2では、画面の「提供されたキーの数」は”KeyCount”に対応します。
 
バージョン1では、「提供されたキーの数」は “RandomIDCount” です。13.6で受信したデータも13.7にアップデート後はバージョン2で書き出されます。
 

1.2 HASHから接触候補日(非公式)を推定します。

この接触日シート別冊に移動して、[HASH値 次で始まる 値を入力] の「値を入力」欄に、調べたHASHの例えば最初5つの文字を入力してください。ここでは 70DF と4文字、入力しました。
 
 
接触日シート別冊 初期画面
 
 
行が絞られて1つになりましたでしょうか。
 
 
接触日シート別冊 検索結果ヒット
 
 
そうしたら、鈴木健治は、アプリが正常に動作していたら、その行の「接触候補日」(非公式)を表示しただろうと、推定します。この画面のスクショをとっておいてください。
 
一致が2以上みつかった場合、1つずつ繰り返してください。
 
なお、接触の時刻は、正常なアプリであっても、誰にも表示しない仕様となっています。
 
ハッシュ値を大文字ではなく、小文字、例えば、 70df と入力すると、ヒットしないのでご注意ください。
 
 
接触日シート別冊 検索結果ヒットせず
 
 

接触日シート別冊

 
 
HASHから接触日を調べる方は、上の「接触日シート別冊」をクリック(タップ)して移動してください。
 
 
以下、一致の情報からわかることや、このHASHの求め方などご説明しています。
 
 
 

2. 一致の意味や日付の関係

2.1 一致したキーが1つのとき

(1). 日付の関係

ExposureChecks(チェックの詳細)のタイムスタンプは、あなたの端末で、陽性者のキーと、過去14日間にあなたの端末と接触があった端末のキーを照合した日時です(照合日)。自動なら深夜から未明、手動なら接触確認アプリの起動時です。
 
接触日シート(別冊)にあるタイムスタンプは、陽性者のキー(提供キー,診断キーのこと)がサーバーから配信された日時(配信開始日)です。日付けの変わる0時直後に、昨日登録分がサーバーから配信され始めます。
 
陽性登録日は、陽性と診断された陽性者さんが、処理番号を入力して陽性登録した日で、配信開始日の前日です。
 
陽性者さんが、検査で陽性となった日は、陽性登録日の数日前から当日と考えられます。検査を受けたのはさらにその前です。
 

(2). 接触日に陽性者さんが感染していた可能性

接触日が配信開始日の2日前であれば、その接触した人は感染していた可能性が高いと思われます。
 
それ以前は、わかりません。接触したときには、陽性者さんは感染していなかった可能性もあります。
 

(3). 接触時刻はわからないの?

Apple | Googleの仕様で、日付のみ開示するようになっています。陽性登録者さんのプライバシー保護を厳重にするための思われます。
 

2.2 一致したキーが2つ以上のとき

(1). 照合日が同じ日に、複数の一致があった場合

→陽性者さんが同一人物の可能性はあります。
 
一致が1日と3日の2回で、照合日が5日の場合、3日の接触と1日の接触は同じ人である可能性はあります。もちろん別人の可能性もあります。
 

(2). 照合日が違う日に、複数の一致があった場合

→陽性者さんは異なる人の可能性がとても高いです。
 
陽性者さんが陽性登録したあと、接触があっても通知されません(プライバシー保護の仕様,今後の開発対象として検討されている形跡はあるが、通知するようになるとしても当分先)。
 
一度接触ありと通知された陽性者さんとの接触が、再度、一致として通知されるのは、その陽性者さんが治癒なさって、ふたたび感染し、陽性登録した場合のみです。
 
2日に照合して一致、6日に照合して一致、という場合、1日に陽性登録して、すぐ治癒して、さらに感染して5日に検査結果でて陽性登録という日程の場合に、同一人物となりますが、考えにくいです。
 
 

3. ハッシュ値などの求め方のメモ

3.1 iOSの「チェックの詳細」画面に表示されるHASH

このHASHは、接触があったか照合するための元となる陽性者のキーが入っているファイル(export.bin)を特定する値です。
通知サーバーからzipファイルをダウンロードして、zipファイルを解凍、export.binのHashを”SHA 256″でとった値です。
 

3.2 現在の日本の運用と推定の検証

zipファイル (export.bin)には、現在の日本の運用では、接触日が同一のキーが集められています。一致がでた記録について、zip番号がわかれば接触日の候補(非公式)を推定できます。
 
具体的には、キーの使用開始日時である “rolling_start_interval_number” から開始する24時間が接触日です。”rolling_start_interval_number”は、1つのzipファイルに含まれる複数のキーで、運用上、すべて同一です。日本時間で入力されていると想定しています。
 
この求め方で求めた接触日を、2020年8月15日から9月13日まで、100名にお伝えしてきました。
 
接触候補日をお伝えした際に、「違和感がありますか」と質問をして、自らご回答ただいた範囲で、どの接触で一致がでたか、話し合ってきております。
2週間のうちその日しか外出していないとの方も10名程度おり、また、深夜から早朝までの行動を知らせてくださった方、2日連続して一致がでる方がほぼいなかったなどの対話から、この推定結果は確からしいと考えています。
 
接触確認アプリCOCOAの不具合は、アプリ側とOS側を通したテストをすることが難しい点にあると分析しています。そのため、実際のユーザーの声に耳を傾け、一緒に考えながら、アプリとOSを通した動作の整合性を検討してきております。
 
—– 9月27日追記 —–
接触確認アプリココアを1.1.4, iOSを14にアップデートしたあと、iOSで一致があるのに、接触確認アプリCOCOAで接触ありの表示にならない場合、いったいどういうことなのか、可能性は2つあります。
 
 
案1 1m以内15分以上の判定基準を満たさない接触であったため、アプリで表示されない。
案2 接触確認アプリの不具合が修正されておらず、判定基準を満たしていながら、アプリで表示されない。
 
 
どちらなのでしょうか。私は、案2の可能性はまだ残っていると、考えてました(2020/9/27)。
その後、2021/1/12までの確認によると、端的には、案1でした。しかし、この判定基準とは異なる理由で、接触確認アプリの不具合で判定基準を満たしていながらアプリで濃厚接触ありと表示されない可能性が発見されました(2021/1/22追記)。
 
結局、ご自身でHASH値(ハッシュキー)などから接触日の候補を特定して、ご自身のその日の行動をふり返り、陽性者の接触がその日だとした場合の感染リスクを考えて頂くのが、良いかと思います。
 
または、人と接するお仕事で陽性者との接触があれば安定して知りたい方は、Android端末との2台持ちにするかです。
 
 
 
そして、iPhoneのiOSで一致がでて、調べた接触日での陽性者との「広範な接触」について感染の可能性があると考える場合、選択肢は次のような感じでしょうか。
 
 
(1)PCR等の検査をする(おそらく自費, ご自身で検査してくれるクリニック等を探す)。検査を受ける場合、接触日から5日経過より後が良いかと思います。接触日から3日目ですと、感染していても陽性がでない可能性が報告されています。
 
(2)公費で検査を受けられるか、一応、保健所に問い合わせてみる。
 
(3)なにもせず普通の生活を継続する(広範な接触ですので、厚生労働省としては普通に生活して良いということなのだろうと思われます。
(広範な接触だけれど念のため自宅待機して欲しく、しかしPCR検査は公費で受けられない、ということではないだろうと思われます)。
 
(4)接触日から14日間はそれなりに他者との接触に気をつけて生活する。
 
重要なことは、接触日から14日など経過したら、完全に普通の人として、陽性者との接触については忘れて、気にせず、楽しく生活していくことだと思います。
 
—– ここまで 9月27日追記 —–
 

4. 著作権表示

本文書及び公開している接触日シートの著作権及び著作者人格権は鈴木健治が保持しております。
 
 

twitterやそのDMで対話してくださった全ての皆様に感謝します。

 
 
 
Copyright 2020-2021, Kenji Suzuki
2020年9月13日-14日執筆, 9月15日図を追加し前後の文章を調整。h3,h4の設定ミスを修正。9月25日厚労省QA 4-7に対応。9月27日タイトルにCOCOAをいれた。「広範」な接触日である可能性を含むことを明記し、文末に現状分析を追記。2021年1月12日matchedKeyCountを判定基準によらず計算していることや、Android版への案内を追記。