NHS COVID-19連絡先追跡アプリの技術的な詳細

公開済み 更新しました
Cover image for: NHS COVID-19連絡先追跡アプリの技術的な詳細

NHS COVID-19連絡先トレースベータ版が、いくつかのドキュメントとともに、 iOSAndroidの両方のオープンソースになりました。 「 Staying alive 」投稿のフォローアップとして、ソースコードを詳しく調べました。 MITのもとでライセンスされているのは嬉しい驚きであり、透明性と品質に対するNHSXの取り組みを示しています。

過去2日間で、多くのエンジニアがアプリを見直して、その方法と方法を発見してきました。 —生き続けることができます。これを理解するには、ほとんどの開発者が持っているよりも、関連するCoreBluetoothフレームワークを深く理解する必要があります。これは、エンジニアが通常掘り下げる必要があるフレームワークではありません。

かなり早い段階で、Androidデバイスでこのトリックがどのように機能するかを見つけて報告しました。今夜は、iOSで起こっていることだけを共有します。順を追ってみましょう。

初回発売

最初の起動時に、アプリはhttps://api.svc-covid19.nhs.uk/api/devices/registrations PUTリクエストを行い、アクティベーションコード、プッシュ通知トークン、ユーザー入力の前半を入力します郵便番号。応答として、サーバーはアプリの設定に保存されているlinkingIdで応答します。このアプリは、予想通り、プッシュ通知とBluetoothアクセス許可も要求します。 場所のアクセス許可を要求しないため、ユーザーの郵便番号は検証されません。郵便番号の最初の数桁のみが必要です。

AndroidデバイスでのBluetooth APIアクセスのプロンプトが位置の許可を要求するように見えるため、Androidアプリが位置データにアクセスするという主張があります。ただし、昨日はこれを非難しました。これは、Android がBluetoothアクセス許可のリクエストを管理する方法の結果です。

Androidで生き続ける

Androidでは、ストックAPIがこの機能をサポートしているため、アプリがバックグラウンドでスリープするのを防ぐのは簡単です。これにより、エンジニアはBluetoothハードウェアに低レベルでアクセスできます。

しかし、iOSでは話はそれほど単純ではありません。アプリがiOSでバックグラウンド化されている場合、その機能は大幅に低下します。これは開発者がBluetoothにアクセスできるようにするAppleフレームワークであるCoreBluetooth CoreBluetoothます。これにより、巧妙な回避策が不足し、バックグラウンドモードで実行されている可能性のあるiPhoneをアプリが検出することが大幅に難しくなります。私たちは数時間にわたって放置された多くのiOSデバイスでテストを行い、ポーリングはそれほど頻繁には行われなかったが、デバイスは依然として一晩中通信したことを指摘しました。

Androidを使用してiPhoneをスリープ解除する

昨日、私たちはまた、バックグラウンドの場合、iOSアプリはBluetooth広告をブロードキャストし続けますが、Appleに固有の異なる方法であると報告しました。私たちはNHSX / Pivotalのエンジニアがこれをリバースエンジニアリングしたと考え、Androidアプリにサポートを追加しました。これが事実であることを確認でき、その技術的な詳細はこちらで確認できます 。つまり、iOSデバイスはアプリをバックグラウンドで維持できることに加えて、Androidデバイスは、バックグラウンドで使用されている時間に関係なく、「スリープ状態」のiOSデバイスを起動できます。

それで、これの意味は何ですか?つまり、アプリが機能するためには、iPhoneがAndroidデバイスの範囲内にかなり頻繁にいる必要があるため、キープアライブを送信してバックグラウンドを維持できます。それ自体では実行可能なソリューションではないかもしれませんが、...

iOSデバイスを使用したスリープ解除…他のiOSデバイス

昨日の「 Staying alive 」投稿では、iOSアプリが「キープアライブ」を使用してバックグラウンドの制限を回避していると信じていたと報告しました。 iOSアプリのソースコードを調査した後、これは実際にそうであると結論付けました。しかし、それらはどのように正確に機能しますか?

簡単に言うと、キープアライブ(このコンテキストでは)は、アプリの開発者が思いついたアイデアです。これは、アプリを実行している2つのiOSデバイス間で送信され、デバイス間の接続を維持するための通知です。これについての興味深いことは、デバイスがキープアライブを受信するとiOSがアプリを起動させて追加の処理を行うことができるため、アプリがかなり長い間起動し続けることができるという効果もあります。

実用的な観点から見ると、これは、アプリが他のデバイスに近接している場合、アプリが生存状態を維持できることを意味します。これは、ある意味で、COVID-19トレースプロジェクトの理論的根拠です。この技術的なトリックがなくても、優れた公共安全の結果を達成するためには、非常に多くのユーザーがトレースアプリを実行する必要があります。

