Samen maken we Nederland veilig: voeg organisaties en domeinen toe aan Basisbeveiliging

Vanaf 5 mei kan iedereen van alles aanpassen op Basisbeveiliging. Daardoor kunnen insiders – vakmensen met sectorale kennis, van studenten tot gepensioneerden – Nederland veilig maken. Alle wijzigingen worden open data, bruikbaar door andere organisaties en voor ieder doel, want met z’n allen bereiken we meer!

We hebben veel lol gehad met het maken van dit nieuwe onderdeel van Basisbeveiliging. Dat zie je bijvoorbeeld terug in de coole nieuwe interface van wijzigingsverzoeken: het is een vormgeving met persoonlijkheid, wat we hebben gemist sinds het jaar 2000. We gaan ook in op waar AI ons heeft geholpen met het schrijven van het saaie gedeelte van de software, en waarom dat de juiste keuze was. Er rust een vloek op sommige software sinds de jaren 80, deze vloek achtervolgt vele ontwikkelaars nog dagelijks. AI heeft ons hiervan bevrijd.

Tot slot bedanken we het DIVD//fund, onderdeel van het Dutch Institute for Vulnerability Disclosure, voor het toekennen van een subsidie om deze functionaliteit te ontwikkelen. Zonder hen was het niet mogelijk geweest dit onderdeel te maken.

Vind je transparantie, veiligheid, soevereiniteit, toegankelijkheid en privacy belangrijk? Word dan deelnemer van de Internet Cleanup Foundation en ondersteun onze missie om het internet transparant te maken. We meten al meer dan 10.000 organisaties en 300.000 adressen en maken deze informatie beschikbaar voor iedereen. Meer over deelnemerschap.

Samen maken we de beste open data

De database van Basisbeveiliging is nog lang niet compleet. Samen met vrijwilligers, open gegevensbronnen, onderzoek en de helpdesk kennen we nu 12.500 organisaties en 250.000 domeinen. Al deze informatie is open data, maar wat betekent dat?

Open data zijn gegevens die door iedereen en voor ieder doel te gebruiken zijn. Je mag bijvoorbeeld de database uitprinten en vervolgens er een papier-machélandkaart van Nederland van maken. Het gebruik kost niets, je hoeft geen toestemming te vragen en je hoeft er niet voor te betalen. Dat is anders dan bijvoorbeeld Google: daar betaal je door je ziel te verkopen te kijken naar reclames, of de Kamer van Koophandel, waar je betaalt om gegevens te mogen zien.

Het is niet zo dat open data altijd rechtenvrij is: vaak word het beschermd met een licentie. Deze licentie zegt bijvoorbeeld dat de data open moet blijven. Er kan ook in staan dat de gebruiker eerlijk en duidelijk moet zijn over waar de gegevens vandaan komen.

De gegevens die in Basisbeveiliging zitten, worden vrijgegeven onder de “Creative Commons CC BY-SA 4.0“-licentie. Dat zegt grofweg dat anderen de informatie mogen gebruiken, het op dezelfde manier moeten delen en naamsvermelding moeten toepassen. Die naamsvermelding is voornamelijk een betuiging van respect voor het vele werk dat is verzet om de data te verzamelen.

Als voorbeeld: de gegevens van Basisbeveiliging zijn begin maart gebruikt in een onderzoeksartikel van Follow the Money. Zij onderzochten hoeveel e-mailadressen van belangrijke organisaties in de uitgelekte database van Odido zaten. Omdat de database van Basisbeveiliging veel domeinen van belangrijke Nederlandse organisaties bevat, kon Follow the Money een vollediger onderzoek doen. In het artikel werd duidelijk verwezen naar Basisbeveiliging en daarmee is aan de gebruiksvoorwaarden voldaan.

Uiteindelijk willen we een deel van de verzamelde gegevens toevoegen aan Wikidata, waarmee het beschikbaar komt onder een licentie zonder copyright. Dat is nog even toekomstmuziek, omdat dit best wat tijd kost en nieuwe uitdagingen met zich meebrengt.

Wat kan je wijzigen?

We hebben gekozen om eerst de belangrijkste wijzigingsverzoeken te maken: het toevoegen van organisaties en domeinen.

