Als je denkt dat datalekken alleen maar ontstaan omdat er fouten in de beveiliging zitten, dan heb je het mis. De meeste lekken ontstaan net door menselijke fouten. Iets vergeten te anonimiseren, een verkeerde lijst gebruiken voor een mailing, een foutje in de configuratie ergens.
Ik vind het een beetje lastig stelling. Technisch zien heb je gelijk, al is het maar omdat bugs ook menselijk fouten zijn, maar het moet geen excuus zijn. Mensen zijn deel van het systeem en beveiligingsmaatregelen moeten rekening houden met menselijke fouten en zwaktes.
Goede software maakt het makkelijk om je het juiste te doen en moeilijk om het verkeerd te doen. Je systeem moet niet afhankelijk zijn van dat mensen ergens aan denken. Als het systeem faalt moet het veilig falen.
Laat ik versleutelde e-mail als voorbeeld nemen. Als je aan je mailer een knop toevoegt met "versleutel deze mail" dan moet de gebruiker bij iedere mail nadenken of de mail versleuteld moet worden of niet voor de mail verstuurd wordt. Vroeg of laat vergeet de gebruiker dat en gaat er een onversleutelde mail de deur uit.
Dat zou je kunnen oplossen door het expliciet aan de gebruiker te vragen voor de mail vestuur wordt ("Deze mail is niet versleuteld. Doorgaan j/n ?") maar binnen de kortste keren is de gebruiker er aan gewend om altijd op "ja" te klikken en gaat het alsnog fout.
De betere oplossing is dus om het zou te bouwen dat encryptie by default aan staat. Als de gebruiker een fout en vergeet encryptie uit te zetten dan is het worst-case scenario dat iemand een onleesbare e-mail krijgt.
We kunnen niet alle fouten tegenhouden (en doelbewust misbruik al helemaal niet) maar we zouden meer werk moeten maken van fail-safe design.
We zouden heel veel kunnen bereiken door onze data standaard te versleutelen. Nu is het meetal zo dat data onversleuteld in een database staat en alleen versleuteld wordt als er data wordt geexporteerd, typisch handmatig door de gebruiker die de data wil delen. Als de gebruiker dat vergeet of de databaseserver gekraakt wordt dan is alle data direct leesbaar.
Het zou mooier zijn als we onze databases zo inrichten dat alle data altijd versleuteld is met een sleutel die niet op de databaseserver zelf aanwezig is. Het ontsleutelen wil je zo laat mogelijk doen en de sleutel wil je dicht bij de gebruiker houden, niet bij de database.
Dat is natuurlijk makkelijker gezegd dan gedaan want nu is software vaak ontwikkeld vanuit de gedachte dat de database alle data tegelijk kan zien en verwerken en met versleutelde data is dat lastiger. Overigens betekent encryptie niet dat de data helemaal niet meer centraal verwerkt kan worden. Er zijn techieken waarmee toch (veilig) bewerkingen kan doen op versleutelde data zonder dat de database die eerst hoeft te decoderen.
Om er nog even een ander paradigma bij te halen: goede beveiliging bestaat uit meerdere lagen die elkaars zwakheden opvangen en afdekken. Een enkele fout of zwak punt zou nooit genoeg moeten zijn om de beveiliging te compromitteren. Menselijke fouten horen daar ook bij en het systeem moet daar rekening mee houden.
Al hoort daar ook bij dat je accepteert dat perfecte beveiliging niet bestaat. je systeem moet enkele fouten kunnen opvangen maar je kan niet alle fouten opvangen. Ik wil ook niet beweren dat iedere zichbare menselijk fout bewijst dat het hele systeem niet deugt. Maar ik hoor iets te vaak dat problemen worden afgeschoven op een "menselijke fout" die in mijn ogen is uitgelokt door een gebrekkig systeem dat een foutloze gebruiker verwacht. Dat is ook een fout.