Beskrivning
Kodsignering är processen att applicera en digital signatur på ett program som är avsett för distribution över internet. Kodsignering hjälper till att verifiera att programvaran är autentisk, dvs. från den ursprungliga utvecklaren, och hjälper också till att validera att koden inte har manipulerats av en angripare under överföring, t.ex. genom att skadlig kod eller skadlig kod infogas. Den digitala signaturen som används för kodsignering finns i en digitalt certifikat kallas kodsigneringscertifikat.
Kodsigneringscertifikat
Precis som alla andra digitala certifikat är kodsigneringscertifikat baserade på X.509-standarden och måste också signeras av en betrodd tredje part, till exempel en Certifikatmyndighet (CA)Kodsigneringscertifikat kan dock inte användas omväxlande med andra certifikat, t.ex. SSL certifikat. Den främsta anledningen till detta är att enligt X.509-specifikationen innehåller alla digitala certifikat ett fält för "Nyckelanvändning", vilket anger certifikatets avsedda användning och fylls i när certifikatet genereras. Ytterligare information om användningen av certifikatet kan också finnas i tillägget "Utökad nyckelanvändning". X.509-specifikationen föreskriver att ett certifikat inte kan användas för annat än det avsedda ändamålet. Till exempel har ett SSL-certifikat fältet för nyckelanvändning inställt på "Digital signatur" medan ett kodsigneringscertifikat har fältet för nyckelanvändning inställt på "Kodsignering".
Medan X.509 tillhandahåller specifikationen för certifikatformatet, varierar teknikimplementeringarna för att generera certifikat beroende på leverantör. Till exempel är Authenticode en kodsigneringsteknik från Microsoft som hjälper utvecklare att signera applikationer för Windows-operativsystemet. Authenticode-certifikat används för att signera filer med filtillägg som .exe, .dll, .ocx, .cab och .xpi. På liknande sätt används Apples kodsigneringscertifikat för att signera applikationer för iOS, Java-kodsigneringscertifikat används för att signera .jar-filer för Java Runtime Environment (JRE) och Adobe AIR-certifikat används för att signera .air- eller .airi-filer.
Processen för att erhålla ett kodsigneringscertifikat liknar den för andra digitala certifikat. Alla organisationer som vill publicera programvara för distribution över internet ansöker om ett kodsigneringscertifikat hos en CA och skickar in sin publika nyckel och annan organisationsinformation. Observera att det publikt-privata nyckelparet måste genereras separat, precis som i fallet med alla digitala certifikat. CA:n validerar utvecklaren (organisationen) som ansöker om certifikatet, signerar certifikatet som bevis på validering och utfärdar detsamma till utvecklaren eller programvaruutgivaren. Certifikatet som CA:n utfärdar innehåller information som utgivarens identitet, utgivarens publika nyckel, certifikatets giltighetstid, CA:ns digitala signatur och andra detaljer.
Typer av kodsigneringscertifikat
Självsignerade certifikat:
Det är möjligt för programvaruutgivare att generera sina egna självsignerade certifikat. I sådana fall kommer dock signaturverifieringsprocessen under programvaruinstallationen att generera en varning om att programvaran skapades av en okänd utgivare. Självsignerade certifikat kan användas för testning och lokal utveckling av programvara innan den görs allmänt tillgänglig för offentlig distribution. Självsignerade certifikat bör dock inte användas för produktionsprogramvara som distribueras till slutanvändare.
För offentlig programdistribution är CA-utfärdade certifikat det bästa alternativet. Det finns två typer av CA-utfärdade kodsigneringscertifikat baserat på typen av validering.
Standardvalideringscertifikat:
Detta är standardtypen av kodsigneringscertifikat och involverar grundläggande valideringar av utgivaren eller utvecklaren av CA. För att få ett standardkodsigneringscertifikat utfärdat måste programvaruutgivare uppfylla vissa grundläggande krav, såsom minsta nyckellängd, maximal giltighetsperiod och tidsstämpling för digitala signaturer.
Extended Validation (EV) certifikat:
EV-kodsigneringscertifikat involverar de högsta nivåerna av valideringar och granskning av programvaruutgivaren av CA och utfärdas vanligtvis på en hårdvarutoken för ytterligare säkerhetsnivåer. För att få ett EV-certifikat utfärdat måste programvaruutgivare, förutom de grundläggande kraven för standardcertifikat, också uppfylla mycket strängare krav – till exempel att underhålla privata nycklar i en Hårdvarusäkerhetsmodul (HSM) som är kompatibel med FIPS (Federala standarder för informationsbehandling) 140 Nivå 2 eller motsvarande.
Certifikatets utgångsdatum och tidsstämpling
Precis som alla digitala certifikat upphör även kodsigneringscertifikat att gälla när deras giltighetstid löper ut. När de löper ut valideras inte signaturen, och programvaran kan sluta installeras eller köras korrekt, även om det inte är något fel med själva programvaran. Detta problem åtgärdas genom tidsstämpling, där en tidsstämpel appliceras på koden vid signeringstillfället för filen. Detta görs vanligtvis via en annan betrodd tredje part som kallas en Time Stamp Authority (TSA), för att bevisa tidsstämpelns giltighet och äkthet. Närvaron av en tidsstämpel säkerställer att programvaran fortsätter att köras även om kodsigneringscertifikatet har löpt ut, vilket ger utgivaren tid att förnya certifikatet.
Återkallande av certifikat
Vi har sett i tidigare artiklar att styrkan hos Public Key Infrastructure (PKI) system beror på hur de privata nycklarna hanteras och säkras. Om den privata nyckeln för ett digitalt certifikat komprometteras måste certifikatet ogiltigförklaras eller återkallas av den certifikatutfärdare som utfärdade certifikatet. Återkallelse av certifikat är avgörande vid ett intrång: det säkerställer att slutanvändare varnas om att certifikatet inte längre kan litas på, vilket avskräcker nedladdning, installation och vidare användning av programvaran. Återkallelse av certifikat görs genom att inkludera det återkallade certifikatet i en certifikatåterkallningslista (CRL) eller genom att uppdatera certifikatstatusen med hjälp av Online Certificate Status Protocol (OCSP). Ytterligare information om CRL:er och OCSP kommer att behandlas i en senare artikel.