Toen we daar eenmaal aan begonnen bleek dat het toevoegen van een organisatie eigenlijk veel meer is dan alleen een naam. Het is ook een fysieke locatie, een kaart, een e-mail adres en meerdere domeinen.

Dit zijn de acht eerste wijzigingsverzoeken:

  • Organisaties
    • Toevoegen: nieuwe organisaties toevoegen, met domeinen, locatie, naam en contactinformatie
    • Samenvoegen: bijvoorbeeld bij fusies, inclusief overdracht van domeinen
    • Hernoemen: een betere naam geven
    • Verplaatsen: een andere plek op de kaart geven
  • Domeinen
    • Toevoegen: voeg één of meer domeinen toe aan een organisatie
    • Verwijderen: haal domeinen weg bij een organisatie
    • Overdragen: verplaats het domein van de ene naar de andere organisatie
    • Delen: deel de verantwoordelijkheid voor het domein met een andere organisatie

Natuurlijk is er nog veel meer mogelijk en denkbaar, dus er zullen zeker nog meer soorten aanpassingen mogelijk zijn in de toekomst. Voor nu zijn dit de meestgevraagde.

Digitale bouwvakkers: under construction.gif

Samen bouwen we aan een veilig internet.

Om daar een gevoel aan te geven, zijn wijzigingsverzoeken vormgegeven als een bouwput: met schuine gele strepen, bulldozers en graafmachines. Als je iets niet bevalt, kun je het dus zelf aanpassen, ofwel in de bulldozer klimmen en het aan de kant schuiven.

Het thema van wijzigingsverzoeken grijpt terug naar de creatieve piek van gebruikersinterfaces: Kaleidoscope. Daarmee kon je rond het jaar 2000 je computer persoonlijkheid geven en opvrolijken… zonder dat je de weg kwijt raakte. In de schermafbeelding hieronder zie je zes thema’s, met vrolijke slimes, floppy disks, wasco-tekeningen, varkens, verstoringen en spijkerbroeken. En zo waren er nog vierduizend. De onderstaande voorbeelden zijn omlijst met de “platinum” vormgeving, de standaard-vormgeving van MacOS 8 en 9.

Hoe vensters op je computer eruit zagen in het Web 1.0 tijdperk. Op Mac Themes Garden staan duizenden creatieve voorbeelden.

Wij hopen dat dit soort thema’s terugkomen, want het maakte van computers een feest. Daarom doen we een duit in het zakje met de vormgeving van wijzigingsverzoeken. De onderliggende dingen, zoals “tekstvelden” en “knoppen”, blijven hetzelfde, maar nu omlijst met gele strepen. Het ontwerp ondersteunt licht- en donkere modus, maar in die laatste ziet het er het beste uit.

Naast Kaleidoscope grijpt de interface ook terug op een ander belangrijk vormgevingselement uit het web 1.0-tijdperk: afbeeldingen met daarop “under construction”. Deze stonden op iedere website en waren vaak geanimeerd. Iemand heeft al deze afbeeldingen verzameld. De term under construction is inmiddels vervangen door beta, maar wordt tegenwoordig vaak weggelaten.

Onderstaande schermafbeelding laat een klein stukje van het under construction-archief zien, zonder de animaties.

Dit leidde tot hoe de vormgeving van wijzigingsverzoeken eruitziet. Je ziet dat je domeinen ongestructureerd kunt invoeren: je hoeft je dus niet druk te maken over punten en komma’s. Daaruit worden domeinen gefilterd en in een lijst gezet. Bij iedere stap is er begeleiding, zodat de informatie die wordt ingevuld de grootste kans heeft om geaccepteerd te worden.

Everything old is new again

Nu is het tijd om te overcompenseren met het nieuwste van het nieuwste 🙂

Wijzigingsverzoeken zijn simpele administratieve formaliteiten, zoals het verkrijgen van Vrijgeleide A38 door Asterix en Obelix. Maar het zijn er wel erg veel. Achter de acht wijzigingsverzoeken zitten 105 operaties die neerkomen op het lezen, maken, aanpassen en verwijderen van gegevens. Deze operaties worden vanuit onze geel-gestreepte interface aangeroepen in tientallen formulieren.

