Hashfunktionen gehören zu den gängigsten Methoden zum Schutz von Daten in unserer von Cybersicherheit geprägten Welt. Neben der Verschlüsselung ist Hashing eine der am häufigsten verwendeten Techniken, insbesondere in Datenbanken. Hashing ist ein relativ einfacher Prozess, der Daten verschlüsselt und sicherstellt, dass sie nicht wieder in Klartext umgewandelt werden können. Dadurch wird gewährleistet, dass die Daten wirksam geschützt sind und unabhängig davon, wie lange ein Angreifer Zugriff darauf hat, nicht wiederhergestellt werden können.
Eine Hash-Funktion wandelt Daten beliebiger Größe in eine Zeichenkette fester Länge (einen Hashwert) um. Dieser Vorgang ist irreversibel. Die Funktion wird angreifbar, wenn es Forschern gelingt, zwei unterschiedliche Eingaben mit demselben Hashwert zu erzeugen – eine sogenannte Hash-Kollision. Dies geschah beispielsweise 2017 bei SHA-1. Beim Signieren von Code ist das Hashen der erste Schritt: Die Datei wird gehasht, und dieser Hashwert, nicht die Datei selbst, wird signiert.
Kurz gesagt: Hashing wandelt eine Datei in einen Hashwert fester Länge um; Codesignierung verschlüsselt diesen Hashwert mit einem privaten Schlüssel, um eine Signatur zu erzeugen, die jeder mit dem zugehörigen öffentlichen Schlüssel überprüfen kann. SHA-1 ist veraltet und unsicher für neue Signaturen; SHA-256 ist der aktuelle Standard.
Wichtige Erkenntnisse
- SHA-1 ist fĂĽr die Codesignierung veraltet; der heutige Industriestandard ist SHA-256, und SHA-3 existiert als strukturell unterschiedliche Alternative fĂĽr den Fall, dass in Zukunft eine Schwachstelle in der SHA-2-Familie gefunden wird.
- Hashing und Verschlüsselung lösen unterschiedliche Probleme: Hashing ist unidirektional und dient der Erkennung von Manipulationen; Verschlüsselung ist bidirektional und dient der Vertraulichkeit von Daten. Codesignierung verwendet beide Verfahren nacheinander.
Wie funktioniert Hashing?
Die Idee hinter Hashing besteht darin, Daten so zu maskieren, dass sie nicht im Klartext gelesen werden können . Deshalb wird diese Methode so häufig in Datenbanken eingesetzt. Solange die Daten eine feste Länge haben, spielt es keine Rolle, was die Daten in der Datenbank tatsächlich enthalten. Dieselben Funktionen und Prozeduren können auf einer Datenbank ausgeführt werden, unabhängig davon, ob die Spalten mit beispielsweise Sozialversicherungsnummern gültige Sozialversicherungsnummern enthalten oder nicht.
Da beim Hashing ein Hashwert fester Länge erzeugt wird, kann ein Benutzer alle personenbezogenen Daten (PII) hashen und so sicherstellen, dass alle notwendigen Datenbankoperationen ordnungsgemäß durchgeführt werden können. Sollte es einem Angreifer jedoch gelingen, Zugriff auf die Datenbank zu erlangen, wäre er nicht in der Lage, personenbezogene Daten zu stehlen.
Hashing selbst ist kein besonders komplizierter Prozess, wie die folgende Abbildung veranschaulicht. Dabei wird eine Zeichenfolge, in unserem Beispiel eine Sozialversicherungsnummer, in eine Hash-Funktion eingegeben. Diese Hash-Funktion generiert dann eine randomisierte Zeichenfolge, einen sogenannten Hash Digest, der beispielsweise in einer Datenbank verwendet werden kann, während die tatsächlich gehashten Daten verschleiert werden.
Wie bereits erwähnt, ist Hashing ein Einwegprozess, im Gegensatz zur Verschlüsselung, die ein bidirektionaler Vorgang ist und die Entschlüsselung der Daten ermöglicht, solange Sie den Schlüssel besitzen. Das bedeutet: Selbst wenn ein Angreifer Zugriff auf Ihre gesamte Datenbank erhält, kann er die Daten niemals verwenden und die geschützten Informationen stehlen, solange alle personenbezogenen Daten gehasht sind. Hashing dient außerdem der Nachrichtenintegrität, der Passwortvalidierung und der Erstellung digitaler Signaturen.

