NHS COVID-19 컨택 추적 앱에 대한 기술 심층 분석
NHS COVID-19 접촉 추적 베타는 이제 일부 문서 와 함께 iOS 및 Android 용 오픈 소스입니다. “ 숙박 ”게시물에 대한 후속 조치로, 우리는 소스 코드에 대해 심도있게 살펴 보았습니다. 투명성과 품질에 대한 NHSX의 약속을 나타내는 MIT에 따라 라이센스가 부여 된 것을 발견하는 것은 유쾌합니다.
지난 이틀 동안 많은 엔지니어들이 앱을 검토하여 여부와 방법을 확인했습니다. — 생존 할 수 있습니다. 이를 이해하려면 대부분의 개발자가 소유하는 것보다 관련 CoreBluetooth
프레임 워크에 대한 깊은 이해가 필요했습니다. 엔지니어가 일반적으로 조사해야하는 프레임 워크가 아닙니다.
상당히 초기에, 우리는 그 트릭이 안드로이드 기기에서 어떻게 작동하는지 발견하고보고했습니다. 오늘 밤, 우리는 iOS에서 일어나는 일을 공유하고 있습니다. 단계별로 살펴 보겠습니다.
최초 출시
첫 번째 실행에서 앱은 활성화 코드, 푸시 알림 토큰 및 사용자가 입력 한 상반기를 사용하여 https://api.svc-covid19.nhs.uk/api/devices/registrations
PUT
요청을합니다. 우편 번호. 이에 대한 응답으로 서버는 앱 설정에 저장된 linkingId
응답합니다. 또한 앱은 예상대로 푸시 알림 및 Bluetooth 권한을 요청합니다. 위치 권한을 요청 하지 않으므로 사용자의 우편 번호를 확인하지 않습니다. 우편 번호의 처음 몇 자리 만 필요합니다.
Android 기기에서 Bluetooth API 액세스에 대한 프롬프트가 위치 권한을 요청하는 것처럼 보임에 따라 Android 앱이 위치 데이터에 액세스한다고 주장했습니다. 그러나 우리는 어제이 문제를 발표했습니다. 이는 Android 가 블루투스 권한 요청을 관리 하는 방식의 결과입니다.
안드로이드에 살아 유지
재고 API가이 기능을 지원하여 엔지니어가 Bluetooth 하드웨어에 대한 낮은 수준의 액세스를 제공하므로 앱이 백그라운드에서 잠자기 상태를 방지하는 것은 Android에서 사소한 일입니다.
그러나 iOS에서 이야기는 그리 간단하지 않습니다. iOS에서 앱을 백그라운드로 사용하면 기능이 크게 줄어 듭니다. 개발자가 Bluetooth에 액세스 할 수 있도록하는 Apple 프레임 워크 인 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 기기 범위 내에 상당히 자주 있어야하므로 백그라운드를 유지하기 위해 Keepalives를 보낼 수 있습니다. 그 자체로는 실행 가능한 솔루션이 아니지만 ...
iOS 기기를 사용하여 깨우기… 다른 iOS 기기
어제의 " Staying alive "게시물에서 iOS 앱이 "keepalives"를 사용하여 백그라운드 제한을 우회했다고 믿었습니다. iOS 앱 소스 코드를 검토 한 결과, 실제로 그런 경우라고 결론을 내 렸습니다. 그래도 정확히 어떻게 작동합니까?
간단히 말해서, Keepalive (이 맥락에서)는 앱 개발자가 생각 해낸 아이디어입니다. 앱을 실행하는 두 iOS 기기간에 전송되어 기기 간 연결을 유지하기위한 알림입니다. 이것에 대한 흥미로운 점은 장치가 keepalive를 수신하면 iOS가 앱이 깨어있는 상태에서 추가 처리를 수행 할 수 있기 때문에 앱이 훨씬 더 오랫동안 깨어있게하는 효과가 있다는 것입니다.
실질적인 관점에서 볼 때 이는 앱이 다른 기기와 근접한 상태에서 앱의 활성 상태를 유지할 수 있음을 의미합니다. 이것은 COVID-19 추적 프로젝트의 이론적 근거입니다.이 기술적 인 트릭이 없더라도 중요한 공공 사용자가 좋은 공공 안전 결과를 달성하려면 추적 앱을 실행해야합니다.
이와 상관없이 앱은 백그라운드에서 즉시 잠들지 않고 일시 중단 된 상태가되지 않습니다. 따라서 대부분의 사용자가 iOS 또는 Android 기기를 사용하여 해결 방법을 실행할 수 있을지에 대한 의문이 생깁니다. 우리는 이것이 가능성이있는 것으로 보이며, 인구가 많은 지역에 더 규칙적으로 거주하는 사용자에게는 더 그렇습니다. Bluetooth의 유효 범위는 적당합니다.
일부 관찰자들은 자동 알림을 수신하는 앱의 기능이 원격으로 깨어나 기 위해 이러한 기능을 사용하고 있다고 제안했습니다. 그러나 이러한 기능은 단순히 COVID-19를 계약 한 사람과 가까이 있는지 여부를 사용자에게 알리는 데 사용됩니다. 또한 앱은 시스템에 의해 앱이 종료되는시기를 감지하여 사용자에게 앱을 다시 열도록 지시하는 로컬 알림을 사용합니다. 사용자가 블루투스를 비활성화하면 비슷한 알림이 사용됩니다.
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-to-iOS Keepalive 메커니즘이 없었습니다.
어떤 상황에서 이와 같은 기술을 사용하는지 반영하는 것이 중요합니다. 접촉 추적이 생명을 구하는 데 성공하면 향후 질병에 적용되는지 여부에 대해 어떤 기준을 평가해야합니까? 선례가 정해지면이 기술이 기존의 전염병과 싸우는 데 사용될 수 있다는 주장이 있습니까? 다른 사회는 트레이드 오프를 다르게 평가할 것으로 예상됩니다.
개인 정보 보호
프로토콜 뒤에 숨겨진 수학에 대한 자세한 분석을 작성하는 것이이 게시물의 범위를 약간 벗어난 반면, 우리는 개인 정보 보호 장치를 살펴 보았습니다. 이 응용 프로그램 은 NCSC가 발표 한 논문 을 엄격히 준수하는 것으로 보입니다. 키 데이터가 증상을보고 할 때까지 사용자의 장치를 떠나는 키 데이터가 없음을 확인할 수 있으며, 장치를 떠나기 위해 근접한 장치의 익명 키만 수행합니다. 사용자가 입력 한 우편 번호의 전반부는 등록 서비스의 일부로 API로 전송됩니다.
궁극적으로이 코드는 사용자가 증상을보고하고 NHS에 연락하여 테스트를 준비 할 때까지 앱을 사용하는 경우 기술적 인 개인 정보 보호 위험이 거의 없음을 나타냅니다. 이 시점에서 테스트 결과는 NHS가 관리하지만 app과 는 다르거 나 다르지 않습니다. 그러나, 한 번에 여러 사용자가 응용 프로그램이 그들을 제공하고있는 식별자를 사용하여 테스트를 접촉, 보고서 증상에 와서 준비, 또는 중앙 그들을 함께 묶어 가능하지 않을 수 있습니다. 그것은 백엔드 질문이며 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.