Introductie
Code ondertekening is het proces waarbij een digitale handtekening wordt aangebracht op een softwareprogramma dat bedoeld is voor distributie via internet. Codeondertekening helpt te verifiëren dat de software authentiek is, d.w.z. afkomstig van de oorspronkelijke ontwikkelaar, en helpt ook te valideren dat de code niet is gemanipuleerd door een aanvaller tijdens de overdracht, bijvoorbeeld door het invoegen van schadelijke code of malware. De digitale handtekening die wordt gebruikt voor codeondertekening bevindt zich in een digitaal certificaat het zogenaamde codeondertekeningscertificaat.
Code Signing-certificaten
Net als elk ander digitaal certificaat zijn codeondertekeningscertificaten gebaseerd op de X.509-standaard en moeten ze ook worden ondertekend door een vertrouwde derde partij, zoals een Certificate Authority (CA)Codeondertekeningscertificaten kunnen echter niet door elkaar worden gebruikt met andere certificaten, zoals SSL Certificaten. De belangrijkste reden hiervoor is dat volgens de X.509-specificatie elk digitaal certificaat een veld 'Sleutelgebruik' bevat, dat het beoogde gebruik van het certificaat aangeeft en wordt ingevuld op het moment dat het certificaat wordt gegenereerd. Aanvullende informatie over het gebruik van het certificaat kan ook worden opgenomen in de extensie 'Uitgebreid sleutelgebruik'. De X.509-specificatie schrijft voor dat een certificaat niet voor andere doeleinden mag worden gebruikt dan waarvoor het is bedoeld. Zo is het veld 'Sleutelgebruik' van een SSL-certificaat ingesteld op 'Digitale handtekening', terwijl het veld 'Sleutelgebruik' van een codeondertekeningscertificaat is ingesteld op 'Codeondertekening'.
Hoewel X.509 de specificatie voor het certificaatformaat biedt, variëren de technologische implementaties voor het genereren van certificaten per leverancier. Authenticode is bijvoorbeeld codeondertekeningstechnologie van Microsoft waarmee ontwikkelaars applicaties voor het Windows-besturingssysteem kunnen ondertekenen. Authenticode-certificaten worden gebruikt om bestanden met extensies zoals .exe, .dll, .ocx, .cab en .xpi te ondertekenen. Apple codeondertekeningscertificaten worden gebruikt om applicaties voor iOS te ondertekenen, Java codeondertekeningscertificaten worden gebruikt om .jar-bestanden voor de Java Runtime Environment (JRE) te ondertekenen en Adobe AIR-certificaten worden gebruikt om .air- of .airi-bestanden te ondertekenen.
Het verkrijgen van een codeondertekeningscertificaat is vergelijkbaar met dat van andere digitale certificaten. Elke organisatie die software wil publiceren voor distributie via internet, vraagt een codeondertekeningscertificaat aan bij een CA en verstrekt daarbij de openbare sleutel en andere organisatiegegevens. Houd er rekening mee dat het openbare-private sleutelpaar apart moet worden gegenereerd, net als bij elk digitaal certificaat. De CA valideert de ontwikkelaar (organisatie) die het certificaat aanvraagt, ondertekent het certificaat als bewijs van validatie en geeft het uit aan de ontwikkelaar of software-uitgever. Het certificaat dat de CA uitgeeft, bevat informatie zoals de identiteit van de uitgever, de openbare sleutel van de uitgever, de geldigheidsduur van het certificaat, de digitale handtekening van de CA en andere details.
Soorten codeondertekeningscertificaten
Zelfondertekende certificaten:
Software-uitgevers kunnen hun eigen zelfondertekende certificaten genereren. In dergelijke gevallen genereert het verificatieproces van de handtekening tijdens de software-installatie echter een waarschuwing dat de software is gemaakt door een onbekende uitgever. Zelfondertekende certificaten kunnen worden gebruikt voor het testen en lokaal ontwikkelen van software, voordat deze algemeen beschikbaar wordt gesteld voor openbare distributie. Zelfondertekende certificaten mogen echter niet worden gebruikt voor productiesoftware die aan eindgebruikers wordt gedistribueerd.
Voor openbare softwaredistributie zijn door CA's uitgegeven certificaten de beste optie. Er zijn twee soorten door CA's uitgegeven codeondertekeningscertificaten, afhankelijk van het type validatie.
Standaardvalidatiecertificaten:
Dit is het standaardtype codeondertekeningscertificaat en omvat basisvalidaties van de uitgever of ontwikkelaar door de CA. Om in aanmerking te komen voor een standaard codeondertekeningscertificaat, moeten software-uitgevers voldoen aan een aantal basisvereisten, zoals minimale sleutellengte, maximale geldigheidsduur en tijdstempeling voor digitale handtekeningen.
Extended Validation (EV)-certificaten:
EV-codeondertekeningscertificaten vereisen de hoogste niveaus van validatie en controle van de software-uitgever door de CA en worden meestal uitgegeven op een hardwaretoken voor extra beveiligingsniveaus. Om een EV-certificaat te verkrijgen, moeten software-uitgevers naast de basisvereisten van standaardcertificaten ook voldoen aan veel strengere eisen – bijvoorbeeld het bewaren van privésleutels in een Hardwarebeveiligingsmodule (HSM) dat voldoet aan FIPS (Federale Informatieverwerkingsnormen) 140 Niveau 2 of gelijkwaardig.
Certificaatvervaldatum en tijdstempeling
Net als elk digitaal certificaat verlopen ook codeondertekeningscertificaten aan het einde van hun geldigheidsperiode. Na afloop wordt de handtekening niet gevalideerd en kan de software niet meer correct worden geïnstalleerd of uitgevoerd, hoewel er met de software zelf niets mis is. Dit probleem wordt opgelost door middel van tijdstempeling, waarbij een tijdstempel op de code wordt aangebracht op het moment dat het bestand wordt ondertekend. Dit gebeurt meestal via een andere vertrouwde derde partij, een zogenaamde Time Stamp Authority (TSA), om de geldigheid en authenticiteit van de tijdstempel te bewijzen. De aanwezigheid van een tijdstempel zorgt ervoor dat de software blijft werken, zelfs nadat het codeondertekeningscertificaat is verlopen, waardoor de uitgever de tijd heeft om het certificaat te verlengen.
Certificaat intrekken
In eerdere artikelen hebben we gezien dat de kracht van Publieke Sleutel Infrastructuur (PKI) De werking van systemen hangt af van hoe de privésleutels worden beheerd en beveiligd. Als de privésleutel van een digitaal certificaat wordt gecompromitteerd, moet het certificaat ongeldig worden verklaard of ingetrokken door de CA die het certificaat heeft uitgegeven. Intrekking van certificaten is cruciaal in geval van een inbreuk: het zorgt ervoor dat eindgebruikers worden gewaarschuwd dat het certificaat niet langer betrouwbaar is, waardoor het downloaden, installeren en verder gebruiken van de software wordt ontmoedigd. Intrekking van certificaten gebeurt door het ingetrokken certificaat op te nemen in een Certificate Revocation List (CRL) of door de certificaatstatus bij te werken met behulp van het Online Certificate Status Protocol (OCSP). Meer informatie over CRL's en OCSP wordt in een later artikel behandeld.
