NHS COVID-19連絡先追跡アプリの技術的な詳細
NHS COVID-19連絡先トレースベータ版が、いくつかのドキュメントとともに、 iOSとAndroidの両方のオープンソースになりました。 「 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をスリープ解除する
Yesterday we also reported that when backgrounded, iOS apps continue to broadcast Bluetooth advertisements, but in a different way that’s specific to Apple. We believed the NHSX / Pivotal engineers had reverse-engineered this, and added support for it to the Android app. We can confirm that this is the case, and their technical details about it can be found here. What this means is that in addition to iOS devices being able to keep the app backgrounded, Android devices can wake a “sleeping” iOS device up regardless of how long it has been backgrounded for.
それで、これの意味は何ですか?つまり、アプリが機能するためには、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
と同じです。)
によって Joseph
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.