Review CoronaMelder app (boek Multidisciplinaire aspecten Corona-Apps)
| Sieuwert van Otterloo |
Software
Dit artikel is een verkorte versie van een hoofdstuk uit het boek ‘Multidisciplinaire aspecten van Covid-19’, dat in april 2021 is geplubliceerd. Het boek bevat losse hoofdstukken van verschillende auteurs, die ieder een ander aspect van Corona-maatregelen uitleggen. In het hoofdstuk “project 2.0: CoronaMelder” wordt gekeken naar de broncode en ontwikkelproces van de Nederlandse Corona-app die door de overheid is ontwikkeld.
Transparantie
CoronaMelder is een voorbeeld van een door de overheid geleid automatiseringsproject dat in twee aspecten opvalt. Ten eerste is het in korte tijd, enkele maanden, gerealiseerd. Dit is uitzonderlijk omdat veel projecten meerdere jaren duren. Zoals op het Rijks-ICT-dashboard te zien is, is de looptijd van overheidsprojecten vaak jaren.
Ten tweede is het resultaat van het project transparant. De gehele code van het project, inclusief ontwerpdocumenten, is op het digitale platform Github gepubliceerd: https://github.com/minvws. Hierdoor is een goede, objectieve analyse mogelijk. Deze aanpak is zeer lovenswaardig, omdat zonder deze transparantie geen technische analyse mogelijk is. Ook binnen de app-store is dit uniek: van alle andere apps in de appstore zijn de broncode, ontwerpdocumenten en beveiligingstesten niet beschikbaar. Alle kritiek uit technische hoek is dan ook relatief: Het feit dat de app analyseerbaar is en er dus kritische analyse gedaan kan worden, is een positieve uitzondering op andere apps en projecten.
CoronaMelder staat niet stil. Versie 1.1.0 is op 11 augustus 2020 ontwikkeld en is daarna ongeveer elke twee weken bijgewerkt. De technische analyse voor dit artikel is gedaan in december 2020 en is dus een momentopname.
Architectuur
Een app is volgens Van Dale een applicatie voor een smartphone of tablet. Apps kunnen op meerdere manieren worden ontwikkeld:
- Optie één is om apps te maken die volledig op de smartphone werken zonder hulp van een centrale server;
- De tweede optie is om apps te maken waarbij sommige belangrijke functies op een centrale server (‘back-end) worden uitgevoerd;
- Optie drie is om alle functies in een ‘backend’ te realiseren, en op de smartphone alleen een bijna lege huls te maken.
CoronaMelder app volgt optie twee. De app doet veel van de interactie met de gebruiker (met name uitleg) zelf maar wisselt gegevens uit met een backend, die gegevens van alle app-gebruikers bijhoudt. Om het extra complex te maken, is bovendien sprake van twee gescheiden apps: één voor het iOS-platform dat alle Apple telefoons en tablets gebruiken, en één voor het Android platform dat vrijwel alle niet-Apple telefoons en tablets gebruiken. Beide apps maken gebruik van dezelfde backend. De back-end is ongeveer 20% van de code.
Het belangrijkste nadeel van deze keuze van gescheiden apps en programmeertalen, is dat er geen garantie is dat beide apps hetzelfde doen. Je zult altijd beide apps moeten testen en controleren, om zeker te weten dat ze allebei identiek en juist werken. Dit maakt het onderhoud lastiger en duurder.
Een belangrijke basis voor de werking van de App is het GAEN-protocol (Google/Apple Exposure Notification protocol). Dit protocol is midden 2020 ontwikkeld door Google en Apple, en zorgt ervoor dat telefoons van Google en Apple kunnen doorgeven dat ze dicht bij elkaar geweest zijn. Zonder een gemeenschappelijk protocol was het heel lastig geweest om Android-telefoons en Apple telefoons elkaar te laten herkennen.
Ontwikkeltijd
De app is ontwikkeld op basis van het programma van eisen, dat gepubliceerd is op 19 mei 2020. De app is dus in een periode van 3 maanden (eerste versie) tot 6 maanden (lancering) ontwikkeld. Onderstaande grafiek laat het aantal code-toevoegingen (commits) zien in het versiebeheersysteem, van 1 juni 2020 tot 24 december 2020, voor de backend. De meeste wijzigingen zijn in de periode tot 1 september geweest, daarna is de verandersnelheid omlaag gegaan.
Bij de analyse van deze gegevens is het belangrijk op te weten dat niet alle activiteit van het ontwikkelteam in de openbare Github te zien is. Het ontwikkelteam heeft een eigen versiebeheersysteem in gebruik, en kopieert hun code naar het openbare versiebeheersysteem. Het was namelijk niet de bedoeling dat onbekende ontwikkelaars mee konden werken aan de app. De ‘community’ heeft een rol gespeeld in het meedenken over het ontwerp en het geven van feedback, maar de app zelf is geprogrammeerd door een door de overheid geselecteerd team. Er is volgens betrokkenen wel veel input van buiten dit team geweest op design en testen door middel van discussies via het maatschappelijk platform Codefor.nl.
Analyse code op onderhoudbaarheid
Door te kijken naar de code kan men bepalen of het systeem volgens best-practices is ontwikkeld, en daardoor goed onderhoudbaar is. Het volgende valt op.
- Ongeveer 70% van de code is normaal werkende code en 30% van de code is testcode. Dit is een goed resultaat. Bij codereviews heeft slechts 40% van nieuwe systemen meer dan 25% testcode. Door de 30% testcode kunnen veel eenvoudige fouten automatisch worden gevonden.
- Bestanden kleiner dan 200 regels code zijn goed analyseerbaar. Grotere bestanden vormen een onderhoudsrisico. 70% van de code bevindt zich in kleine bestanden. Er is slechts een handvol bestanden die meer dan 500 regels code bevatten.
- Gegenereerde code. Er is gebruik gemaakt van een Google protocol buffer routine om automatisch code te genereren. Je mag de gegenereerde code niet direct aanpassen, maar moet bronbestanden in een voor het protocol specifieke taal aanpassen en de code opnieuw genereren. Dit deel van de code is hierdoor lastiger te onderhouden.
Informatiebeveiliging
Het is belangrijk dat deze CoronaMelder app geen risico’s op het gebied van informatiebeveiliging met zich meebrengt. Dit zou er immers voor kunnen zorgen dat gevoelige gezondheidsinformatie wordt gelekt, of kan er – terecht – voor zorgen dat mensen ongerust worden. Gelukkig zijn er in augustus 2020 meerdere reviews gedaan. De uitkomsten hiervan zijn eveneens beschikbaar:
- In het rapport van Radically Open Security is het ontwerp van de versleuteling geanalyseerd en de code van de backend;
- In het rapport van Secura is gekeken naar beide apps;
- NFIR heeft een penetratietest uitgevoerd op verschillende portalen.
Alle drie de rapporten zijn te downloaden als bijlages bij een duidingsrapportage. Elk van de rapporten heeft een aantal verbeterpunten gevonden die moest worden opgelost.
Conclusie
CoronaMelder is in een aantal opzichten een positief voorbeeld voor andere apps. Allereerst is de code beschikbaar voor externe toetsing. Daarnaast koos men voor de opzet stabiel en betrouwbaar: er is namelijk gebruik gemaakt van bekende, moderne programmeertalen en best-practices, waaronder het volgen van automatische unit-testen. Ook is de informatiebeveiliging door maar liefst drie externe bedrijven getoetst.
De code van de app zelf is omvangrijk maar wel goed leesbaar en ook voorzien van automatische testen. De app is hiermee herbruikbaar voor andere landen of bij nieuwe pandemieën in de toekomst. Voorwaarde daarbij is wel dat de security-testen die zijn uitgevoerd op regelmatige basis worden herhaald teneinde de beveiliging te kunnen blijven waarborgen.
Over het boek
Het boek ‘Multidisciplinaire aspecten van COVID-19 apps’ bevat in totaal 26 hoofdstukken, en belicht veel interessante aspecten. Er zijn hoofdstukken over de gegevenslogistiek (door Marco Bommeljé), de Corona-appathon (Serge Wallagh), de juridische status (Natascha van Duuren) langs, maar ook over de situatie in Australië (Anthony Wong), Duitsland (Rainer Malaka en Kai Rannenberg), Zuid-Afrika (Paula Kotzé) en de samenwerkingn in Europa (Dirk de Wit). Het boek is onder andere verkrijgbaar bij Managementboek en Bol.com. Het boek is onderdeel van een serie, eerder verscheen ook digitaal recht voor IT-professionals en ook Multidiscipliaire aspecten van Artificiële Intelligentie.
Dr. Sieuwert van Otterloo (CISA, CIPP/E) is IT-deskundige met kennis van ISO 27001, NEN 7510, software-kwaliteit, projectmanagement, privacy, en verantwoord gebruik van AI. Hij geeft les aan de VU, doet onderzoek aan de HU en geeft advies en doet reviews bij organisaties door heel Nederland. Hij oprichter en directeur van ICT Institute.