Onlangs kwam naar buiten dat een gevaccineerde Nederlander na een positieve coronatest tóch zijn QR-code in CoronaCheck gebruikte om binnen te komen bij uitstapjes. Dat riep opnieuw de discussie op: moeten vinkjes van gevaccineerden groen blijven na een positieve test?
Zaterdag uit eten, zondag naar een evenement op het Amsterdam Dance Event en maandag op het vliegtuig. Een met corona besmette man deed dat, omdat zijn code groen bleef, schreef Hart van Nederland. Waarom hij van de GGD hoorde dat de code niet ingetrokken werd? Omdat het niet kan. Op het oog lijkt het makkelijk, want de Belgische CovidSafe-app is wél aangepast om de groene vinkjes van positief geteste gevaccineerde mensen tijdelijk in te trekken. Waarom zou dat dan in Nederland niet kunnen?
Dit artikel is gebaseerd op informatie van mensen van het ministerie van VWS en een meeting met geïnteresseerden op de Slack van Code for NL, waar VWS met iedereen die dat wil, in gesprek gaat over de corona-apps CoronaCheck en CoronaMelder.
De werking van CoronaCheck
Hoewel op papier alle Europese coronapas-apps met elkaar samenwerken, functioneren ze 'onder water' verschillend. In CoronaCheck kun je dat zien doordat je voor internationaal reizen een aparte QR-code moet aanmaken. In die 'Europese' QR-code staat veel meer informatie dan in de Nederlandse versie en dat is heel bewust. Het ministerie van VWS heeft CoronaCheck gemaakt met dataminimalisatie in het achterhoofd. Liefst had het ministerie vermoedelijk in de QR-code helemaal geen persoonsgegevens gezet, maar dat maakte het systeem vatbaar voor fraude; je kunt dan niet checken of de QR-code hoort bij de persoon die hem laat zien.
Nu staan er enkele persoonsgegevens in: initialen en een geboortemaand of geboortedatum. Die deel je met honderden mensen in Nederland, waardoor je aan de hand van een paspoort of rijbewijs met enige zekerheid kunt vaststellen dat degene die de QR-code laat zien, ook degene is van wie de code is. Het gaat in de praktijk weleens fout bij het tonen van identificatie; dat gebeurt lang niet overal en altijd, wat binnenkomen met een valse QR-code soms mogelijk maakt.
Als je de QR-code aanmaakt, log je in met DigiD. In de database van de GGD of een testaanbieder checkt de app dan of je gevaccineerd, getest of hersteld bent. De app laat niet zien welke van de drie het is; hij bevat alleen de info dat het vinkje groen is. Er is geen centrale database bij VWS van gevaccineerden of geteste mensen. CoronaCheck haalt info bij de GGD of een testaanbieder vandaan en baseert daar de QR-code op.
Dat maakt het onmogelijk om de code in te trekken. De enige manier is het intrekken van de privésleutel van de QR-code, die alleen op de telefoon staat. Punt is dat het een onomkeerbaar proces is, want de privésleutel kan daarna nooit meer werken. Om de app dus weer aan de praat te krijgen, beginnen gebruikers weer vanaf het begin.
Dat verschilt van het Europese systeem, dat werkt met UCI's: Unique Certificate Idenitifiers. Dat is een lijst met certificaten en de status: gevaccineerd, hersteld of getest. Die database bevat ook gegevens over wanneer je gevaccineerd en getest bent. In het Europese systeem is het tijdelijk intrekken van certificaten dus goed te doen dankzij de centralisatie. Je kunt mensen in de database tijdelijk op 'rood' zetten en vervolgens zal de Scanner-app een rood vinkje laten zien.
Mogelijke oplossingen
In de huidige opzet van CoronaCheck is dat dus technisch onmogelijk. Daar komt bij dat er een paar vereisten zijn die het intrekken van QR-codes lastiger maken. Zo moet het offline werken. De gedachte is dat niet altijd te verwachten is dat mensen overal mobiel internet aan hebben staan. Soms vinden evenementen plaats op plekken met een slecht bereik of heeft een provider een storing. Dan moet CoronaCheck nog steeds werken, vindt VWS. Dat geldt niet alleen voor de mensen die de code laten zien, maar zeker ook voor de apparaten met de Scanner-apps erop.
Bovendien is het systeem op de telefoon voor mensen die technisch niet zo onderlegd zijn, best ingewikkeld en daarom is er ook een papieren versie. Collega Julian raadde in de podcast zelfs aan om gebruik te maken van de papieren versie, omdat het makkelijker werkt dan op de telefoon. Het is nu echter niet mogelijk om de statische papieren code, die een jaar geldig is, in te trekken. Er staat immers geen unieke identifier in om hem te herkennen.
Een mogelijke oplossing is dat de GGD aan VWS de initialen en geboortedata van positief getesten doorgeeft, zodat de Scanner-app rood kleurt bij bijvoorbeeld H T 26 SEP, als iemand Henk Tweakers zou heten en jarig is op 26 september. Het probleem is dat er gemiddeld honderden mensen in Nederland zijn met die combinatie van initialen en geboortedatum, waardoor de QR-code bij heel veel anderen óók rood kleurt, maar dan onterecht.
Een andere oplossing is de bewijslast omkeren: een bewijs van 'non-revocatie'. De app zou dan op de achtergrond via het systeem van de GGD checken of de QR-code nog steeds geldig is. Om de app offline te laten werken, kan die check niet in real time. Bovendien moet een papieren bewijs dan minder lang geldig zijn.
Een derde oplossing is het ombouwen van CoronaCheck naar de Europese EU DCC-standaard, dus met alle gegevens erin over de persoon, wanneer de vaccinatie heeft plaatsgevonden en wanneer er is getest. Omdat EU DCC werkt met centrale opslag, is de QR-code dus in te trekken. De lijst met ingetrokken codes wordt dan periodiek, bijvoorbeeld eens per dag, gepusht naar alle Scanner-apps.
Overwegingen
Alle technische oplossingen zijn mogelijk, maar er is er geen een die werkt binnen de huidige, privacyvriendelijke opzet van CoronaCheck. De oplossing om initialen en geboortedata door te geven heeft als groot nadeel dat bij veel mensen CoronaCheck onterecht rood wordt en dat is natuurlijk onacceptabel. Non-revocatie kan wel. De check moet dan vaak genoeg plaatsvinden om uit te sluiten dat iemand met corona binnenkomt. Groot nadeel is dat je dan iets moet met het papieren bewijs. Moeten mensen die minder digitaal vaardig zijn, dan echt elke paar dagen gaan printen?
Overschakelen op het Europese systeem heeft de nodige voordelen. Niet alleen zijn QR-codes makkelijker in te trekken, het maakt het systeem aan de deur bij horeca en evenementen sneller. Als er een jonge vrouw voor de deur staat met in de QR-code de naam Rick Astley en de leeftijd 55, dan is die fraude makkelijker te doorzien dan wanneer er R A 06 02 in de code staat. Daarnaast is het makkelijk; het Europese systeem zit al in de app, via de Internationaal-optie.
Overschakelen op het Europese systeem gooit echter veel van de privacyprincipes die zo centraal hebben gestaan bij de ontwikkeling, met dataminimalisatie als uitgangspunt, helemaal overboord. Daarin staan immers veel meer gegevens, zoals volledige naam, geboortedatum, data van vaccinaties, welk vaccin dat was en als je getest bent, wanneer dat precies was. Het is daarmee een veel minder privacyvriendelijke app. Kwaadwillenden kunnen dankzij de UCI, die 28 dagen geldig is, gebruikers volgen als ze de controle zouden hebben over de Scanner-app.
Daar komt bij dat onbekend is hoe vaak mensen na een positieve test toch op pad gaan en CoronaCheck gebruiken om ergens binnen te komen. Er zijn vanwege de privacyvriendelijke opzet geen logs en dus geen manieren om na te gaan hoe vaak zoiets gebeurt. Hoe groot het probleem is dat je oplost, is dus onbekend.
Tot slot
:strip_exif()/i/2004698088.png?f=thumblarge)
Daarnaast zijn er nog overwegingen die niet technisch van aard zijn. Als je weet dat je QR-code wordt ingetrokken, ga je je dan nog wel laten testen of hou je het bij een thuistest? Er zijn zorgen over de testbereidheid als een vinkje rood kan worden gemaakt. En voor wie is deze maatregel? Zijn de mensen die zich laten testen, ook niet de mensen die zich beter aan isolatiemaatregelen houden?
Het is duidelijk dat er nog geen beslissing is gevallen of CoronaCheck wordt omgebouwd om het intrekken van groene vinkjes mogelijk te maken en zo ja, op welke manier dat precies gaat gebeuren. Net zoals elk softwareproject is het dus work in progress en is het altijd zoeken naar een balans tussen gewenste functionaliteit, gebruikersgemak, beveiliging en privacy.