Vertrouwen is cruciaal in de softwaregedreven maatschappij waarin we leven. Maar hoe weten we welke software we moeten vertrouwen en welke we moeten vermijden? We kunnen het danken aan code ondertekening daarom.
Ontwikkelaars gebruiken codeondertekening om de legitimiteit van software aan te tonen en ervoor te zorgen dat de software afkomstig is van een betrouwbare bron en dat er niet mee is geknoeid. GeheimschriftVoor het ondertekenen van code is met name een certificaat nodig, een zogenaamde codeondertekeningscertificaat.
Klanten moeten constant op hun hoede zijn voor derden die zich voordoen als softwareleveranciers terwijl ze software van internet downloaden. Software kan worden gegarandeerd van de juiste bron met behulp van een tool zoals code signing. Om ervoor te zorgen dat consumenten software ontvangen die doet wat de maker belooft, is code signing een proces waarbij een softwareontwikkelaar of -distributeur het verzonden bestand digitaal ondertekent. De handtekening geeft aan dat de code niet is gewijzigd ten opzichte van de oorspronkelijke staat.
Voordelen van codeondertekening
Codeondertekening is een techniek om een digitale handtekening toe te voegen aan een programma, bestand, software-update of uitvoerbaar bestand, zodat de geldigheid en integriteit ervan bij installatie en uitvoering kunnen worden gecontroleerd. Het verzekert de ontvanger ervan wie de auteur is en dat het niet is geopend of gemanipuleerd, net als een lakzegel. Om bijvoorbeeld aan te tonen dat uw Windows 10-update daadwerkelijk van Microsoft afkomstig is en niet van een hacker die probeert uw computer te hacken, maken Microsoft-ontwikkelaars, programmeurs en software-engineers gebruik van codeondertekening.
Dankzij codeondertekening kunt u erop vertrouwen dat u een bestand downloadt van een legitieme auteur of uitgever en niet van een aanvaller die uw persoonlijke informatie en gegevens probeert te stelen. In wezen informeert het u dat een kwaadwillende de code niet heeft gewijzigd, zodat u weet dat het veilig is om te installeren en uit te voeren op uw computer.
Als je ooit het kleine venster hebt gezien dat verschijnt wanneer je een gedownloade software probeert te starten, het venster met de vraag "Weet u zeker dat u dit wilt uitvoeren?" en de uitgever ervan, dan weet je waar ik het over heb. Dan heb je codeondertekening meegemaakt. Dat dialoogvenster informeert je dat de patch voor je Mac OS X authentiek is en zich nog steeds in dezelfde staat bevindt als toen deze door Apple Inc. werd ondertekend.
Wat doet codeondertekening?
Als gebruiker dient codeondertekening een aantal specifieke doeleinden die u kunnen helpen bepalen of u softwaredownloads en andere online interacties kunt vertrouwen. Codeondertekening wordt meestal gebruikt om het auteurschap van bestanden, downloads en software te verifiëren. Zo is de kans groter dat u een downloadbestand van Microsoft installeert dan een bestand van een andere bron, omdat het veel betrouwbaarder lijkt.
Er zullen in de toekomst onvermijdelijk updates verschijnen voor de software die u op uw computer installeert. U kunt er zeker van zijn dat volgende updates van dezelfde bron afkomstig zijn en veilig op uw computer kunnen worden uitgevoerd wanneer ze code-ondertekend zijn met dezelfde sleutel die werd gebruikt om uw eerste downloads te "verzegelen".
Hoe werkt codeondertekening?
Vanuit het perspectief van een ontwikkelaar bestaat codeondertekening uit drie hoofdonderdelen: niet-ondertekende softwarebestanden; codeondertekeningscertificaten; en codeondertekeningsapps. Applicaties voor codeondertekening worden doorgaans meegeleverd met besturingssystemen zoals Microsoft Windows, Mac OS X, enzovoort. Certificaatautoriteiten zijn vaak de bron van de codeondertekeningscertificaten (CA's).
Versleuteling van openbare sleutels
Wanneer u een bericht codeert om het te beschermen tegen onbevoegde lezers, gebruikt u encryptie. Het decoderen van het bericht is afhankelijk van de sleutel die de waarden terugzet naar hun oorspronkelijke staat, zodat het bericht gelezen kan worden. Dit gebeurt meestal door het bericht door een wiskundige functie (een "sleutel" genoemd) te halen om de waarden te wijzigen. De sleutel die het bericht codeert en de sleutel die het ontsleutelt, zijn bij encryptie met een openbare sleutel (ook wel asymmetrische encryptie genoemd) verschillend (vandaar asymmetrisch). Het staat bekend als een "openbare sleutel"-systeem omdat slechts één sleutel – de "openbare sleutel" – wordt gebruikt om de communicatie te beveiligen, terwijl de andere – de "privésleutel" – geheim blijft.
Om dit type encryptie te laten werken, moeten privésleutels veilig en vertrouwelijk worden bewaard en uit de handen van iedereen die berichten probeert te onderscheppen of te manipuleren. Het type verzending bepaalt of de openbare sleutel wordt gebruikt om het bericht te coderen of te decoderen. Versleutelen met de privésleutel en decoderen met de openbare sleutel als u wilt dat iedereen het bericht kan lezen, maar niet wilt dat iemand ermee knoeit. Versleutelen met de openbare sleutel en decoderen met de privésleutel doet u als u wilt dat iedereen berichten kan verzenden, maar niet wilt dat de verkeerde persoon ze onderschept.
Hash-functie
Een vorm van encryptie genaamd hashfuncties is bedoeld om onomkeerbaar te zijn. Hashfuncties zijn ontworpen als eenrichtingsverkeer en maken gebruik van een wiskundige functie die de gegevens wijzigt op een manier die niet ongedaan kan worden gemaakt, in tegenstelling tot coderen met een sleutel en het gebruiken van een sleutel om te decoderen. De meest voorkomende vergelijking is als het mengen van verf. Ter illustratie: het mengen van blauw (de oorspronkelijke waarden) en geel (de hashfunctie) resulteert altijd in groen, maar er is geen manier om de twee kleuren te scheiden en blauw terug te krijgen.
Wanneer u een bepaalde waarde nodig hebt en de gegevens niet opnieuw hoeft te lezen, worden hashfuncties gebruikt. Het meest voorkomende voorbeeld zijn inlogwachtwoorden, die vaak door websites worden gehasht om ze op te slaan. Mocht er ooit een inbreuk plaatsvinden, dan heeft de hacker alleen een verzameling willekeurige getallen in handen. De website hasht uw wachtwoord opnieuw en vergelijkt dit met de eerder opgeslagen hashwaarde wanneer u inlogt. Ze laten u binnen als de door u verstrekte informatie overeenkomt met wat er in hun gegevens staat. Ze hoeven alleen de waarde te weten; ze hoeven het wachtwoord zelf niet te lezen.
Code Signing-certificaten
Voordat ontwikkelaars hun werk kunnen ondertekenen, moeten ze een openbaar/privé sleutelpaar genereren. Dit gebeurt vaak lokaal via softwaretools zoals OpenSSL. Ontwikkelaars geven vervolgens de openbare sleutel en de identiteitsgegevens van de organisatie door aan een betrouwbare CA. De CA verifieert de authenticiteit van de identiteitsgegevens en geeft vervolgens het certificaat uit aan de ontwikkelaar. Dit is het codeondertekeningscertificaat dat is ondertekend met de privésleutel van de CA en de identiteit van de ontwikkelaarsorganisatie en de openbare sleutel van de ontwikkelaar bevat.
Ontwikkelaars nemen alle code die ze hebben geproduceerd en hashen deze wanneer ze klaar zijn om deze te 'ondertekenen' om het auteurschap te bewijzen. De uitvoerwaarde wordt vervolgens gecodeerd met behulp van de eerder opgegeven privésleutel, die vaak door de auteur wordt aangemaakt, en het codeondertekeningscertificaat, dat de publieke sleutel en de identiteit van de auteur bevat (wat het auteurschap bewijst). Het resultaat van deze procedure wordt vervolgens opgenomen in het programma dat wordt gedistribueerd.
Dit is een voorbeeld van codeondertekening. De meeste browsers en besturingssystemen worden geleverd met de openbare sleutel van de CA vooraf geïnstalleerd. Wanneer een gebruiker het programma downloadt, verifieert hij eerst de legitimiteit van het codeondertekeningscertificaat dat in de ondertekende software is opgenomen om er zeker van te zijn dat het afkomstig is van een betrouwbare CA met behulp van de openbare sleutel van de CA. De gecodeerde hash wordt vervolgens ontsleuteld met de openbare sleutel van de ontwikkelaar, die vervolgens uit het certificaat wordt gehaald.
Het programma wordt vervolgens opnieuw gehasht en het resultaat wordt vergeleken met de gedecodeerde waarde. Het programma is niet gemanipuleerd of beschadigd tijdens de overdracht als de hashwaarden die door de gebruiker en de ontwikkelaar zijn gegenereerd, overeenkomen. De gebruiker wordt vervolgens geïnformeerd dat het programma zich in dezelfde staat bevindt als toen de ontwikkelaar het de vorige keer achterliet en dat het veilig is om te installeren en uit te voeren, mits de ontwikkelaar te vertrouwen is.
Rootcertificaten
Codeondertekening kan u, de eindgebruiker, vertrouwen geven in de betrouwbaarheid en validiteit van het gedownloade programma. U moet er echter ook rekening mee houden dat kwaadwillenden een codeondertekeningscertificaat en een publiek-private sleutelpaar kunnen produceren om de indruk te wekken dat ze geautoriseerd zijn door een legitieme certificeringsinstantie (CA). Hoe bepaalt u of certificaten betrouwbaar zijn als iedereen een codeondertekeningscertificaat kan maken?
Rootcertificaten spelen hierbij een rol. Codeondertekeningscertificaten kunnen worden vergeleken met een stamboom. U kunt certificaten traceren om te achterhalen welk ondertekeningscertificaat – uw rootcertificaat – zich aan de basis van de stamboom bevindt, om zo te bevestigen waar ze vandaan komen. Omdat u de 'keten van vertrouwen' kunt volgen tot aan de oorspronkelijke ondertekeningsautoriteit met het rootcertificaat, kunt u nagaan of de andere codeondertekeningscertificaten betrouwbaar zijn.
Bedrijven zoals Apple of Microsoft kunnen worden beschouwd als root-autoriteit. Het systeem waarschuwt u om het certificaat dat is gebruikt om het programma dat u probeert te downloaden te ondertekenen, niet te vertrouwen als het ondertekeningscertificaat van uw software geen betrouwbaar root-certificaat kan vinden. Zelfs een vertrouwde autoriteit kan soms niet worden herkend als deze niet is geïnstalleerd in een browser of in de trust store van een besturingssysteem. Om ervoor te zorgen dat de browser of het besturingssysteem het root-certificaat in deze situaties als betrouwbaar en geldig accepteert, moet u het handmatig in uw trust store plaatsen.
Welke soorten digitale certificaten zijn er?
Verschillende systemen vereisen verschillende soorten authenticatie. Wat werkt op een desktop, is waarschijnlijk niet geschikt voor mobiele systemen en vice versa. Hier zijn een paar voorbeelden van de verschillende certificaten voor zowel desktop- als mobiele software.
Desktopcertificaten:
- Microsoft
- Java
- Microsoft Office en VBA
- Adobe-AI
Mobiele certificaten:
- Windows Phone
- Windows Phone Private Enterprise
- Java geverifieerd
- Android
Als u uw software wilt ondertekenen en beveiligen, moet u eerst weten met welk type software of systeem u begint. Vervolgens kunt u van daaruit verder werken.
Waarvoor dient een digitaal certificaat?
A digitaal certificaat Is bedoeld om de software of code die u aan uw gebruikers distribueert een identiteit te geven. Gebruikers kunnen de uitgever van het programma verifiëren met een digitaal certificaat. Omdat deze digitale certificaten worden uitgegeven door certificeringsinstanties, hebben gebruikers meer vertrouwen in de uitgevers. De mogelijkheid om hun product en het aantal downloads te volgen, geeft digitale certificaten aan softwareleveranciers veel extra waarde.
Hoe lang is een digitaal certificaat geldig?
Hoe lang een certificaat geldig is, is een andere veelgestelde vraag van mensen die hun eigen digitale codeondertekeningscertificaat willen verkrijgen. Digitale certificaten hebben normaal gesproken slechts een jaar of twee geldigheid, maar de werkelijke geldigheidsduur kan variëren, afhankelijk van de uitgever.
Deze geldigheid is kort om de volgende twee redenen:
Privésleutels en beveiligingscertificaten kunnen en zullen gehackt worden. Eerdere certificaten, zelfs die welke gestolen zijn, worden ongeldig bij verlenging en moeten om de één of twee jaar worden gewijzigd.
Technologie ontwikkelt zich nog sneller dan de rest van de wereld. Vijf jaar geleden was wat veilig was, lang niet meer zo veilig. Codeondertekeningscertificaten kunnen worden bijgewerkt en gewijzigd om de certificaatbeveiliging up-to-date te houden.
Waar wordt Code Signing gebruikt?
Codeondertekening wordt gebruikt wanneer een ontwikkelaar wil dat de gebruiker zeker is van de bron van een stuk software. Dit omvat:
1. Windows-applicaties en softwarepatches
2. Apple-software
3. Microsoft Office VBA-objecten en macro's
4. .jar-bestanden
5. .air of .airi bestanden
6. In wezen elk uitvoerbaar bestand
Houd er rekening mee dat codeondertekening, vanwege de gedistribueerde aard van Linux-ontwikkeling, vaak niet wordt gebruikt voor Linux-gebaseerde software, waardoor software mogelijk ongetekend wordt geleverd. Als dat gebeurt, zal uw computer (als er een melding wordt gegeven) aangeven dat het afkomstig is van een "onbekende ontwikkelaar", of iets dergelijks. Hier zijn een paar andere applicaties en software die codeondertekening gebruiken om hun beveiliging te verbeteren.
- iOS: Codeondertekening in iOS voor de App Store gebeurt met Xcode. Het doel van het ondertekenen van je app is simpelweg om iOS te laten weten wie de app oorspronkelijk heeft ondertekend en om te controleren of de app niet is gewijzigd sinds de oorspronkelijke ondertekening door de ontwikkelaar. Als je je iOS-certificaat wilt intrekken, moet je je ontwikkelaarsaccount of Xcode gebruiken om het proces te voltooien.
- Xcode: Xcode wordt door iOS gebruikt om apps te coderen en hun beveiliging te garanderen. Voordat een apparaat kan worden geüpload en goedgekeurd voor de iTunes Store, moet het een geldige Apple Developer ID met een geldig certificaat of profiel hebben. Om uw app succesvol te integreren, hebt u een ontwikkelingscertificaat nodig. Om de app op elk apparaat te kunnen gebruiken, moet u een distributiecertificaat gebruiken om de app te versturen en te testen.
- C#Visual C# gebruikt sterke naamondertekening om een unieke ondertekeningscode te verkrijgen die voor niemand anders ter wereld beschikbaar is en niet kan worden vervalst. Wanneer u Visual C# gebruikt, kunt u uw implementatie eenvoudig ondertekenen met de tool sn.exe. Dit fungeert als uw handtekening door de handtekeningcontroletool "Sterke naam: Ondertekend" te gebruiken.
- Windows-certificaatVrijwel elk uitvoerbaar bestand kan worden ondertekend met een digitale handtekening om de veiligheid en integriteit van het bestand te verifiëren. Om het bestand als veilig te beschouwen in Windows, moet het worden ondertekend door een erkende certificeringsinstantie. Iedereen die malware verspreidt onder een geldig certificaat, is juridisch aansprakelijk voor de software die hij verspreidt.
- Visual Studio:Visual Studio is vooral handig als het gaat om sterke naamsondertekening voor assembly's – een notoir lastige taak. Sterke naamsondertekening via Visual Studio zorgt ervoor dat andere computers de softwareontwikkelaar kunnen vertrouwen.