Het bouwen van dit soort software is repetitief werk. Programmeurs willen dat voorkomen en grijpen daardoor snel naar abstracties: iets dat ze opnieuw kunnen gebruiken. Dit leidt op een bepaald moment tot zoveel abstracties dat het maken van formulieren een programmeertaal wordt: een 4e-generatie programmeertaal. Dit soort talen stamt uit de jaren 80, maar het idee komt steeds terug.

Zo’n programmeertaal wordt door ontwikkelaars al snel ervaren als “te beperkend”, ze moeten telkens vechten om er iets in gedaan te krijgen. Wanneer het niet meer onderhoudbaar is wordt het resultaat weggegooid om opnieuw de cyclus te doorlopen. Tegenwoordig worden de jaren 80 verkocht als “low code”, met leveranciers als Mendix of Bleuriq. Die laatste heeft de twijfelachtige eer het fundament te zijn van het eerste stopgezette overheids-ICT-project in 2019. Abstractie is dus niet alles: soms moet je iets meerdere keren opschrijven om efficiënt te zijn.

Wat als we nu opschrijven wat we willen en een AI het repetitieve werk laten doen? Daarvoor is Wijzigingsverzoeken het ideale project. Door deze aanpak kwamen we erachter dat het echte werk van softwareontwikkeling zit in het ontwerpen ervan. Een slecht ontwerp, onze eerste versie, leverde onbegrijpelijke bagger op. Wat hadden we gedaan? Abstracties toegevoegd!

Meer is soms meer!

In het eerste ontwerp waren alle wijzigingen een subklasse, met het idee dat ze gebundeld ingevoerd konden worden. Wat dat betekent, is dat wijzigingsverzoek nummer 1 over domeinen gaat en wijzigingsverzoek 2 over een naamswijziging. Ieder met aparte velden. We hoopten daarmee bewijsvoering (zoals schermafbeeldingen en tekst) centraal te kunnen houden. Wijzigingsverzoeken werden als gestructureerde tekst opgeslagen. Alles aan dit ontwerp was een nachtmerrie, en het leverde daarom niet te volgen software op. De abstracties waren verkeerd, te vroeg, fout en tegelijkertijd vormloos.

Maar omdat AI de software had geschreven, heeft dit slechte ontwerp weinig tijd gekost: de belemmeringen borrelden al snel naar boven. Duizenden regels code gingen de kliko, in samen met het ontwerp, en er werd opnieuw uitgedacht wat dan wel moest worden. Voor “rapid prototyping” leverde de AI dus enorm veel waarde. Een slecht ontwerp is een slecht ontwerp, dat gaat AI niet oplossen.

De tweede versie is minder abstract en daardoor vreselijk goed te volgen. Wie geen software ontwikkelt, kan alsnog uit onderstaande schermafbeelding alsnog halen hoe naamswijzigingen werken. Het systeem documenteert zichzelf.

Mocht je er niet uitkomen: je ziet een lijstje operaties voor hoe de naamswijziging van een organisatie kan worden gelezen, gemaakt, aangepast en verwijderd. Een gebruiker kan een lijstje met openstaande verzoeken ophalen en handelingen uitvoeren op ieder verzoek. Beheerders kunnen een verzoek accepteren, afwijzen of om verduidelijking vragen. Een gebruiker kan verduidelijking ophalen door correspondentie op te vragen (maar er wordt ook een mailtje gestuurd).

Wat blijkt: de broncode die hiervoor nodig is, is vrij simpel en herhaalt zich. Maar zolang een AI deze handeling en herhaling voor haar rekening neemt, is dat geen probleem. Er is hier en daar wel licht gestuurd op de output. Het deel dat wél echt door mensen ontworpen is, is de permissiecontrole. We willen namelijk dat de afscherming van functionaliteiten op een eenvoudige manier te controleren is. AI maakte dat te complex met onbegrijpelijke functies, toeters en bellen.

Een beetje van jezelf, en een beetje van .A..I.

We denken dat AI voor dit project de beste keuze was. De belangrijkste reden is dat het resultaat van een simpel ontwerp goed te voorspellen is: net als met gokken op Polymarket wisten we de uitkomst al.

