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

 
 
厚生労働省Q&A Q4-7によると、iOSの「一致したキーの数」が1以上という表示は、「1メートル以内で15分以上という判定基準よりも広範な」範囲での陽性者との接触を示します。この広範な範囲での陽性者との接触日(非公式)を知りたい方向けに、引き続き、HASHによる接触日シート別冊の更新を続けます(2020/9/25追記, 2021/1/12修正, 2022/1/10修正)。
 
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回タップしないといけません。大変ですね。
COCOAログチェッカー(河原圭佑氏開発)もあります。
手作業で、ファイルへの検索でチェックすることもできます。
 

(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). 接触日に陽性者さんが感染していた可能性

2020年12月16日ごろ配信のCOCOA 1.2.1から、陽性登録者さんの発症日又は検査日の約2日前までの接触の可能性(陽性者のキー)が通知されるように修正されました。発症日3日前や検査3日前は感染力ありますので、キーの一致がでたとき、その陽性登録者さんはほぼ感染していたと考えられます(2022/1/10修正)。
 

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

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

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

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

→陽性者さんが同一人物の可能性はあります。
 
一致した接触日が1日と3日の2回で、キーを受信して照合された日(照合日)が5日の場合、3日の接触と1日の接触は同じ人である可能性はあります。もちろん別人の可能性もあります。
 

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

→陽性者さんは異なる人の可能性がとても高いです。
 
陽性者さんが陽性登録したあと、接触があっても通知されません(プライバシー保護の仕様)。
 
一度接触ありと通知された陽性者さんとの接触が、再度、一致として通知されるのは、その陽性者さんが治癒なさって、ふたたび感染し、陽性登録した場合のみです。
 
 

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が、仕様上の協定世界時UTCの深夜0時(日本時間の朝9時)でミスなく実装されている場合、日本時間の日付ではなく、朝9時にCOCOAの接触日が切り替わり、深夜0時から9時までは日本時間で前の日となります。
私は、COCOAの日付関係は正直いまでも信頼しておらず、実機を使った大規模なテスト結果が公開されるまで、接触日のデフォルトを日本時間としたまま、変更していません(2022/1/10追記)。
 
接触確認アプリCOCOAを1.1.4, iOSを14にアップデートしたあと、iOSで一致があるのに、接触確認アプリCOCOAで接触ありの表示にならない場合、いったいどういうことなのか、可能性は2つあります(以下、2020/9/27追記・2022/1/10修正)。
 
 
案1 1m以内15分以上の判定基準を満たさない接触であったため、アプリで表示されない。
案2 接触確認アプリの不具合が修正されておらず、判定基準を満たしていながら、アプリで表示されない。
 
 
どちらなのでしょうか。私は、2020年9月の時点で、案2の可能性はまだ残っていると、考えてました(2020/9/27)。
その後、この判定基準とは異なる理由で、接触確認アプリの不具合で判定基準を満たしていながらアプリで濃厚接触ありと表示されない可能性が発見されました(2021/1/22追記)。
情報が錯綜していましたが、COCOA 1.1.4以後、Androidにてすべての接触が通知されない不具合があり、2021/2/18のCOCOA 1.2.2の改修にて接触が通知されるようになりました。以後は、案1となっています(2022/1/10追記)。
 
 
 
それでは、iPhoneのiOSでキーの一致がでて、調べた接触日での陽性者との「広範な接触」について感染の可能性があると考える場合、選択肢は次のような感じでしょうか。症状がある場合、発熱外来等にご連絡ください。
 
 
(1) 無症状の場合、接触日(感染している場合には感染日)から4日程度は、マスク無しの会話をする会合や会食、仕事や通学を自主的に避けることが考えられます。キーの一致がでるのは、最も近くて接触日の2日前です。キーの一致がでた時点で、少なくとも2日経過しています。あと2日自主的に接触をさければ、4日となり、発症したかどうかかなりの確率で確認できます。キーの一致がでた時点で、接触日から4日以上経過していることも多いです。
 
(2) 接触日の接触に感染リスクがあったといった心当たりがある場合、保健所等に報告しておくことも考えられます。話の流れによっては、公費で検査を受て欲しいという要請があるかも知れません。地域やその感染状況によると考えられます。
 
(3) なにもせず普通の生活を継続する(広範な接触の接触者に、厚生労働省から正式な要請はなく、問合せ等をした多くの人は「普通の生活をして問題ありません」といった返信を受けているようです。
(4) 発熱外来を受診する。キーの一致の内容をご存じで、スムーズに公費検査してくださるクリニックもあるようです。
 
重要なことは、接触日から14日など経過したら、完全に普通の人として、陽性者との接触については忘れて、気にせず、楽しく生活していくことだと思います。
 
 

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版への案内を追記。2022年1月10日・11日前回以降の変化を反映。