From fac101241c7953ad3edae909feafa4458f1faebd Mon Sep 17 00:00:00 2001 From: Thomas Klingbeil Date: Sun, 17 May 2020 19:53:38 +0200 Subject: [PATCH] Add solution architecture document --- CODEOWNERS | 3 + NOTICE | 2 + README.md | 13 + .../solution_architecture/CWA_Components.png | Bin 0 -> 157579 bytes images/solution_architecture/figure_1.svg | 3 + images/solution_architecture/figure_10.svg | 3 + images/solution_architecture/figure_11.svg | 3 + images/solution_architecture/figure_12.svg | 3 + images/solution_architecture/figure_13.svg | 3 + images/solution_architecture/figure_2.svg | 3 + images/solution_architecture/figure_3.svg | 3 + images/solution_architecture/figure_4.svg | 3 + images/solution_architecture/figure_5.svg | 3 + images/solution_architecture/figure_6.svg | 3 + images/solution_architecture/figure_7.svg | 3 + images/solution_architecture/figure_8.svg | 3 + images/solution_architecture/figure_9.svg | 3 + solution_architecture.md | 238 ++++++++++++++++++ 18 files changed, 295 insertions(+) create mode 100644 images/solution_architecture/CWA_Components.png create mode 100644 images/solution_architecture/figure_1.svg create mode 100644 images/solution_architecture/figure_10.svg create mode 100644 images/solution_architecture/figure_11.svg create mode 100644 images/solution_architecture/figure_12.svg create mode 100644 images/solution_architecture/figure_13.svg create mode 100644 images/solution_architecture/figure_2.svg create mode 100644 images/solution_architecture/figure_3.svg create mode 100644 images/solution_architecture/figure_4.svg create mode 100644 images/solution_architecture/figure_5.svg create mode 100644 images/solution_architecture/figure_6.svg create mode 100644 images/solution_architecture/figure_7.svg create mode 100644 images/solution_architecture/figure_8.svg create mode 100644 images/solution_architecture/figure_9.svg create mode 100644 solution_architecture.md diff --git a/CODEOWNERS b/CODEOWNERS index 64f4e26..cfbd41e 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -4,6 +4,9 @@ # The last matching pattern has the most precedence. # For more details, read the following article on GitHub: https://help.github.com/articles/about-codeowners/. +solution_architecture.md @tklingbeil +/images/solution_architecture/ @tklingbeil + # These are the default owners for the whole content of this repository. The default owners are automatically added as reviewers when you open a pull request, unless different owners are specified in the file. * @SebastianWolf-SAP @tkowark @LukasMasuch @raethlein diff --git a/NOTICE b/NOTICE index 5f45870..17f8fc6 100644 --- a/NOTICE +++ b/NOTICE @@ -8,3 +8,5 @@ Contributors: (Format: First/Lastname , [GitHub-Account-Name], Company) - Mark Düsener [], T-Systems International GmbH - Karsten Reincke [kreincke], Deutsche Telekom AG +- Thomas Klingbeil [tklingbeil], SAP SE +- Eyk Kny [eykkny], SAP SE \ No newline at end of file diff --git a/README.md b/README.md index 8adb497..ffeaa56 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,19 @@ This repository contains the developer documentation and related content. The project scope has been agreed on jointly by Deutsche Telekom AG and SAP SE as contractors and the German Federal Government and the Robert-Koch-Institut as clients. The project scope might change over time as new requirements need to be included or existing ones change. We appreciate feedback to all elements of this project scope document. However, additional features or any other content changes beyond fixes to grammatical issues or typos need to be aligned on by these partners before they can be included in the document. Thank you for your understanding! - [Corona-Warn-App - Scoping Document](scoping_document.md) +### Technical Documentation +The technical documents are intended for a technical audience and represent the most recent state of the architecture. The solution architecture and concepts might change over time as external dependencies (e.g. the framework provided by Apple/Google) are still changing and new requirements need to be included or existing ones change. We appreciate feedback to all elements of these technical documents. +* [Corona-Warn-App - Solution Architecture](solution_architecture.md) + +To be published: +* Corona-Warn-App - Mobile Architecture for iOS and Android +* Corona-Warn-App - Server Architecture +* Verification Server Architecture +* Portal Server Architecture +* System Operation +* Technical Security Concept +* Data Privacy Concept + ## Licensing Copyright (c) 2020 Deutsche Telekom AG and SAP SE or an SAP affiliate company. diff --git a/images/solution_architecture/CWA_Components.png b/images/solution_architecture/CWA_Components.png new file mode 100644 index 0000000000000000000000000000000000000000..ad6581a3b45757f46a0dc92935028e6bca40668c GIT binary patch literal 157579 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 )k{ek6xq&u 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�br^kG8CEK6j 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 I`zFu-2fZ^q)c^nh literal 0 HcmV?d00001 diff --git a/images/solution_architecture/figure_1.svg b/images/solution_architecture/figure_1.svg new file mode 100644 index 0000000..c53eed4 --- /dev/null +++ b/images/solution_architecture/figure_1.svg @@ -0,0 +1,3 @@ + + + Produced by OmniGraffle 6.6.2 2020-05-17 06:27:37 +0000Figure 1Ebene 1Mobile PhoneCWAMobile PhoneCWAMobile PhoneApple iPhone or Android phoneRetrieve results+ TANCorona-Warn-App (CWA)Test result retrieval and exposure notification (tracing)(Apple iOS and Google Android)Verificationof TAN Exposure NotificationFrameworkExposure NotificationDataRBroadcastingof RPI andencrypted metadata ScanningBLE Beacon Mechanics(No active connection)ScanningBroadcastingBluetoothLowEnergy(BLE)Hardware InterfaceVerification ServerCorona-Warn-App ServerDownload of keysand configuration RCDNCDNContent Delivery Network (CDN)RRUpload of keys(+TAN for verification)Aggregated keys+ configurationLaboratory Information System (LIS)Portal ServerHealth AuthorityHotlineRRRRRRRetrieve resultsMobile PhoneCWAOpen SourceExisting SolutionsFigure 1: High-level architecture overview diff --git a/images/solution_architecture/figure_10.svg b/images/solution_architecture/figure_10.svg new file mode 100644 index 0000000..75121de --- /dev/null +++ b/images/solution_architecture/figure_10.svg @@ -0,0 +1,3 @@ + + + Produced by OmniGraffle 6.6.2 2020-05-17 12:02:21 +0000Figure 10Ebene 1Exposure Notification FrameworkTemporary Exposure Key (valid for 24 hours)Hash Key Derivation Function(HKDF)Rolling Proximity Identifier (RPI) KeyAssociated Encrypted Metadata (AEM) KeyRolling Proximity IdentifierAESInterval Number at time of BT MAC address change(Every 10 minutes)AESCounter Mode (CTR)Associated Encrypted Metadata (AEM)Bluetooth PayloadHKDFDiagnosis Key (Temporary Exposure Keys of up to 14 days)RPIRPIRPIRPIRPI(144)AEMAEMAEM(144)AEMAEMMetadata from internals of API(TX Power, Score)Diagnosis Key for uploadFigure 10: Key flow from the sending perspective (as described in the specification by Apple/Google) diff --git a/images/solution_architecture/figure_11.svg b/images/solution_architecture/figure_11.svg new file mode 100644 index 0000000..c2c0f6a --- /dev/null +++ b/images/solution_architecture/figure_11.svg @@ -0,0 +1,3 @@ + + + Produced by OmniGraffle 6.6.2 2020-05-17 12:04:43 +0000Figure 11Ebene 1Exposure Notification FrameworkTemporary Exposure Key (valid for 24 hours)Hash Key Derivation Function(HKDF)Rolling Proximity Identifier (RPI) KeyAssociated Encrypted Metadata (AEM) KeyRolling Proximity IdentifierAESInterval NumberAESCounter Mode (CTR)Associated MetadataHKDFDiagnosis Keys(List of large number of TEKs)TEKTEKTEK Data from serverData collected locallyRPIRPIRPIRPIRPIMatching RPIsAEMSummary of exposuresOutputFigure 11: Key flow from the receiving perspective (as described in the specification by Apple/Google) diff --git a/images/solution_architecture/figure_12.svg b/images/solution_architecture/figure_12.svg new file mode 100644 index 0000000..b0bec8f --- /dev/null +++ b/images/solution_architecture/figure_12.svg @@ -0,0 +1,3 @@ + + + Produced by OmniGraffle 6.6.2 2020-05-17 12:02:21 +0000Figure 12Ebene 1123456781-81-81-81-81-81-81-81-8>= 14 days12-13 days10-11 days8-9 days6-7 days4-5 days2-3 days0-1 days1-81-81-81-81-81-81-81-8D = 0D <= 55 < D <= 1010 < D <= 1515 < D <= 2020 < D <= 2525 < D <= 30D >= 301-81-81-81-81-81-81-81-8A > 7373 >= A > 6363 >= A > 5151 >= A > 3333 >= A > 2323 >= A > 1515 >= A > 10A <= 101-81-81-81-81-81-81-81-8Lower riskHigher riskMore time since exposureLess time since exposureLower contact durationHigher contact durationHigher attenuation (probably higher distance)Lower attenuation (likely lower distance)Transmission Risk factor (meaning defined by app), use is optionalDays since exposureExposure duration (minutes)Signal attenuationWeightfactorWeightfactorWeightfactorWeightfactorxxxxDaysRiskExposureRiskAttenuationRiskTransmission Risk====+++=Total RiskInput:Input:Input:Input:Figure 12: Calculation of the risk diff --git a/images/solution_architecture/figure_13.svg b/images/solution_architecture/figure_13.svg new file mode 100644 index 0000000..a928b94 --- /dev/null +++ b/images/solution_architecture/figure_13.svg @@ -0,0 +1,3 @@ + + + Produced by OmniGraffle 6.6.2 2020-05-17 12:02:21 +0000Figure 13Ebene 1Broadcasting every 250msbroadcast only (298s)listen window(2s)listen window(2s)2 second listen windowsOnly Rolling Proximity Identifierseen during this 2 secondwindow can be captured Those 2 devices will not becaptured, as the framework iscurrently not listening 2 second listen windowsDevice 1Device 2Device 3Device 4Device 5seen once<5 min>50dB (far)seen twice5 min>50dB (far)never seen never seen seen once<5 min<50dB (close)Met on the street3 minutes, distanceMet occasionally7 minutes, distance,but hugged in between only brushedBrushed each other at supermarket2 seconds huggingMet occasionally3 minutes, distance,hugged for prolonged timehuggingStood on train platform2 minutes, distanceRealityDetectedbyphoneFigure 13: Limitations of the Bluetooth Low Energy approach diff --git a/images/solution_architecture/figure_2.svg b/images/solution_architecture/figure_2.svg new file mode 100644 index 0000000..2cb19d0 --- /dev/null +++ b/images/solution_architecture/figure_2.svg @@ -0,0 +1,3 @@ + + + Produced by OmniGraffle 6.6.2 2020-05-17 15:29:53 +0000Figure 2Ebene 1Step 4a (verification through QR code)Step 2 (after the sample has been taken)Step 1 (at the doctors or test center)Patient(1) Flyer withQR codeDoctor/Test CenterLabTest samples+ „Probenbegleitschein“with QR codeDoctor/Test CenterCorona-Warn-AppVerification Server(2) Open Corona-Warn-App + scan QR (optional)(3) Sign up for notifications (optional)Verification Server(1) Check for results(3) Request TANCorona-Warn-App Server(5) Verify TANCorona-Warn-App(4) TAN + Diagnosis KeysStep 3Doctor/Test CenterLaboratory Information SystemTest result +data from QRLabHealth AuthorityresultsName, address,Phone number,(§9 IfSG)Patient(2a)teleTANPortal Server(1) GetteleTAN(6)(7)(8) Store dataVerification ServerVerification Server(2b)GetteleTANNewly addedcomponents and flowsStep 4b (verification through teleTAN)Verification Server(2) teleTAN(3) TANCorona-Warn-App Server(5) Verify TANCorona-Warn-App(4) TAN + Diagnosis Keys(6)(7)(8) Store data(2) Notifyuser(optional)+ask forupload ofdiagnosiskeys(optional)(1) UserentersteleTANandrequestsupload ofdiagnosiskeys Figure 2: Interaction flow for verification process diff --git a/images/solution_architecture/figure_3.svg b/images/solution_architecture/figure_3.svg new file mode 100644 index 0000000..9cc5662 --- /dev/null +++ b/images/solution_architecture/figure_3.svg @@ -0,0 +1,3 @@ + + + Produced by OmniGraffle 6.6.2 2020-05-17 06:27:37 +0000Figure 3Ebene 1Laboratory Information System (LIS)Verification ServerPhoneCorona-Warn-AppServerTANTANDiagnosis KeysTANvalid/not validPOST /resultPOST /tan_checkPrinted QRCodeGUIDScan QR codevia camerahash(GUID)12568121315POST/tanResult911Registration Token4hash(GUID)Result7InitialSetupPollingTANRetrieval10Generate TAN3Generate Registration TokenStore diagnosiskeys16Registration TokenRegistration Tokenhash(GUID)Test resulthash(GUID)hash(Registration Token)hash(TAN)Registration TokenDiagnosis KeysValidate TAN14Figure 3: Data flow for the verification process diff --git a/images/solution_architecture/figure_4.svg b/images/solution_architecture/figure_4.svg new file mode 100644 index 0000000..c6aec7d --- /dev/null +++ b/images/solution_architecture/figure_4.svg @@ -0,0 +1,3 @@ + + + Produced by OmniGraffle 6.6.2 2020-05-17 06:27:37 +0000Figure 4Ebene 1PhoneVerification ServerCorona-Warn-AppServerTANDiagnosis KeysTANtrue/falsePOST/tan_checkteleTANInput viaInput field714151617EmployeeHealth AuthorityPortal Server16Create TAN via Web InterfaceteleTANteleTAN5teleTAN24POST /tele_tanRequest teleTANGenerateteleTAN38teleTANTAN13Registration TokenGenerateRegistrationTokenReg.TokenReg.Token10911hash(TAN)hash(teleTAN)hash(Reg. Token)Diagnosis KeysGenerateTAN12PatientFigure 4: Verification process for teleTAN received via phone diff --git a/images/solution_architecture/figure_5.svg b/images/solution_architecture/figure_5.svg new file mode 100644 index 0000000..d6859e5 --- /dev/null +++ b/images/solution_architecture/figure_5.svg @@ -0,0 +1,3 @@ + + + Produced by OmniGraffle 6.6.2 2020-05-17 06:27:37 +0000Figure 5Ebene 1positivetest(1) keys uploaded immediately Uploads of Diagnosis Keys(3) user is still considered contagiousnegativetest(2)currently not uploadedFigure 5: Upload schedule for Temporary Exposure Keys (Diagnosis Keys) diff --git a/images/solution_architecture/figure_6.svg b/images/solution_architecture/figure_6.svg new file mode 100644 index 0000000..12e80e3 --- /dev/null +++ b/images/solution_architecture/figure_6.svg @@ -0,0 +1,3 @@ + + + Produced by OmniGraffle 6.6.2 2020-05-17 06:27:37 +0000Figure 6Ebene 1Open TelekomCloud (OTC)Mobile PhoneOS API/SDKfor Exposure Notification zxingQR Code LibraryCamerapoll testresultsRRegistrationTokenRTrigger local notificationRProtobuflibraryOS CryptoSDKROS API/SDKfor Push Messages(Notification Framework)Verification ServerCorona-Warn-AppServerTANverificationdownload of keysand parameters Laboratory Information System (LIS)RRPortal ServerHealthAuthorityHotlinesubmitresultrequest newlab/probe IDRRRCDNCDNContent Delivery Network (CDN)RRUpload of keys + TANaggregatedkeyshash(GUID)hash(Reg. Token)DatabaseOpen SourceRread QRcode fromapp (GUID) Operating System (OS) ComponentRRRhash(TAN)Test results hash(GUID)Test labprocessingsamples(Lab Client)Rsee more detailed documentation (to be published)Existing external system/library (consumed)RRretrieve TANregister with GUIDMobile all-in-one application for tracing and test result retrieval(Apple iOS / Google Android)RStorage ServiceRAggregateddiagnosis keysTransport MetadataRemovalRFigure 6: Actors in the system, including external parties (blue components to be open-sourced) diff --git a/images/solution_architecture/figure_7.svg b/images/solution_architecture/figure_7.svg new file mode 100644 index 0000000..6c738e5 --- /dev/null +++ b/images/solution_architecture/figure_7.svg @@ -0,0 +1,3 @@ + + + Produced by OmniGraffle 6.6.2 2020-05-17 06:27:37 +0000Figure 7Ebene 1Phone 1Corona-Warn-App ServerContent Delivery Network (CDN)Upload Diagnosis Key + TANPhone 2Phone nAssembleDiagnosisKeysCorona-Warn-App DatabaseVerify TANINSERTRandomDecisionUpload Dummy Diagnosis Key + Dummy TANSchedulerSELECT datafor currenttime rangeSuccess messageWaitSuccess messageUpload data to CDNDownload diagnosis keys + parameters(Background)Timer withrandom component(Background)Timer withrandom component(Background)Timer withrandom componentDownload diagnosis keys + parametersDownload diagnosis keys + parametersSign up(Scan QR)Verification ServiceGeneratesessionidentifierRegister (GUID)Session IDNew testresultsCheck for results(Registration Token)TimerNo result yetRandom Timer(Dummy check)Dummy dataDummy (Registration Token)Check for results(Registration Token)TimerPositive resultLocalnotificationUser:SharekeysRetrieve TAN(Registration Token)TANFigure 7: Interaction of the mobile application(s) with the backend servers and CDN diff --git a/images/solution_architecture/figure_8.svg b/images/solution_architecture/figure_8.svg new file mode 100644 index 0000000..6bd3d16 --- /dev/null +++ b/images/solution_architecture/figure_8.svg @@ -0,0 +1,3 @@ + + + Produced by OmniGraffle 6.6.2 2020-05-17 15:35:21 +0000Figure 8Ebene 1Signed archive containing multiple protocol buffersbatchNum: Current position within batch (starting at 1)batchSize: Total number of packages in batchHeaderstartTimeendTimeregionbatchNumbatchSize(Diagnosis) KeykeyDatarollingStartNumberrollingPeriodtransmissionRiskLevelexposure_notification.proto (1/2)KeyKeyKeyKeyKeyKeyKeyKeyKeyKeyKeyKeyKeyKeyKeyKeyKeyKeyKeyKeyKeyKeyKeyKeyKeyKeyKeyKeyKeyKeyHeaderexposure_notification.proto (2/2)KeyKeyKeyKeyKeyKeyKeyKeyKeyKeyKeyKeyKeyKeyKeyKeyKeyKeyKeyKeyKeyKeyKeyKeyKeyKeyKeyHeaderFigure 8: Data format (protocol buffer) specified by Apple/Google diff --git a/images/solution_architecture/figure_9.svg b/images/solution_architecture/figure_9.svg new file mode 100644 index 0000000..907c41c --- /dev/null +++ b/images/solution_architecture/figure_9.svg @@ -0,0 +1,3 @@ + + + Produced by OmniGraffle 6.6.2 2020-05-17 12:02:21 +0000Figure 9Ebene 1Mobile phoneEvent Notification FrameworkCollected Rolling Proximity Identifiers+ encrypted metadataOwnTemporary Exposure KeysMobile AppRSet 36 ScoreparametersRStart/StopTracingRAdd positiveDiagnosiskeysRPositiveDiagnosisBluetooth StackMobile PhoneMobile PhoneMobile PhoneBroadcastingof RPI andencrypted metadata ScanningBLE Beacon Mechanics(No active connection)Backend (simplified)RRRUpload ownDiagnosisKeysDownloadDiagnosis KeysDownloadOperationParametersScanningBroadcastingRequired individual developmentRRetrievetestresultFigure 9: Architecture overview of the mobile application (focused on API usage/BLE communication) diff --git a/solution_architecture.md b/solution_architecture.md new file mode 100644 index 0000000..dd5c24e --- /dev/null +++ b/solution_architecture.md @@ -0,0 +1,238 @@ +# CORONA-WARN-APP SOLUTION ARCHITECTURE + +This document is intended for a technical audience and represents the most **recent state of the architecture, which might not be final yet**, as external dependencies (e.g. the framework provided by Apple/Google) are still changing. + +Diagrams reflect the current state but might as well change at a later point of time. [Technical Architecture Modeling (TAM)](http://www.fmc-modeling.org/fmc-and-tam) is used for some of the diagrams. + +Please note that further technical details on the individual components, the security concept and the data protection concept will be made available at a later date. + +Assuming a close association of a mobile phone and its user, we equate the device (phone, app) and the person using it (person, user, individual) and use these terms interchangeable. + +![Corona-Warn-App Components](images/solution_architecture/CWA_Components.png "Corona-Warn-App Components") + +## TABLE OF CONTENTS +1. [INTRODUCTION](#introduction) + 1. [Retrieval of lab results and verification process](#retrieval-of-lab-results-and-verification-process) + 2. [Upload schedule for Diagnosis Keys](#upload-schedule-for-diagnosis-keys) +2. [BACKEND](#backend) + 1. [Data format](#data-format) + 2. [Data URL](#data-url) + 3. [Data retention](#data-retention) +3. [MOBILE APPLICATIONS](#mobile-applications) + 1. [Risk Score](#risk-score) + 2. [Data transfer and data processing](#data-transfer-and-data-processing) +4. [RUNTIME ENVIRONMENT (HOSTING)](#runtime-environment-hosting) + 1. [Bandwidth estimations](#bandwidth-estimations) +5. [CROSS-BORDER INTEROPERABILITY](#cross-border-interoperability) +6. [LIMITATIONS](#limitations) + + +## INTRODUCTION + +To reduce the spread of [COVID-19](https://www.ecdc.europa.eu/en/covid-19-pandemic) it is necessary to inform people about their close proximity to positively tested individuals. So far, health departments and citizens identified these in personal dialogues based on people’s memory, which led to a high number of unknown connections, e.g. when using public transport. + +![Figure 1: High-level architecture overview](images/solution_architecture/figure_1.svg "Figure 1: High-level architecture overview") + +With the Corona-Warn-App (see [scoping document](https://github.com/corona-warn-app/cwa-documentation/blob/master/scoping_document.md )), shown centrally in *Figure 1*, individuals are enabled to trace their personal exposure risk through the means of their mobile phones. The application makes use of a new API made available by Apple and Google, called [Exposure Notification Framework](https://www.apple.com/covid19/contacttracing). It employs [Bluetooth Low Energy (BLE)](https://en.wikipedia.org/wiki/Bluetooth_Low_Energy) mechanics that let the individual phones act as beacons (constantly broadcasting a temporary identifier (called Rolling Proximity Identifier – RPI) to be remembered by), while scanning for identifiers of other phones at the same time (shown on the right side of *Figure 1*). +Identifiers are ID numbers sent out by the phones. To ensure privacy and prevent tracking of movement patterns of the app user, those broadcasted identifiers are only temporary and change constantly. New identifiers are derived from a Temporary Exposure Key (TEK) that substitutes daily at midnight (UTC) through means of cryptography, which will be explained in more detail in *Figure 10*. When the TEKs are linked to a positive test, they remain technically the same, but are called Diagnosis Keys. + +The collected identifiers of other users, as well as the own keys (which can later be used to derive the identifiers) are stored locally on the phone within the secure storage of the framework provided by Apple and Google. This secure storage cannot be accessed directly by the application, but only through the interfaces provided by the Exposure Notification Framework. Some of those interfaces are subjected to [rate limiting](https://developer.apple.com/documentation/exposurenotification/enmanager/3586331-detectexposures), in order to prevent misuse. In case users were tested positively for SARS-CoV-2, they can update their status in the app by providing a verification of their test and select an option to send their recent keys of up to 14 days. Once the keys have been uploaded to the Corona-Warn-App backend server, all keys of positively tested people are aggregated. This list of keys is then made available to all mobile phones with the app installed. Additionally, configuration parameters for the framework are available for download, so that adjustments to the calulation of the risk score can be taken (see the section regarding *Risk Scores*). +Once the keys and the exposure detection configuration have been downloaded, the data is handed over to the Exposure Notification API, which analyzes whether one of the identifiers collected by the phone matches to those of an infected person. Additionally, meta data that has been broadcasted together with the identifiers (e.g. sending power), can now be decrypted and used. Based on the collected data a risk score for each individual exposure as well as for the overall situation is calculated for every single user within the Exposure Notification framework by Apple and Google. Exposures are defined as an aggregation of all encounters of an individual on a single calendar day (UTC timezone). For privacy reasons it is not possible to track encounters with other individuals across multiple days. + +It is important to notice at this point, that the people that have been exposed to a positively tested person are **not informed by a central instance**, but the risk of an exposure is calculated locally on their phones. The information about the exposure remains on the user’s phone and is not shared. + +The app pursues two objectives: First, supporting individuals in finding out whether they have been exposed to a person that has later been tested positively, and second receiving results of a SARS-CoV-2 test on their phone through an online system. This helps to reduce the period until necessary precautions (e.g. contact reduction and testing) can be taken. In order to prevent misuse, users need to verify that they have been tested positively before being able to upload their keys. Through this integrated approach, the verification needed for the upload of the diagnosis keys does not require any action from the users. They only have to confirm to the app and the Exposure Notification Framework that they are willing to share their diagnosis keys. Manual verification is also possible, if the lab that performed the testing does not support the direct electronic transmission of test results to the users' phone or if users have decided against the electronic transmission of their test results. + +### Retrieval of lab results and verification process + +Reporting positive tests to the app is crucial for others to get informed about a relevant exposure and potential infection. On the other hand, a verification before the uploaded of diagnosis keys is required in order to prevent misuse. +There are two main approaches for this verification: The first option is to use the integrated functionality of the Corona-Warn-App to retrieve the results of a SARS-CoV-2 test. Through this integration, the positive test result is already verified and the diagnosis keys can be uploaded right after users have given their consent. The second option is to receive a human-readable token (e.g. a number or a combination of words) and provide this as verification to the app. This token is called teleTAN. + +![Figure 2: Interaction flow for verification process](images/solution_architecture/figure_2.svg "Figure 2: Interaction flow for verification process") + +Both, *Figure 2* and *Figure 3* illustrate the verification process. While *Figure 2* shows the interaction flow of the user, *Figure 3* focuses on the flow and storage of data. Additions to the preexisting 'conventional' process through the introduction of the Corona-Warn-App and the integrated test result retrieval are marked blue in *Figure 2*. + +This preexisting process for the processing of lab results includes that the doctor requesting the test also receives the results, so patients can be informed in a timely manner. As required by law ([§9 IfSG](https://www.gesetze-im-internet.de/ifsg/__9.html)), the responsible health authority (“Gesundheitsamt”) is notified by the lab about the test results as well. The notifications in case of a positive test includes amongst others name, address and date of birth of the affected patients, so they can be contacted and be informed about the implications of their positive test. This is also represented in step 3 of *Figure 2*. + +The flow for using the app is as follows, referencing the steps from *Figure 2*: + +- **Step 1:** Citizens are using the Corona-Warn-App (i.e. broadcasting and collecting RPIs) + - (1) When a test is conducted, they receive an information flyer with a custom QR code. The code is either created on-site or is already available as a stack of pre-printed QR codes. The QR code contains a globally unique identifier (GUID). + - (2) Optionally, they can scan the QR code with the Corona-Warn-App (*Figure 3*, step 1) – if users decide against using the test retrieval functionality of the Corona-Warn-App, they still receive their test results through the regular channels explained before. + - (3) When the code is scanned, a web service call (REST) is placed against the Verification Server (*Figure 3*, step 2), linking the phone with the data from the QR code through a registration token, which is generated on the server (*Figure 3*, step 3) and stored on the phone (*Figure 3*, step 4). +- **Step 2:** The samples are transported to the lab (together with a “Probenbegleitschein”, which has a machine-readable QR code on it, as well as multiple other barcodes (lab ID, sample IDs). +- **Step 3:** As soon as the test result is available (i.e. the samples have been processed), the software running locally in the lab (lab client) transmits the test result to the Laboratory Information System, together with the GUID from the QR code. The Laboratory Information System hashes the GUID and the test result. It is made available to the Verification Server through a REST interface. +- **Step 4a:** After signing up for notifications in step 1, the user’s phone regularly check on the Verification Server whether test results are available (polling, figure 3, steps 5-8). This way, no external push servers need to be used. If results are available, the user is informed about the availability of information and only after opening the app, the result is displayed, together with recommandations for further actions (see scoping document for more details). +- In case the test returned a positive result, users are asked to upload their keys to allow others to find out that they were exposed. If the users agree, the app retrieves a short-lived token (TAN) from the Verification Server (see also *Figure 3*, steps 6-8). The TAN is uploaded together with the diagnosis keys of up to the last 14 days to the Corona-Warn-App Server (*Figure 3*, step 12). +- The Corona-Warn-App Server uses the TAN to verify the authenticity (*Figure 3*, steps 13-15) of the submission with the Verification Server. + - The TAN is consumed by the Verification Server and becomes invalid (*Figure 3*, step 14) + - If the Corona-Warn-App Server receives a positive confirmation, the uploaded diagnosis keys are stored in the database (*Figure 3*, step 16). + - The TAN is never persisted on the Corona-Warn-App Server. + - In case of a failing request, the device receives corresponding feedback to make the user aware that the data needs to be re-submitted. + +![Figure 3: Data flow for the verification process](images/solution_architecture/figure_3.svg "Figure 3: Data flow for the verification process") + +Note regarding *Figure 3* and *Figure 4*: The white boxes with rounded corners represent data storage. The HTTP method POST is used instead of GET for added security, so data (e.g. the registration token or the TAN) can be transferred in the body. + +As mentioned before, users might have decided against retrieving test results electronically or the electronic process might not be supported by the lab. Within step 3 of *Figure 2*, it is shown, that in these cases the health authority (“Gesundheitsamt”) reach out to the patient directly. Also during this conversation the teleTAN can be provided to the patient, which can be used to authorize the upload of diagnosis keys from the app to the Corona-Warn-App Server (step 4b of *Figure 2*). This process is also visualized in *Figure 4*. Whenever patients are contacted regarding positive test results, they can choose to receive a teleTAN. The teleTan is retrieved from the web interface (*Figure 4*, step 1) of the portal service by a public health officer. This service in turn is requesting it from the Verification Server (2-3). The teleTAN is then issued to the officer (4-5), who transfers it to the patient (6). Once the patient has entered the teleTAN into the app (7), it uses the teleTAN to retrieve a registration token from the Verification Server (8-10). Once the user has confirmed the upload of the Diagnosis Keys, the application requests a TAN from the server, using the registration token (11-13). This TAN is needed by the server to ensure that the device is allowed to do the upload. These TANs are not visible to the user. After uploading the TAN and the diagnosis keys to the Corona-Warn-App Server (14), the Corona-Warn-App Server can verify the authenticity of the TAN with the Verification Server (15-16) and upon receiving a confirmation, store the diagnosis keys in the database (17). + +![Figure 4: Verification process for teleTAN received via phone](images/solution_architecture/figure_4.svg "Figure 4: Verification process for teleTAN received via phone") + +The retrieval of the registration token, ensures a coupling between a specific phone and a GUID/teleTAN, preventing others (even when they have the QR code) to retrieve test results and/or to generate a TAN for uploading diagnosis keys. Upon the first connection with the Verification Server, a registration token is generated on the server and sent back to the client. The patients should be asked within the information they receive to scan the QR code as soon as possible, as all further communication between client and server only uses the registration token, which can only be created once. +If a user deletes and re-installs the app, the stored registration token is lost, making it impossible to retrieve the test results. Then, the fallback to the health authority workflow (through a hotline) needs to be used. +From the perspective of privacy protection, sending push notifications via Apple’s or Google’s push service is not acceptable in this scenario. Even though no specific test results are included in the notifications, the message itself signals that the user has taken a SARS-CoV-2 test. Thus, polling and local notifications is used instead. If a user also decides against local notifications, a manual update of the test results is possible as well. + +If a user did not receive a teleTAN from the health authority and/or has lost the QR code, a teleTAN needs to be retrieved from a hotline, which needs to ensure that users are permitted to perform an upload before issuing the teleTAN. It is then used as described before, starting from *Figure 4*, step 7. + +### Upload schedule for Diagnosis Keys + +According to the current state of the documentation from Apple and Google (1.3), the first set of up to 14 Temporary Exposure Keys (called Diagnosis Keys when linked to a positive test) needs to be uploaded after the positive test result becomes available and the consent to the upload has been given (see (1) in *Figure 5*). As the TEK of the current day can still be used to generate new RPIs it cannot be made available right away. If it was uploaded before the end of the day, malicious third parties could use it to generate valid RPIs linked to a positive test. Instead, it is uploaded once replaced by a new TEK (see (2) in *Figure 5*). This upload takes place in the background and require no additional consent, as the framework grants a 24-hour grace period for the request of Diagnosis Keys. + +![Figure 5: Upload schedule for Temporary Exposure Keys (Diagnosis Keys)](images/solution_architecture/figure_5.svg "Figure 5: Upload schedule for Temporary Exposure Keys (Diagnosis Keys)") + +As there is no requirement for users to confirm negative test results, the functionality of uploading Diagnosis Keys on subsequent days remains theoretical. Each of those uploads could take place earliest at the end of each subsequent day (see (3) in *Figure 5*). It would require explicit consent of the user for each day and could take place until the person is not considered contagious anymore, but also not longer, as it would lead to false positives. + +As of now, two uploads are required from the same phone (past diagnosis keys and the current day): This means, the registration token may not be invalidated after the first upload but must remain active. The TANs sent to the Corona-Warn-App Server are only valid for a single use. In case of the teleTAN, an additional registration token is created, which then allows the application to retrieve TANs for individual uploads. + +## Backend + +![Figure 6: Actors in the system, including external parties (blue components to be open-sourced)](images/solution_architecture/figure_6.svg "Figure 6: Actors in the system, including external parties (blue components to be open-sourced)") + +The Corona-Warn-App Server needs to fulfill the following tasks: +- Accept upload requests from clients + - Verify association with a positive test through the Verification Server and the associated workflow.(explained in the chapter “Retrieval of lab results and verification process”, shown in the center of the left side of *Figure 6*) + - Accept uploaded diagnosis keys and store them (optional) together with the corresponding transmission risk level parameter (integer value of 1-8) into the database. Note that the transport of metadata (e.g. IP) of the incoming connections for the upload of diagnosis keys is removed in a dedicated actor, labelled “Transport Metadata Removal” in *Figure 6*. +- Provide [configuration parameters](#data-format) to the mobile applications + - Weights for the risk score categories + - Risk scores for defined values + - Threshold values for risk categories and alerts +- On a regular schedule (e.g. hourly) + - Assemble diagnosis keys into chunks for a given time period + - Store chunks as static files (in protocol buffers, compatible with format specified by Apple/Google) + - Transfer files to a storage service (shown at the bottom of *Figure 6*), which acts as a source for the Content Delivery Network (CDN) + +Those tasks are visualized in *Figure 7*. Each of swim lanes (vertical sections of the diagram) on the left side (Phone 1, Phone 2, Phone n) represent one device with the Corona-Warn-App installed. The user of Phone 1 has taken a SARS-CoV-2 test (which comes back positive later). The users of Phone 1 and Phone n only use the functionality to trace potential exposure. +The Corona-Warn-App Server represents the outside picture of the individual service working in the backend. For a better understanding, the database has been visualized separately. + +![Figure 7: Interaction of the mobile application(s) with the backend servers and CDN](images/solution_architecture/figure_7.svg "Figure 7: Interaction of the mobile application(s) with the backend servers and CDN") + +It is to note that even if a user has not been tested positive, the app randomly submits requests to the Corona-Warn-App Server (represented in *Figure 7* by Phone 2), which on the server side can easily be ignored, but from an outside perspective exactly looks, as if a user has uploaded positive test results. This helps to preserve the privacy of users actually submitting their diagnosis keys due to positive test results. If there were no dummy requests, it would be clear to a malicious third party monitoring the traffic, that users uploading something to the server have been infected. With our approach, no pattern can be detected, and no assumption can be taken. + +If diagnosis keys need to be uploaded on subsequent days of the submission of a positive test result, also that behavior should be represented within the random (dummy) submissions. + +The possibility to identify temporary exposure keys belonging together (i.e. to the same user) is given, as they are posted together – resulting in them being in a sequential order in the database. To prevent this, the aggregated files will shuffled, e.g. by using an ORDER BY RANDOM on the database side while fetching the data for the corresponding file. Alternatively, returning them in the lexicographic order of the RPIs (which are random) is a valid option as well. + +The configuration parameters mentioned above allow the health authorities to dynamically adjust the behavior of the mobile applications to the current epidemiological situation. For example, the risk score thresholds for the risk levels can be adjusted, as well as how the individual data from exposure events influence the overall score. + +Further information can be found in the dedicated architecture documents for the Corona-Warn-App Server, the Verification Server and the Portal Server. The documents will be linked here, as soon as they are available. + +### Data format + +The current base unit for data chunks will be one hour. Data will be encoded in the protocol buffer format, as specified by Apple/Google (see *Figure 8*). It is planned, that in case a data chunk does not hold any or too little diagnosis keys, the chunk generation will be skipped. + +The server will make the following information available through a RESTful interface: +- available items through index endpoints (not all implemented in first iteration) +- the newly added Diagnosis Keys (Temporary Exposure Keys) for the time frame +- configuration parameters + - 36 parameters for configuring the risk score of the Apple/Google Exposure Notification Framework + - Risk score threshold to issue a warning + - Risk score ranges for individual risk levels + +Return data needs to be signed and will contain a timestamp (please refer to protocol buffer files for further information). Using index endpoints will not increase the number of requests, as they can be handled within a single HTTP session. In case the hourly endpoint does not hold diagnosis keys for the selected hour, the mobile application does not need to download it. If, on the other hand multiple files need to be downloaded (e.g. because the client was switched off overnight), they can be handled in a single session as well. + +In order to ensure the authenticity of the files, they need to be signed (according to the specifications of the API) on a server side with a private key, while the mobile application use the public key to verify that signature. To ensure roaming qualities (protocol interoperability with servers in other geographical regions) the plan is to move to a single agreed protocol once finally defined. + +![Figure 8: Data format (protocol buffer) specified by Apple/Google](images/solution_architecture/figure_8.svg "Figure 8: Data format (protocol buffer) specified by Apple/Google") + +### Data URL + +Retrieving the data in a RESTful format, making it clearer to make it available through a transparent CDN (only requesting the files once). + +If no diagnosis keys are available for the selected parameters, but the time frame has already passed, a signed payload with a timestamp and an empty list of diagnosis keys is returned. As also this file is signed by the server (and is different from other files without diagnosis keys, through the timestamp), its authenticity can be verified. + +Further details of the API are explained in the documentation of the Corona-Warn-App Server. + +### Data retention + +The data on the all involved servers will only be retained as long as required. Diagnosis Keys will be removed from Corona-Warn-App Server once they refer to a period more than 14 days ago. TANs on the Verification Server will be removed as soon as they have been used. The hashed GUID on the Verification Server needs to be retained as long as the GUID can be used to retrieve test results from the Laboratory Information System, as otherwise a second upload privilege (i.e. a registration token) could be fetched with the same GUID. + +## MOBILE APPLICATIONS + +The functional scope of the mobile applications is defined in the corresponding [scoping document](https://github.com/corona-warn-app/cwa-documentation/blob/master/scoping_document.md). The applications will be developed natively for Apple’s iOS and Google’s Android operating system. They will make use of the respective interfaces for the exposure notification (i.e. broadcasting and scanning for Bluetooth advertisement packages, see *Figure 9*). For Apple devices (starting from __) an OS version of at least __ will be required for the system to work, as the framework is integrated into the operating system. + +For Android, the features will be integrated into the [Google Play Services](https://9to5google.com/2020/04/13/android-contact-tracing-google-play-services/), which means that only this specific application needs to be updated for it to work. Devices starting with Android __ and integrated BLE chips will be supported. + +![Figure 9: Architecture overview of the mobile application (focused on API usage/BLE communication)](images/solution_architecture/figure_9.svg "Figure 9: Architecture overview of the mobile application (focused on API usage/BLE communication)") + +The app itself does not have access to the exposures collected (i.e. the Rolling Proximity Identifiers), neither is it informed if a new one has been collected by the framework. As visible in figures *Figure 10* and *Figure 11*, the Exposure Notification encapsulates handling of the keys, including all cryptographic operations on them. The only output of the black box upon an infection is a collection of temporary exposure keys, as shown in *Figure 10*. Those are subsequently called diagnosis key. + +![Figure 10: Key flow from the sending perspective (as described in the specification by Apple/Google)](images/solution_architecture/figure_10.svg "Figure 10: Key flow from the sending perspective (as described in the specification by Apple/Google)") + +The encapsulation especially applies to the part where matches are calculated, as the framework only accepts the diagnosis keys as input, matches them to (internally stored) RPIs and returns a list of exposure events – without a link to the corresponding Rolling Proximity Identifiers (see *Figure 11*). With the use of the corresponding Associated Encrypted Metadata Key, the Associated Encrypted Metadata (AEM) of the captured RPI can be decrypted. This metadata contains the transmission power (which is used to calculate the attenuation). Additionally, an epoch (usually a 24 hour window) for the exposure is determined, as well as the duration of the exposure in 5-minute increments (capped at 30 minutes). + +![Figure 11: Key flow from the receiving perspective (as described in the specification by Apple/Google)](images/solution_architecture/figure_11.svg "Figure 11: Key flow from the receiving perspective (as described in the specification by Apple/Google)") + +[Information provided from the framework API to the app per exposure](https://covid19-static.cdn-apple.com/applications/covid19/current/static/contact-tracing/pdf/ExposureNotification-FrameworkDocumentationv1.2.pdf): +- **Attenuation value** (Reported Transmit Power - Measured RSSI) +- **Attenuation “buckets”**, i.e. time spent with an attenuation <=50 and >50 +- **Date** when the exposure occurred (with reduced precision, i.e. one day) +- **Duration** of the exposure (<5/5/10/15/20/25/30/>30 minutes) +- **Transmission risk level** associated with diagnosis key of other person (downloaded from server, together with diagnosis key) +- **Total Risk Score** calculated exposure risk level according to the defined parameters + + +### Risk score calculation + +The information listed above is not visible to the user, but is used internally to calculate a risk score, which again is mapped to one specific app-defined risk level. This easy to understand risk level is displayed to the user. Further information regarding the individual exposure events (such as the matched Rolling Proximity Identifier, the Temporary Exposure Key or the exact time) remains within the secure storage of the framework and cannot be retrieved by the application. + +![Figure 12: Calculation of the risk](images/solution_architecture/figure_12.svg "Figure 12: Calculation of the risk") + +*Figure 12* displays how the total risk score is being calculated. The application is provided with a set of parameters, which are marked in blue within the figure. Each risk category (days since exposure, exposure duration, signal attenuation and the transmission risk factor) receives an input value from the event, which is then mapped to a pre-defined value range. Each of those value ranges gets assigned a risk score from 1-8, where 1 represents a very low risk and 8 represents are very high risk. This means that from each of the rows in the figure, one value is selected according to the input value for the corresponding category. The resulting value is multiplied with a weight factor, allowing to define which category has a higher impact on the overall risk score. The sum of those weighted values can then be used to determine, which defined risk level should be displayed to the user (e.g. “low risk” or “high risk”). For this decision, app-defined thresholds for the individual risk levels apply. Additionally, a central risk threshold specifies, when the user shall be explicitly notified about an exposure event. + +Note that the transmission risk level plays a special role: It can be defined by the app and be associated with each individual diagnosis key (i.e. specific for each day of an infected person) that is being sent to the server. It contains a value from 1 to 8, which can be used to represent a calculated risk defined by the health authority. + +### Data transfer and data processing + +In order to be able to regularly match the RPIs associated with positive tests (derived from Diagnosis Keys) against the RPIs stored in the framework, the mobile applications need to download the former regularly. + +In order to prevent load peaks at the backend, the downloads need to be spread evenly across the set time interval (currently an hour). To achieve that, each client needs to randomly decide on a point of time within the given hour, when it will download the data. With a large number of clients, this should statistically lead to an even distribution of requests. + +However, [Apple’s background tasks](https://developer.apple.com/documentation/backgroundtasks) don’t allow a specific point of time, when the download task shall be distributed, but instead only let the developer define a [minimum time interval](https://developer.apple.com/documentation/backgroundtasks/bgtaskrequest/3142244-earliestbegindate) after which the tasks should be executed. Even though exact execution times cannot be guaranteed, we expect a behavior as specified above. + +To ensure that not more requests are made than being absolute necessary, the earliest point in time should be at the beginning of the next availability interval. A random number should be added to ensure that the earliest start dates are spread evenly across all clients. For an hourly interval this could be calculated as follows: + +`minimum seconds until execution = (seconds until beginning of next interval) + random(3600)` + +In some scenarios it is possible that a client has been unable to retrieve data for one or more intervals. This might be due to the device being turned off, background activations not firing automatically (e.g. during the night, as described above) or unavailability of an internet connection. It is very important, that the client ensures that after one of those breaks, all available data is being caught up to – a match for the last 14 days might be contained. + +In case the download of the diagnosis keys and the exposure detection configuration from the server fails, the client application needs to retry gracefully, i.e. use a random time component for the retry, as well as extending retry intervals. However, it needs to be ensured that all diagnosis keys are downloaded from the server. Otherwise, possible matches could be skipped. + +Further details can be found in the dedicated architecture documents for the mobile applications. + +## RUNTIME ENVIRONMENT (HOSTING) + +The backend will be made available through the [Open Telekom Cloud (OTC)](https://open-telekom-cloud.com/). + +For the operation of the backend, several bandwidth estimations need to be taken. As a high adoption rate of the app is an important requirement, we are considering up to 60 million active users. + +### Bandwidth estimations + +While each set of 14 diagnosis keys only has the small size of 392 Byte, all newly submitted diagnosis keys of a time period need to be downloaded by all mobile phones having the application installed. When considering 2000 new cases for a day, a transmission overhead (through headers, handshakes, failed downloads, etc.) of 100% and 30 million clients, this adds up to approximately 1.5MB per client, i.e. **42.8TB** overall traffic. If a day is split into 24 chucks (one per hour), this results in a total number of **720 million requests per day**. If the requests are evenly spread throughout the corresponding hour, approximately **8,500 session requests** per second need to be handled. Detailed descriptions of the connections can be found in the chapter ["Data transfer and data processing"](#data-transfer-and-data-processing). Those number exclude possible interoperability with other countries. + +If the backend calls from the mobile applications cannot be spread as evenly as we expect, we might experience peaks. To achieve an even spread (and to be able to handle a peak), we will employ a Content Delivery Network (CDN) by T-Systems to make the individual aggregated files available. According to an evaluation with T-Systems, the estimated throughput and request number can be handled by their infrastructure. + +## Cross-border interoperability + +A definite prerequisite for compatibility is, that the identifiers of the mobile devices can be matched, i.e. the API by Apple/Google is being used. + +Further details will be added as soon as they are available. + +## LIMITATIONS + +Even though the system can support individuals in finding out whether they have been in proximity with a person that has been tested positively later on, the system also has limits (shown in *Figure 13*), which needs to be considered. One of those limitations is, that while the device constantly broadcasts its own Rolling Proximity Identifiers, it only listens for others in defined time slots. Those [listening windows are currently up to five minutes](https://covid19-static.cdn-apple.com/applications/covid19/current/static/contact-tracing/pdf/ExposureNotification-BluetoothSpecificationv1.2.pdf) apart and are defined as being only very short. In our considerations we expect the windows to have a length of two to four seconds. For the attenuation, the two buckets provided by the framework are being considered. A lower attenuation means that the other device is closer; we assume that an attenuation <50dB translates to a distance below two meters. A higher attenuation might either mean that the other device is farther away (i.e. a distance of more than two meters) or that there is something between the devices blocking the signal. This could be objects such as a wall), but humans or animals also. + +![Figure 13: Limitations of the Bluetooth Low Energy approach](images/solution_architecture/figure_13.svg "Figure 13: Limitations of the Bluetooth Low Energy approach") + +In *Figure 13*, this is visualized, while focusing on the captured Rolling Proximity Identifiers by only a single device. We are assuming that devices broadcast their own RPI every 250ms and use listening windows with a length of two seconds, five minutes apart. There are five other active devices – each representing a different kind of possible exposure. In the example, devices 3 and 4 go completely unnoticed, while a close proximity with the user of device 2 cannot be detected. In contrast to that very brief, but close connection with the user of device 5 (e.g. only brushing the other person in the supermarket) is noticed and logged accordingly. The duration and interval of scanning needs to be balanced by Apple and Google against battery life, as more frequent scanning consumes more energy. + +It must be noted, that some of the encounters described above are corner cases. While especially the cases with a very short proximity time cannot be detected due to technical limitations, the framework will be able to detect longer exposures. As only exposures of longer duration within a certain proximity range are considered relevant for the intended purpose of this app, most of them will be covered.