Administratieve software is niet nieuw en het probleem zit vaak in (verkeerde) abstracties. Er zijn talloze mensenlevens besteed aan het denken over wat de juiste abstractie zou moeten zijn om wat regeltjes code te besparen of dingen makkelijker te maken. Dat heeft erg goede abstracties opgeleverd, zoals OpenAPI, Django, Python en dergelijke. Door de bestaande paden te volgen, krijg je goede software.

We lazen onlangs dat ontwikkelaars bang waren dat AI hun banen overneemt. Als dat betekent dat we niet meer eindeloos formuliertjes met de hand hoeven te schrijven of een halfbakken, cringe abstractielaag / taal die daarvoor is bedacht hoeven te snappen, dan mag het volgens ons liever vandaag dan morgen.

Het maken van deze administratieve software voelde op een bepaald moment alsof we afleveringen van The A-Team maakten. Iedere aflevering speelt zich ergens anders af, maar je weet van tevoren al dat er ergens een auto over de kop moet en dat het A-Team wordt opgesloten in een metaalwerkplaats. Er zijn weinig verrassingen, maar het resultaat is onderhoudend. Collega Johan zei onlangs dat dit soort code IKEAI is: niet de meubels die je wil, maar wel die haalbaar zijn.

Slop, ofwel het genereren van slechte code, is een risico van AI. We hebben sommige stukken code moeten “ontsloppen”. Een AI kan dat nog niet voldoende zelf, maar dat is een kwestie van tijd. We zagen dat de AI ook verkeerde abstracties maakte of heel graag 30 regels redundante opmaak of controles toe wilde voegen. Soms wil het taalmodel te veel abstracte code schrijven, met een soort functie-doolhof als gevolg, terwijl één langere functie veel begrijpelijker zou zijn. Het is smaak en wij vinden al te bondig programmeren niet zo lekker. Alle AI-gegenereerde code zit in afzonderlijke delen van het project; daarvan hebben we geaccepteerd dat dit door AI is gemaakt en niet zo mooi hoeft te zijn.

Voor de merkgeile AI-fans: wij begonnen met GPT-5.0 en leverden het project op met GPT-5.5. Het laatste model levert resultaten nagenoeg “live” en in doorgaans aardige code. We kunnen vaak vertrouwen dat het model onze instructies volgt en tot een oplossing komt die matig tot acceptabel is. Codex heeft ons vele dagen werk bespaard met het schrijven van doorsnee broncode die het model ook zelf kan onderhouden.

Lokale taalmodellen waren helaas nog niet snel genoeg en niet goed genoeg, maar dat zal de komende jaren veranderen. Omdat een van de AI-bedrijven wereldwijd alle computeronderdelen heeft opgekocht, zal deze revolutie minder snel gaan. Toch zijn het lokale modellen de speld die de AI-bubbel stuk gaan prikken. Tot die tijd verbranden we het Amerikaanse durfkapitaal voor een bedrag dat we anders aan nieuw ramgeheugen hadden uitgegeven. “Dit is geen financieel advies.”

“Een beetje van jezelf, en een beetje van a.i.”, opnieuw gemaakt in hoge resolutie. Origineel door Martijngamer op Reddit in r/sbubby_NL.

DIVD//fund

Dit onderdeel van Basisbeveiliging is ontwikkeld met financiering van het DIVD//fund in het Bits & Bytes-programma. Het fonds ondersteunt innovatieve projecten die de digitale wereld versterken. Bekijk de website van DIVD//fund .

Onze aanvraag voor ondersteuning kwam als best beoordeeld uit de bus. Met het project wordt een belangrijk doel nagestreefd: beter overzicht van belangrijke online digitale infrastructuur. Doordat de resultaten open zijn, kan iedereen hiervan profiteren, waaronder ook het Dutch Institute for Vulnerability Disclosure.

Ingeborg Jansen van het DIVD//Fund overhandigt symbolisch een DIVD hoodie aan Elger Jonker van Basisbeveiliging.
DIVD//fund logo

Vind je transparantie, veiligheid, soevereiniteit, toegankelijkheid en privacy belangrijk? Word dan deelnemer van de Internet Cleanup Foundation en ondersteun onze missie om het internet transparant te maken. We meten al meer dan 10.000 organisaties en 300.000 adressen en maken deze informatie beschikbaar voor iedereen. Meer over deelnemerschap.