Låt oss definiera Kodsignering kort sagt.
Kodsignering är en metod för att sätta en digital signatur på en fil, ett dokument, en programvara eller en körbar fil för att testa dess äkthet och äkthet vad gäller funktionalitet och egenskaper som den tillhandahåller. Detta säkerställer också att programvaruenheten (fil, dokument, programvara eller körbar fil) inte manipuleras under överföring.
Kodsignering kan implementeras på två sätt: klientsidesignering och serversidesignering.
Båda nämnde kodsigneringsmetoder som var populära tills SolarWinds-attacken kom i rampljuset och inlägget att klientsignering blev samtalsämnet eftersom detta inte kräver att signeringsfilerna laddas upp/flyttas, vilket förhindrar attacker där skadlig kod också signeras som en del av den ursprungliga fil-/enhetssigneringen.
Dags att förstå hashfunktionen först:
Hash-algoritmen är den kryptografiska funktion som genererar en utdata med fast längd, kallad digest, eller hashvärde, från en given indata som kan ha godtycklig storlek. Hashfunktionen har en egenskap att generera en unik och enkelriktad/icke-reversibel utdata, vilket innebär att vi inte kan komma tillbaka till det ursprungliga indatavärdet genom att utföra en omvänd hash-operation.
Låt oss titta på ett exempel på en hashalgoritm med en enkel hashfunktion:

I exemplet ovan visas en kryptografisk hashfunktion SHA-256 som konverterar godtycklig data till ett 256-bitars hashvärde med fast storlek.
Nu ska vi förstå kodsignering på serversidan i detalj.
Följande steg utförs vid signering av koden eller någon körbar kod på serversidan:
- Ett unikt nyckelpar genereras och baserat på detta nyckelpar genereras en CSR (Certifikatsigneringsbegäran) genereras av en begärande part/utvecklare.
- CSR:n skickas till CA (certifikatutfärdare) med en mall för kodsignering.
- CA utfärdar certifikatet efter validering och returnerar kodsigneringscertifikatet med den publika nyckeln till den som begär det.
- Koden/körbar fil som ska signeras laddas upp till kodsigneringsservern av den som begär det.
- När koden/den körbara filen har laddats upp beräknas hashvärdet för koden/den körbara filen med hjälp av valfri kryptografisk hashfunktion, och eftersom detta hashvärde beräknas på serversidan, därav namnet serverside-hashing.
- Det beräknade hashvärdet signeras av motsvarande privata nyckel som utfärdats till den begärande parten, vilket resulterar i den digitala signaturen.
- Den digitala signaturen, kodsigneringscertifikatet och hashfunktionsinformationen kombineras nu till ett signaturblock och placeras i programvaran, som skickas till mottagaren/konsumenten.
- När koden/den körbara filen tas emot kontrollerar konsumentens dator först äktheten hos kodsigneringscertifikatet.
- När äktheten har bekräftats dekrypteras digestet med den publika nyckeln för det skapade nyckelparet.
- Hashfunktionen används på koden/den körbara filen för att beräkna digest.
- Den resulterande sammanfattningen jämförs med den sammanfattning som skickats av begärande part. Om sammanfattningarna matchar är programvaran säker att installera.
Låt oss förstå klientsidesigneringen i detalj.
Följande steg utförs vid signering av koden eller någon körbar kod på klientsidan:
- Ett unikt nyckelpar genereras och baserat på detta nyckelpar genereras en CSR (Certificate Signing Request) av en begärande part/utvecklare.
- CSR:n skickas till CA (certifikatutfärdare) med en mall för kodsignering.
- CA utfärdar certifikatet efter validering och returnerar kodsigneringscertifikatet med den publika nyckeln till den som begär det.
- Hashvärdet för koden/den körbara filen beräknas med hjälp av valfri kryptografisk hashfunktion på själva klientsidan. Eftersom detta hashvärde beräknas på klientsidan, därav namnet klientsidig hashing.
- Endast hashvärdet, dvs. en sammanfattning av koden/körbar fil som ska signeras, laddas upp till kodsigneringsservern av den som begär det.
- Det beräknade hashvärdet signeras av motsvarande privata nyckel som utfärdats till den begärande parten, vilket resulterar i den digitala signaturen.
- Den digitala signaturen och hashfunktionsinformationen skickas tillbaka till klienten.
- Den digitala signaturen, kodsigneringscertifikatet och hashfunktionsinformationen kombineras nu till ett signaturblock och placeras i programvaran hos beställaren/utvecklaren.
- När koden/den körbara filen tas emot hos konsumenten kontrollerar konsumentens dator först äktheten hos kodsigneringscertifikatet.
- När äktheten har bekräftats dekrypteras digestet med den publika nyckeln för det skapade nyckelparet.
- Hashfunktionen används på koden/den körbara filen för att beräkna digest.
- Den resulterande sammanfattningen jämförs med den sammanfattning som skickats av begärande part. Om sammanfattningarna matchar är programvaran säker att installera.
Slutsats
Kodsignering har blivit ett väsentligt krav för mjukvaruutvecklare och anledningen är att kodsignering säkerställer förtroende bland användare att installera programvaran utan att behöva oroa sig för någonting. Även om båda kodsigneringsmetoderna används i branschen idag, har SolarWinds attack förändrat kodsigneringslandskapet i branschen avsevärt. Nu är klientsidesignering ett föredraget val med tanke på att det ger en betydande fördel när det gäller fjärrgenerering av digitala signaturer, vilket minskar det totala bandbreddskravet på grund av endast uppladdning av hashvärden och undviker attacker av skadlig kod som signeras på grund av att ingen kodfil flyttas inom miljön.
Resurser: www.encryptionconsulting.com/education-center/what-is-code-signing/
