github.com/corona-warn-app
Let's have a look! 1/🧵
2/22
* Java 11, Maven, Sonar, Jenkins
* Open Shift, Kubernetes, Docker
* Postgres, H2, Liquibase
* Spring Boot, Lombok, Protobuf, Guava
* JUnit 4, Hamcrest, Mockito
3/22
* methods a bit on the longer side
* conservative use of `var`
* much imperative use of `Optional`
* preference for unchecked exceptions
* two-space indentation 🤢
4/22
* users share non-personally-id'able keys via Bluetooth
* if a user gets sick, they upload their keys to a server
* users download keys and compare to their recording
5/22
GUID: one per tested user
Temporary Exposure Key (TEK): one per user per day
Diagnosis Key: TEKs where COVID-positive user was/is infectious
Rolling Proximity Identifier (RPI): derivative of TEK that is shared over Bluetooth
6/22
github.com/corona-warn-ap…). There's the app plus four backend services:
* corona-warn-app server
* verification server
* test result server
* portal server
Let's discuss each.
7/22
* lets users poll for their test results
* if positive, gives them a TAN (later)
* knows hashed user GUID
* doesn't know TEKs or diagnosis keys
* doesn't store test results (but can access via Test Result Server)
10/22
* lets labs upload test results
* stores test results
* lets Verification Server check test results
* knows hashed user GUID
* doesn't know TEKs or diagnosis keys
11/22 (half way!)
* web interface for health authorities
* lets them generate teleTANs (later) for COVID-positive users
* uses Verification Server for that
* doesn't know anything
12/22
First, the proximity recording:
* app generates and shares your RPIs
* app records received RPIs
13/22
* they exist to prevent intentional spamming of false positive Diagnosis Keys for the lulz
* registration with TAN lets user see test results very soon
* teleTAN is backup to give users a chance to upload if they didn't use QR code
19/22
20/22
* system identifies user by GUID
* users infer proximity from TEKs/RPIs, which aren't personally identifiable
* proximity data only on user devices
* system knows no names, addresses, etc
* connection of name, etc to GUID is only known to doctor and lab
21/22
* project on GitHub: github.com/corona-warn-app
* overarching documentation: github.com/corona-warn-ap…
22/22 fin
* I ignored IP addresses, which the backend can of course access
* GUIDs, test results and TEKs & RPIs (on user phones) are personally identifiable data
Discussions on that: