Laten we het definiëren Code ondertekening in het kort.
Codeondertekening is een methode om een digitale handtekening te plaatsen op een bestand, document, software of uitvoerbaar bestand om de authenticiteit en authenticiteit ervan te testen met betrekking tot de functionaliteit en functies die het biedt. Dit zorgt er ook voor dat de software-entiteit (bestand, document, software of uitvoerbaar bestand) niet wordt gemanipuleerd tijdens de overdracht.
Codeondertekening kan op twee manieren worden geïmplementeerd: client-side ondertekening en server-side ondertekening.
Beiden noemden codeondertekeningsmethoden die populair waren totdat de SolarWinds-aanval in het nieuws kwam en nadien werd client-side signing het gesprek van de dag, omdat het hierbij niet nodig is om de ondertekeningsbestanden te uploaden/verplaatsen. Hierdoor worden aanvallen voorkomen waarbij schadelijke code ook wordt ondertekend als onderdeel van de oorspronkelijke ondertekening van bestanden/entiteiten.
Tijd om eerst de hashfunctie te begrijpen:
Het hash-algoritme is de cryptografische functie die een uitvoer met een vaste lengte genereert, genaamd digest of hashwaarde, van een gegeven invoer die een willekeurige grootte kan hebben. De hashfunctie heeft de eigenschap om een unieke en eenzijdige/onomkeerbare uitvoer te genereren, wat betekent dat we de oorspronkelijke invoerwaarde niet kunnen achterhalen door een omgekeerde hashbewerking uit te voeren.
Laten we eens kijken naar een voorbeeld van een hash-algoritme met een eenvoudige hash-functie:

In het bovenstaande voorbeeld wordt een cryptografische hashfunctie SHA-256 weergegeven die de willekeurige gegevens omzet in een hashwaarde met een vaste grootte van 256 bits.
Laten we nu de Server-side Code Signing in detail bespreken.
De volgende stappen worden uitgevoerd tijdens het ondertekenen van de code of een uitvoerbaar bestand op een server-side-ondertekeningsmanier:
- Er wordt een uniek sleutelpaar gegenereerd en op basis van dit sleutelpaar wordt een CSR (Certificaat Ondertekeningsverzoek) wordt gegenereerd door een aanvrager/ontwikkelaar.
- De CSR wordt verzonden naar CA (certificeringsinstantie) met een codeondertekeningssjabloon.
- De CA geeft het certificaat na validatie uit en retourneert het codeondertekeningscertificaat met de openbare sleutel aan de aanvrager.
- De te ondertekenen code/uitvoerbare code wordt door de aanvrager geüpload naar de codeondertekeningsserver.
- Zodra de code/het uitvoerbare bestand is geüpload, wordt de hashwaarde van de code/het uitvoerbare bestand berekend met behulp van een cryptografische hashfunctie. Omdat deze hashwaarde aan de serverzijde wordt berekend, wordt het ook wel server-side hashing genoemd.
- De berekende hashwaarde wordt ondertekend met de bijbehorende privésleutel die aan de aanvrager is verstrekt, wat resulteert in de digitale handtekening.
- De informatie over de digitale handtekening, het codeondertekeningscertificaat en de hashfunctie worden nu gecombineerd in een handtekeningblok en in de software geplaatst. Deze wordt vervolgens naar de ontvanger/consument verzonden.
- Wanneer de code/het uitvoerbare bestand wordt ontvangen, controleert de computer van de consument eerst de authenticiteit van het codeondertekeningscertificaat.
- Zodra de authenticiteit is bevestigd, wordt het digest ontsleuteld met de openbare sleutel van het gecreëerde sleutelpaar.
- De hashfunctie wordt op de code/het uitvoerbare bestand gebruikt om de digest te berekenen.
- De resulterende samenvatting wordt vergeleken met de door de aanvrager verzonden samenvatting. Als de samenvattingen overeenkomen, is de software veilig om te installeren.
Laten we de client-side ondertekening eens nader bekijken.
De volgende stappen worden uitgevoerd tijdens het ondertekenen van de code of een uitvoerbaar bestand op een client-side-ondertekeningsmanier:
- Er wordt een uniek sleutelpaar gegenereerd en op basis van dit sleutelpaar wordt door een aanvrager/ontwikkelaar een CSR (Certificate Signing Request) gegenereerd.
- De CSR wordt samen met een codeondertekeningsjabloon naar de CA (certificeringsinstantie) verzonden.
- De CA geeft het certificaat na validatie uit en retourneert het codeondertekeningscertificaat met de openbare sleutel aan de aanvrager.
- De hashwaarde van de code/het uitvoerbare bestand wordt berekend met behulp van een cryptografische hashfunctie aan de clientzijde zelf. Omdat deze hashwaarde aan de clientzijde wordt berekend, wordt dit ook wel client-side hashing genoemd.
- Alleen de hashwaarde, dat wil zeggen een samenvatting van de te ondertekenen code/uitvoerbare code, wordt door de aanvrager geüpload naar de codeondertekeningsserver.
- De berekende hashwaarde wordt ondertekend met de bijbehorende privésleutel die aan de aanvrager is verstrekt, wat resulteert in de digitale handtekening.
- De informatie over de digitale handtekening en de hashfunctie wordt teruggestuurd naar de client.
- De informatie over de digitale handtekening, het codeondertekeningscertificaat en de hashfunctie worden nu gecombineerd in een handtekeningblok en in de software geplaatst bij de aanvrager/ontwikkelaar.
- Wanneer de code/het uitvoerbare bestand bij de consument binnenkomt, controleert de computer van de consument eerst de authenticiteit van het codeondertekeningscertificaat.
- Zodra de authenticiteit is bevestigd, wordt het digest ontsleuteld met de openbare sleutel van het gecreëerde sleutelpaar.
- De hashfunctie wordt op de code/het uitvoerbare bestand gebruikt om de digest te berekenen.
- De resulterende samenvatting wordt vergeleken met de door de aanvrager verzonden samenvatting. Als de samenvattingen overeenkomen, is de software veilig om te installeren.
Conclusie
Code ondertekening is een essentiële vereiste geworden voor softwareontwikkelaars. De reden hiervoor is dat codeondertekening ervoor zorgt dat gebruikers erop kunnen vertrouwen dat ze de software zonder zorgen kunnen installeren. Hoewel beide codeondertekeningsmethoden tot nu toe in de industrie worden gebruikt, heeft de aanval van SolarWinds het landschap van codeondertekening in de industrie aanzienlijk veranderd. Nu is client-side ondertekening de voorkeurskeuze, omdat het een aanzienlijk voordeel biedt in termen van het genereren van digitale handtekeningen op afstand. Het vermindert de totale bandbreedtebehoefte doordat alleen hashwaarden worden geüpload en voorkomt aanvallen met kwaadaardige code die is ondertekend, omdat er geen codebestand binnen de omgeving wordt verplaatst.
Bronnen: www.encryptionconsulting.com/education-center/wat-is-code-signing/