Hashing ist aus mehreren Gründen die wichtigste Methode zur Erstellung digitaler Signaturen. Clientseitiges Hashing, bei dem eine Datei auf dem Client-Rechner in eine Zeichenkette umgewandelt und diese anschließend gehasht wird, ermöglicht es dem Benutzer, eine sichere, digital signierte Datei zu senden, ohne das Risiko eines Man-in-the-Middle-Angriffs bei der Übertragung des Hashwerts an den Server, der die Signatur generiert, einzugehen.
Durch das Hashing der Datei auf der Clientseite könnte ein Angreifer den auf dem Clientcomputer während der Übertragung generierten Hash-Digest abgreifen, hätte aber dennoch keinen Zugriff auf die Datei selbst, da Hashing ein Einwegprozess ist. Darüber hinaus trägt die Verwendung von Hashing in digitalen Signaturen zur Sicherheit dieser Signaturen bei. Durch das Signieren von Software mit einer gehashten Signatur kann ein Benutzer sofort erkennen, dass die Signatur vom Softwareentwickler stammt und dass während der Übertragung zum Benutzer keine Schadsoftware in die Software eingeschleust wurde.
Was ist eine Hash-Funktion?
Nachdem wir nun besser verstanden haben, wie Hashing selbst funktioniert, werfen wir einen Blick auf die Hash-Funktionen selbst. Sie haben wahrscheinlich schon von den verschiedenen Hashing-Algorithmen wie SHA-1, SHA-256 und SHA-512 gehört.
SHA steht für Secure Hash Algorithm (Sicherer Hash-Algorithmus). Die Zahl am Ende der Algorithmusbezeichnung gibt die Bitlänge des erzeugten Hashwerts an. SHA-1-Hashwerte sind 160 Bit lang, SHA-256-Hashwerte 256 Bit usw. Diese sicheren Hash-Algorithmen wurden auf Grundlage des Standards FIPS 180-4 des National Institute of Standards and Technology ( NIST ), dem Secure Hash Standard, entwickelt.
FIPS 180-4 (Federal Information Processing Standards) erfordert die Verwendung von Hashing-Algorithmen, da Hashes rechnerisch sicher sind und es nahezu unmöglich ist, zwei verschiedene Nachrichten mit demselben Hash-Digest zu finden. Der Grund dafür ist, dass beim Ändern eines einzelnen Buchstabens einer Datei und anschließendem Hashing vor und nach der Änderung der einzelnen Buchstaben der generierte Hash-Digest völlig unterschiedlich ist. Das bedeutet, dass keine zwei unterschiedlichen Nachrichten denselben Hash-Digest verwenden können.
Welche SicherheitslĂĽcken gibt es beim Hashing?
Ich habe bereits über die Sicherheit von Hashing gesprochen, doch in der Vergangenheit wurden Schwachstellen entdeckt. Der SHA-1-Hashing-Algorithmus ist veraltet, da er sich aufgrund der zunehmenden Rechenleistung und der zunehmenden Bedeutung von Cloud Computing als zu schwach erwiesen hat. Ein Team bei Google konnte mit dem SHA-1-Algorithmus eine Datei generieren, die denselben Hash-Digest-Wert ergab. Dies hat für einige Beunruhigung gesorgt, denn wenn dies mit SHA-1 möglich ist, könnte dies in naher Zukunft auch mit den derzeit als sicher geltenden Hashing-Algorithmen passieren.
Das Problem bei solchen Sicherheitslücken besteht darin, dass ein Computer, der SHA-1 zur Überprüfung der Website-Authentizität verwendet, fälschlicherweise eine Verbindung zu einer schädlichen Website herstellen könnte. Dies kann zum Diebstahl von Informationen oder Zugangsdaten oder zum Herunterladen von Schadsoftware auf den Computer des Opfers führen. Sollten sich stärkere Secure-Hashing-Algorithmen auf dieselbe Weise knacken lassen, könnten die im täglichen Betrieb verwendeten Tools zukünftig unbrauchbar werden. Aktuell hat das NIST SHA-3 veröffentlicht, das im Vergleich zu SHA-1 deutlich sicherer ist.
Vergleich von Hash-Algorithmen fĂĽr die Codesignierung
| Algorithmus | Digest Größe | Status | Verwendung für Neuverträge |
|---|---|---|---|
| SHA-1 | 160 Bits | Veraltet; praktische Kollisionen demonstriert (SHAttered, 2017) | Nein |
| SHA-256 | 256 Bits | Aktueller Industriestandard | Ja |
| SHA-512 | 512 Bits | Stärkere Variante der SHA-2-Familie | Ja, wo größere Digeste akzeptabel sind. |
| SHA-3 | Variable (224-512 Bit) | Standardisiert (FIPS 202); strukturell unterschiedlich von SHA-2 | Ja, als Diversifizierungsoption. |
Wie Hashing in den Codesignierungsprozess passt
Hashing ist ein Schritt in einer größeren Sequenz. Der vollständige Prozess sieht folgendermaßen aus:
- Hash die Datei: Die zu signierende Software oder Datei wird durch eine Hash-Funktion (heute SHA-256) geleitet, um einen Digest fester Länge zu erzeugen.
- VerschlĂĽsseln Sie den Hash mit dem privaten SchlĂĽssel: Der Hashwert, nicht die Datei selbst, wird mit dem privaten SchlĂĽssel des Unterzeichners verschlĂĽsselt, der typischerweise in einem SchlĂĽssel gespeichert ist. HSMDieser verschlĂĽsselte Hashwert ist die digitale Signatur.
- Fügen Sie das Zertifikat und den Zeitstempel bei: Die Signatur wird zusammen mit dem öffentlichen Schlüsselzertifikat des Unterzeichners und idealerweise einem vertrauenswürdigen Zeitstempel, der die Gültigkeit des Zertifikats zum Zeitpunkt der Unterzeichnung bestätigt, in die Datei eingebettet.
- Bitte beim Empfänger überprüfen: Das System des Empfängers berechnet den Hashwert der heruntergeladenen Datei neu, entschlüsselt die eingebettete Signatur mithilfe des öffentlichen Schlüssels des beigefügten Zertifikats und vergleicht die beiden Hashwerte. Eine Übereinstimmung bestätigt, dass die Datei seit der Signierung unverändert geblieben ist.
Ă–ffentliche vs. private SchlĂĽssel beim Signieren
Der private Schlüssel dient der Signatur, der öffentliche Schlüssel der Verifizierung. Nur der private Schlüssel, der stets unter der Kontrolle des Unterzeichners (idealerweise eines HSM) verbleibt, kann eine gültige Signatur erzeugen. Der öffentliche Schlüssel, der über das Zertifikat offen zugänglich ist, ermöglicht es jedem, diese Signatur zu überprüfen, ohne selbst eine erstellen zu können. Diese Asymmetrie erlaubt es einem unabhängigen Dritten, einer Signatur zu vertrauen, ohne dass eine vorherige Beziehung zum Unterzeichner erforderlich ist.
Zertifikatstypen
Code-Signatur-Zertifikate gibt es in zwei Hauptvalidierungsstufen: Organisationsvalidierung (OV) , die die Anmeldeinformationen eines registrierten Unternehmens überprüft, und Erweiterte Validierung (EV) , die eine gründlichere Identitätsprüfung beinhaltet und auf den meisten Systemen Warnungen zu „Unbekannter Herausgeber“ sofort unterdrückt. Beide Typen basieren auf demselben Hash- und Signaturverfahren, das oben beschrieben wurde.
Warum Zeitstempel wichtig sind
Ein Zeitstempel belegt, dass das Zertifikat zum Zeitpunkt der Signierung gültig war und stammt von einer vertrauenswürdigen Zeitstempelstelle. Ohne Zeitstempel ist die Vertrauenswürdigkeit einer Signatur direkt an die Gültigkeitsdauer des Zertifikats gebunden. Das bedeutet, dass signierte Software mit Ablauf des Zertifikats als nicht vertrauenswürdig gilt, selbst wenn sich die Software selbst nicht verändert hat. Mit einem Zeitstempel bleibt die Signatur unbegrenzt gültig, da dieser die Gültigkeit des Zertifikats zum Zeitpunkt der Signierung belegt, nicht dessen aktuelle Gültigkeit.
Die Vertrauenskette
Ein Codesignaturzertifikat genießt Vertrauen, weil es über ein oder mehrere Zwischenzertifikate auf eine Stammzertifizierungsstelle (CA) verweist, der Betriebssysteme und Browser bereits vertrauen. Die Überprüfung einer Signatur bedeutet, diese Kette nachzuvollziehen: Es muss bestätigt werden, dass das Zertifikat des Unterzeichners von einer vertrauenswürdigen Zwischenzertifizierungsstelle ausgestellt wurde, die wiederum von einer vertrauenswürdigen Stammzertifizierungsstelle ausgestellt wurde. Ist ein Glied in dieser Kette unterbrochen, fehlt es oder wurde es widerrufen, schlägt die Überprüfung fehl, selbst wenn der Hashwert übereinstimmt.
Häufig gestellte Fragen
Ist SHA-1 komplett gebrochen oder nur geschwächt?
Aus Sicherheitsgründen praktisch unbrauchbar. Forscher demonstrierten 2017 einen funktionierenden Kollisionsangriff (zwei verschiedene Dateien erzeugen denselben SHA-1-Hash), weshalb gängige Browser, Zertifizierungsstellen und Codesignaturstandards SHA-1 zugunsten von SHA-256 als veraltet eingestuft haben.
Bestätigt die Überprüfung einer Codesignatur, dass die Software sicher ist?
Nein. Es bestätigt lediglich, dass die Software vom Zertifikatsinhaber stammt und seit der Signierung nicht verändert wurde. Es sagt jedoch nichts darüber aus, ob die Software frei von Fehlern oder Schadcode ist, den der Unterzeichner selbst eingebaut hat. Aus diesem Grund wird die Signierung in Kombination mit Verfahren wie Schwachstellenscans eingesetzt und nicht als alleinige Sicherheitsgarantie betrachtet.
Fazit
Zusammenfassend lässt sich sagen, dass der Schutz von Daten durch Hashing von größter Bedeutung ist, insbesondere im Bereich digitaler Signaturen. Hashing gewährleistet die Integrität und den Schutz sensibler Informationen und ist somit ein grundlegender Bestandteil der Cybersicherheit.
Angesichts der sich ständig weiterentwickelnden Landschaft von Cyberbedrohungen ist es entscheidend, potenzielle Schwachstellen in Hash-Algorithmen zu erkennen, wie die Abschaffung von SHA-1 zeigt. Wir bei Encryption Consulting LLC sind uns der Bedeutung eines robusten Datenschutzes bewusst.
Unsere Codesignatur- Plattform CodeSign Secure unterstreicht unser Engagement für höchste Sicherheitsstandards. Durch die Kombination von clientseitigem Hashing, Virenscans und Signaturerstellung mit Hardware-Sicherheitsmodulen bietet CodeSign Secure eine umfassende Lösung, die die Daten unserer Kunden sowohl während der Übertragung als auch im Ruhezustand schützt. Wir legen größten Wert auf Sicherheit und bieten daher eine schnelle und unkomplizierte Möglichkeit, verschiedene Dateitypen zu signieren. Für weitere Informationen zu unseren Produkten oder zur Vereinbarung einer Demo von CodeSign Secure besuchen Sie unsere Website www.encryptionconsulting.com.
