diff --git a/images/solution_architecture/figure_1.svg b/images/solution_architecture/figure_1.svg index c53eed4..1908c3d 100644 --- a/images/solution_architecture/figure_1.svg +++ b/images/solution_architecture/figure_1.svg @@ -1,3 +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 + Produced by OmniGraffle 6.6.2 2020-05-31 08:58:46 +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 overviewTest Result ServerR diff --git a/images/solution_architecture/figure_2.svg b/images/solution_architecture/figure_2.svg index 7657442..a907f33 100644 --- a/images/solution_architecture/figure_2.svg +++ b/images/solution_architecture/figure_2.svg @@ -1,3 +1,3 @@ - Produced by OmniGraffle 6.6.2 2020-05-19 07:19:17 +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,additional contactdata, …(§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 + Produced by OmniGraffle 6.6.2 2020-05-31 09:10:31 +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(4) Request TANCorona-Warn-App Server(6) Verify TANCorona-Warn-App(5) TAN + Diagnosis KeysStep 3Doctor/Test CenterLaboratory Information SystemTest result +data from QRLabHealth AuthorityresultsName, address,additional contactdata, …(§9 IfSG)Patient(2a)teleTANPortal Server(1) GetteleTAN(7)(8)(9) Store dataTest Result 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(3) Notifyuser(optional)+ask forupload ofdiagnosiskeys(optional)(1) UserentersteleTANandrequestsupload ofdiagnosiskeys Figure 2: Interaction flow for verification processTest ResultServer(2)Get results diff --git a/images/solution_architecture/figure_3.svg b/images/solution_architecture/figure_3.svg index a568a23..3a39bb2 100644 --- a/images/solution_architecture/figure_3.svg +++ b/images/solution_architecture/figure_3.svg @@ -1,3 +1,3 @@ - Produced by OmniGraffle 6.6.2 2020-05-19 09:22:43 +0000Figure 3Ebene 1Laboratory Information System (LIS)Verification ServerPhone with Corona-Warn-AppCorona-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 + Produced by OmniGraffle 6.6.2 2020-05-31 08:58:46 +0000Figure 3Ebene 1Test Result ServerVerification ServerPhone with Corona-Warn-AppCorona-Warn-AppServerTANTANDiagnosis KeysTANvalid/not validPOST /testresultPOST /verifyPrinted 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 processLaboratory Information System (LIS)hash(GUID)Test resultAPOST/registrationTokenPOST /lab/resultsPOST /app/result diff --git a/images/solution_architecture/figure_4.svg b/images/solution_architecture/figure_4.svg index dbf10b7..71dfc0b 100644 --- a/images/solution_architecture/figure_4.svg +++ b/images/solution_architecture/figure_4.svg @@ -1,3 +1,3 @@ - Produced by OmniGraffle 6.6.2 2020-05-21 11:38:47 +0000Figure 4Ebene 1Phone with Corona-Warn-AppVerification ServerCorona-Warn-AppServerTANDiagnosis KeysTANtrue/falsePOST/tan_checkteleTANInput viaInput field714151617EmployeeHealth AuthorityPortal Server16Create teleTAN 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 + Produced by OmniGraffle 6.6.2 2020-05-31 08:58:46 +0000Figure 4Ebene 1Phone with Corona-Warn-AppVerification ServerCorona-Warn-AppServerTANDiagnosis KeysTANtrue/falsePOST/verifyteleTANInput viaInput field714151617EmployeeHealth AuthorityPortal Server16Create teleTAN via Web InterfaceteleTANteleTAN5teleTAN24POST /teletanRequest teleTANGenerateteleTAN38teleTANTAN13Registration TokenGenerateRegistrationTokenReg.TokenReg.Token10911hash(TAN)hash(teleTAN)hash(Reg. Token)Diagnosis KeysGenerateTAN12PatientFigure 4: Verification process for teleTAN received via phonePOST /tanPOST/registrationToken diff --git a/images/solution_architecture/figure_6.svg b/images/solution_architecture/figure_6.svg index 34a8db7..fee43e5 100644 --- a/images/solution_architecture/figure_6.svg +++ b/images/solution_architecture/figure_6.svg @@ -1,3 +1,3 @@ - Produced by OmniGraffle 6.6.2 2020-05-19 09:22:43 +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 GUIDCorona-Warn-App 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) + Produced by OmniGraffle 6.6.2 2020-05-31 08:58:46 +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 GUIDCorona-Warn-App 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)Test Result ServerR diff --git a/images/solution_architecture/figure_7.svg b/images/solution_architecture/figure_7.svg index 6feab1d..ff8b7b3 100644 --- a/images/solution_architecture/figure_7.svg +++ b/images/solution_architecture/figure_7.svg @@ -1,3 +1,3 @@ - Produced by OmniGraffle 6.6.2 2020-05-19 13:01:16 +0000Figure 7Ebene 1Phone 1Corona-Warn-App ServerContent Delivery Network (CDN)Upload Diagnosis Key + TANPhone 2Phone nAssembleDiagnosis KeysCorona-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 ServerGenerateregistrationtoken Register (GUID)Session IDNew testresultsCheck for results(Registration Token)TimerNo result yetTimer for Dummy checkDummy dataDummy check for results (Dummy Registration Token)Check for results(Registration Token)TimerPositive test resultLocalnotificationUser:Agree to shareDiagnosis keysRetrieve TAN(Registration Token)TANFigure 7: Interaction of the mobile application(s) with the backend servers and CDN + Produced by OmniGraffle 6.6.2 2020-05-31 08:58:46 +0000Figure 7Ebene 1Phone 1Corona-Warn-App ServerContent Delivery Network (CDN)Upload Diagnosis Key + TANPhone 2Phone nAssembleDiagnosis KeysCorona-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 ServerGenerateregistrationtoken Register (GUID)Registration TokenNew testresultsCheck for results(Registration Token)TimerNo result yetTimer for Dummy checkDummy dataDummy check for results (Dummy Registration Token)Check for results(Registration Token)TimerPositive test resultLocalnotificationUser:Agree to shareDiagnosis keysRetrieve TAN(Registration Token)TANFigure 7: Interaction of the mobile application(s) with the backend servers and CDNTest Result ServerGet test resultGet test resultGet test result diff --git a/solution_architecture.md b/solution_architecture.md index d05bf68..dbde8e0 100644 --- a/solution_architecture.md +++ b/solution_architecture.md @@ -65,7 +65,7 @@ The flow for using the app is as follows, referencing the steps from *Figure 2*: - (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 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 posts it together with the test result to the Test Result Server through a REST interface (*Figure 3*, step A), which in turn makes it available to the verification server. - **Step 4a:** After signing up for notifications in step 1, the user’s phone regularly checks the Verification Server for available test results (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 recommendations 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 9-11). 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. @@ -161,7 +161,7 @@ Further details of the API are explained in the documentation of the Corona-Warn ### 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. +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 test result server, as otherwise a second upload privilege (i.e. a registration token) could be fetched with the same GUID. ## MOBILE APPLICATIONS