LÃ¥t oss kortfattat definiera kodsignering .
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.
Klientsidig hashing, definierad: beräkna filens hash lokalt, på utvecklarens maskin eller byggserver, och skicka endast den hashen (inte själva filen) till signeringstjänsten för signering, så att hela artefakten och, ännu viktigare, den privata nyckeln aldrig behöver interagera direkt över en nätverksanslutning.
Key Takeaways
- Valet handlar inte om hashsäkerhet, SHA-256 är SHA-256 oavsett, det handlar om vad som måste lämna byggmiljön: hela artefakten (serversidan) eller bara dess hash (klientsidan).
- Klientsidig hashing minskar bandbredden för stora artefakter och begränsar attackytan, eftersom själva filen aldrig laddas upp till en delad signeringsserver där den teoretiskt sett skulle kunna avlyssnas eller ersättas under överföring.
- Inget av tillvägagångssätten kräver att den privata nyckeln någonsin lämnar en HSM. Skillnaden handlar om artefaktens exponering, inte nyckelns.
Klientsidig kontra serversidig hashing
| Klientsidans hashing | Server-side hashing | |
|---|---|---|
| Vad som laddas upp till signeringstjänsten | Endast hashen (några byte) | Den fullständiga artefakten |
| Bandbredd för stora artefakter (firmware, installationsprogram) | Minimal | Vågar med artefaktstorlek |
| Exponering av artefakter under transport | Ingen, filen lämnar aldrig byggmiljön | Fullständig artefakt passerar nätverket till signeringsservern |
| Implementeringskomplexitet | Kräver klientverktyg för att beräkna och skicka hashen korrekt | Enklare klientintegration; servern hanterar hashing |
| Bästa passform | Stora artefakter, bandbreddsbegränsade eller CI/CD-pipelines med hög volym | Enklare inställningar där artefaktstorlek och exponering för transport är mindre av betydelse |
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.
Vanliga frågor om partihandel med mat och dryck
Gör klientsidig hashing den privata nyckeln säkrare?
Inte direkt. I båda metoderna bör den privata nyckeln finnas kvar i en HSM och aldrig lämna den. Det som klientsidans hashing ändrar är om hela artefakten färdas över nätverket för att nå signeringstjänsten, inte hur själva nyckeln skyddas.
Är klientsideshashing alltid det bättre valet?
Inte universellt, det beror på artefaktstorlek och pipelinevolym. För stora firmware-avbildningar eller CI/CD-pipelines med hög volym är det viktigt att undvika fullständiga artefaktuppladdningar. För mindre signeringsbehov med lägre frekvens kan server-side hashings enklare klientintegration vara det mer praktiska valet.
Vilken metod använder en företagssigneringsplattform som CodeSign Secure?
Klientsidig hashning, där man beräknar sammanfattningen lokalt och endast skickar den till den HSM-baserade signeringstjänsten, är standardmetoden för CI/CD-integrerad signering på företag, eftersom den håller stora artefakter helt borta från signeringsinfrastrukturens nätverksväg.
Slutsats
Kodsignering har blivit ett självklart 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/
