FAQ Hero
Vertrouwen in codeondertekening

Wat is
codeondertekening?

Wat is codeondertekening?

Codeondertekening is het proces van het aanbrengen van een digitale handtekening op softwarebestanden. Deze digitale handtekening valideert de identiteit van de maker of uitgever van de software en verifieert dat het bestand niet is gewijzigd of gemanipuleerd sinds de ondertekening. Codeondertekening is bedoeld om de ontvanger te laten weten dat de software kan worden vertrouwd en speelt een essentiële rol bij het bestrijden van kwaadwillige pogingen om systemen en gegevens te compromitteren.

Codeondertekening wordt onder andere gebruikt bij software voor zowel intern als extern gebruik, patches, tests, de ontwikkeling van IoT-producten, IT-omgevingen en mobiele apps. Codeondertekening wordt niet alleen gebruikt voor code en software, maar ook voor applicaties, firmware, berichten, XML, scripts, containers en afbeeldingen.

Hoe werkt codeondertekening?

Net als bij andere PKI-technologieën maakt codeondertekening gebruik van een sleutelpaar met een openbare en persoonlijke sleutel, een certificeringsinstantie en een digitaal certificaat. Wanneer een uitgever software ondertekent, maakt deze een afgebakend pakket dat de uitgegeven software, een codeondertekeningscertificaat en een digitale handtekening bevat. Het codeondertekeningscertificaat bevat de identiteit en openbare sleutel van de uitgever alsmede de handtekening van de certificeringsinstantie, om te bevestigen dat die de identiteit van de uitgever heeft geverifieerd. De digitale handtekening is de ondertekende hash van de software op basis van de persoonlijke sleutel van de uitgever. Wanneer de software wordt geleverd, wordt aan de kant van de gebruiker de geldigheid en integriteit van het certificaat gecontroleerd, om te controleren of de software niet is gewijzigd sinds de ondertekening. Hierbij wordt de openbare sleutel in het certificaat gebruikt om de hash in het digitale certificaat te ontsleutelen. Vervolgens wordt de hash van de digitale handtekening vergeleken met de zojuist berekende hash van de software. Als de hashes overeenkomen, weet de klant of gebruiker zeker dat de software niet in de tussentijd is gewijzigd. Het beheer van persoonlijke sleutels is een kritiek onderdeel in de beveiliging van codeondertekening. Als de sleutel wordt gestolen of niet goed wordt beheerd, kunnen cybercriminelen die gebruiken om kwaadaardige code te ondertekenen en te leveren als updates voor de systemen van ontwikkelaars of klanten.

Code signing table graph 1 - NL

Waarom moet ik code ondertekenen?

Codeondertekening is een vereiste van alle grote softwareplatformen, zoals Java en Microsoft, om de verspreiding van malware te voorkomen. Het is ook een best practice op het gebied van beveiliging om code te ondertekenen, om te voorkomen dat klanten en gebruikers code downloaden die is gemanipuleerd of afkomstig is uit onbekende bronnen. Hiermee maakt u een duidelijk onderscheid tussen de code of software van uw organisatie, en code die zodanig is verpakt dat die afkomstig lijkt te zijn van uw organisatie. En wanneer de software openbaar beschikbaar wordt gemaakt, krijgen gebruikers mogelijk een veiligheidswaarschuwing te zien als de software niet is ondertekend. Bij het bouwen en ontwikkelen van code voor intern gebruik zorgt codeondertekening voor verantwoording en controle.

Welke typen software kan ik ondertekenen?

Elk type (binair) bestand kan worden ondertekend, zoals:

• Softwareapplicaties die kunnen worden gedownload van websites

• Interne IT-applicaties

• Mobiele applicaties

• XML-bestanden

• Scripts

• Software-images

• Containers

• Stuur- en hulpprogramma's

• Firmware

Wat zijn de stappen in het proces van codeondertekening?

Ten eerste genereert de software-uitgever een sleutelpaar met een openbare en een persoonlijke sleutel. Vervolgens vraagt deze een codeondertekeningscertificaat aan door een CSR (Certificate Signing Request) samen met de openbare sleutel in te dienen bij een certificeringsinstantie. De certificeringsinstantie verifieert de identiteit van de uitgever en authenticeert de certificaataanvraag. Na voltooiing daarvan geeft de certificeringsinstantie het codeondertekeningscertificaat uit. Dit certificaat bevat de identiteit van de uitgever, de openbare sleutel en de handtekening van de certificeringsinstantie. De handtekening van de certificeringsinstantie is belangrijk, omdat die als vertrouwde derde partij de identiteit van de certificaathouder aantoont. Het codeondertekeningscertificaat bevestigt niet alleen de identiteit van de uitgever maar ook de integriteit van de software. Wanneer de uitgever software ondertekent, maakt deze een afgebakend pakket dat de uitgegeven software, het codeondertekeningscertificaat en een digitale handtekening bevat.

Voor de digitale handtekening zijn ook de volgende stappen noodzakelijk: 

  1. Genereren van een hash of cryptografisch unieke representatie van de software met een hash-algoritme.
  2. Ondertekenen van de hash met de persoonlijke sleutel van de uitgever en een ondertekeningsalgoritme.

Codeondertekening kan handmatig worden gedaan of geautomatiseerd als onderdeel van een softwareontwikkelingsproces zoals Continuous Integration/Continuous Delivery (CI/CD).