これに関係なく、アプリはすぐにスリープ状態にならず、バックグラウンドで中断状態に入りません。したがって、問題は、回避策を実行可能にするのに十分なiOSまたはAndroidデバイスの周りにほとんどのユーザーがいるかどうかになります。私たちの見解では、これは可能性が高いようであり、人口密集地域に定期的にいるユーザーにとってはなおさらそうです。 Bluetoothはまともな有効範囲を持っています。

数人のオブザーバーは、サイレント通知を受信するアプリの機能が、これらの機能を使用してリモートで起動することを意味すると示唆しました。ただし、これらの機能は、COVID-19を契約している人の近くにいるかどうかをユーザーに通知するためだけに使用されます。アプリはまた、システムによってアプリが強制終了されたことを検出するローカル通知を利用して、ユーザーにアプリを再度開くように指示します。ユーザーがBluetoothを無効にすると、同様の通知が使用されます。

ReincubateのCEO、Aidan Fitzpatrick氏は次のように述べています。

はい、iOS 13.5でリリースされるApple ExposureNotificationフレームワークでは、これらのキープアライブの必要性が取り除かれています。ただし、次のことに注意してください。

  • iOS 13.5はリリースされておらず、数週間はリリースされない可能性があります
  • 昨日までは、最後のiOS 13.5ベータに重大なセキュリティ上の欠陥があり 、Appleのエンジニアリングチームで大幅な強化が行われていることを示唆しています
  • それがリリースされたら、iOSユーザーの大多数がそれをインストールするのに数か月かかる可能性があります(通常、同等のAndroidの採用はより迅速になる可能性があります
  • iPhone 6などの古いiOSデバイスはiOS 13を実行できず、Appleのテクニックを使用できません
  • NHS COVID-19アプリが将来自動的にAppleのフレームワークを使用するように、または両方のメカニズムをデュアル実行するように移行できない理由はありません。

より多くの人々がそれを使用するにつれて、アプリはますます効果的になり、大量採用の利点はこの意味でフライホイール効果を生み出します。オーストラリアのCOVIDSafeアプリは、AndroidデバイスからのバックグラウンドのiOSデバイスの検出をサポートしておらず、このiOSからiOSへの賢いキープアライブメカニズムを備えていなかったため、苦労しました。

このようなテクノロジーを適切に利用する状況を検討することが重要です。接触追跡が命を救うことに成功した場合、それが将来の病気に適用されるかどうかに関してどの基準を評価する必要がありますか?先例が決まったら、このテクノロジーが既存の感染症と戦うために使用されるかもしれないという議論はありますか?異なる社会がトレードオフを異なる方法で評価することが予測されます。

プライバシー保護

プロトコルの背後にある数学の詳細な分析を書くことはこの投稿の範囲から少し外れていますが、プライバシー保護手段を調べました。アプリは、NCSCがリリースしたペーパーを厳密に順守しているようです。ユーザーが症状を報告するまでユーザーのデバイスを離れるキーデータがないことを確認できます。その後、デバイスの匿名化されたキーを使用して、デバイスから離れます。ユーザーが入力した郵便番号の前半は、登録サービスの一部としてAPIに送信されます。

最終的に、このコードは、ユーザーが症状を報告し、NHSに連絡してテストを手配するまで、アプリを使用することによる技術的なプライバシーのリスクはほとんどないと示唆しています。その時点で、テスト結果はNHSによって管理されますが、これはアプリの有無にかかわらず違いはありません。ただし、複数のユーザーが連絡を取り、症状報告し、アプリが提供した識別子を使用してテスト調整するような場合、 それらを一元的に結び付けることができる場合とできない場合があります。それはバックエンドの質問であり、NHSXがアプリのプライバシーレポートで述べているように、 コードはこの点で真実です。

虚偽の報告に対する保護

システムのバックエンドはオープンソース化されていないため、これを確認することはできませんが、市民がCOVID-19の検査で陽性となるまで、プッシュ通知が他のデバイスに送信されないようです。ユーザーが症状を報告すると、テストを予約するために使用できる参照コードが与えられます。 (このコードは、登録セクションで説明したlinkingIdと同じです。)

コメント (1)

The termination notification seems unreliable in my testing of the production app. Might be that the app sometimes terminates before the notification has been scheduled.

They probably need to always have one scheduled a few minutes ahead and keep updating it further into the future on a timer while the app is running. That way when the app dies or is killed the notification is already scheduled.


この記事を改善できますか?

ユーザーからの連絡をお待ちしています。電子メールを送信したり、コメントを残したり、ツイートしたりしないでください。 @reincubate?

© 2008 - 2020 Reincubate Ltd. 無断複写・転載を禁じます。 イングランドとウェールズに登録 #5189175, VAT GB151788978. Reincubate®は登録商標です。 個人情報保護方針 & 条項. マルチファクタ認証をお勧めします。 ロンドンで愛と建てられた。