Code signing Door: Tom Tervoort
Wat is code signing? Digitale handtekening onder stuk software Geeft garanties over bron Voorkomt modificatie door derden Bijvoorbeeld met doel malware toe te voegen Ontvanger software heeft verificatiemechanisme en publieke sleutel nodig
Hoe werkt het? Bij softwarerelease: maak een 'vingerafdruk' Elke afdruk dient 'uniek' te zijn voor deze code Gebruiker kan ook afdruk maken Methode: cryptografische hashfunctie Versleutel afdruk met geheime sleutel Bijvoorbeeld met RSA of ElGamal Gebruiker bezit publieke sleutel Kan overgelaten worden aan instantie Lever versleutelde afdruk mee met software
Wat doet het wel/niet? 'Correcte' code signing garandeert: Authenticiteit Integriteit Bewijsbaarheid van eigenaar Maar niet: Goedwillendheid van ontwikkelaar Absentie van malware Ook wanneer niet de intentie van ondertekenaar D.m.v. modificaties vóór ondertekening
Mogelijke toepassingen Updatemechanisme Bijv. in OS, virusscanner Software repositories Hoster hoeft niet vertrouwd te worden 'Extended priviliges' in browser Gebruiker geeft toestemming ActiveX, signed Javascript In de praktijk onveilig
De vingerafdruk Functie over alle bits in software en certificaat Resultaat is een zo uniek mogelijke bitreeks Enige modificatie software => andere vingerafdruk Er bestaan programma's met dezelfde afdruk Maar deze dienen moeilijk te vinden te zijn
Cryptografische hashfunctie Oplossing: 'sterke' cryptografische hashfunctie Eisen: Hash niet te klein Niet inverteerbaar Zwakke botsingvrijheid Aanvaller kan geen ander programma met zelfde afdruk vinden Sterke botsingvrijheid Aanvaller kan ook geen botsende programma's genereren
Kraken hashfunctie Brute-force Programma random aanpassen tot toevallige match Chosen prefixaanval Verjaardagsaanval Twee programma's tegelijk brute-forcen Complexiteit: O(2 n/2 )
MD5 Populaire hashfunctie 128-bit hashes Verjaardagsaanval in O(2 64 ) 1996: eerste botsing gevonden 2008: bestaande X.509-certificaten vervalsen RFC 6151: MD5 niet meer acceptabel Tenminste, voor code signing Kraken kan al na zo'n 2 50 evaluaties
SHA-1 Secure Hash Algorithm Afkomstig van de NSA Veel theoretische aanvallen Verjaardagsaanval: O(2 80 ) Geclaimt record: botsing na 2 57 evaluaties Maar: nog geen in de praktijk gedemonstreerd SHA-2: (nog) geen aanvallen gevonden
Encryptie van afdruk Assymetrische encryptie Meestal RSA 'Correcte' RSA-implementatie is veilig Sleutel moet wel groot genoeg zijn Tenzij iemand snel factoren kan ontbinden Maar niet elke implementatie is correct Bugs benutten Voorspelbare RNG
De geheime sleutel Hoe houd je de geheime sleutel privé? Overlaten aan een gespecialiseerde partij CA? Ontwikkelaar OS? Zo min mogelijk blootstellen aan buitenwereld Smartcard, hardwaremodule Analoge beveiliging en hoe zit het met de source code? Misschien wel essentiëler dan sleutel!
De publieke sleutel Hoe distribueer je de publieke sleutel? Aanwezig in OS Meeleveren met software Duurdere en veiligere host (+ veilig kanaal) Via certificaat Enkel eerste download 'onveilig' Net zo belangrijk: Controleprogramma vingerafdruk
Kwetsbare punten Vingerafdruk RSA-implementatie Geheime sleutel Publieke sleutel Verificatieprogramma
Voorbeelden praktijkaanvallen Flamevirus Via Windows-update MD5-botsing, trucs met certificaten Nintendo Wii Domme fout in verificatie vingerafdruk Axis-browser van Yahoo Geheime sleutel in code!
Conclusie Code signing Geeft 'garantie' van authenticiteit en integriteit Ideaal voor distributie updates Geen vertrouwde host nodig Maar: Kies de juiste crypto-algoritmen (makkelijk) Bescherm en verspreid sleutels juist (moeilijk) Maak geen implementatiefouten (bijna onmogelijk)