-
Die vorliegende Erfindung betrifft ein Verfahren zur Fernbestätigung der Integrität eines Computerprogramms in einer zu prüfenden Recheneinheit sowie ein System zu dessen Durchführung und eine Bestätigungseinheit und eine Nachweiseinheit.
-
Hintergrund der Erfindung
-
In Maschinen und Fahrzeugen werden programmierbare Steuergeräte eingesetzt, um diese oder auch Komponenten davon, zu steuern. Beispielsweise kann ein Kraftfahrzeug Steuergeräte für die Motorsteuerung, für das Bremssystem usw. enthalten. Die Steuergeräte umfassen üblicherweise mindestens einen Prozessor mit einem oder mehreren Prozessor-Kernen. In diesen Prozessorkernen wird eine Steuerungssoftware ausgeführt, d.h. es werden in einem Speicher gespeicherte Computerprogramme ausgeführt, um die Steuerungsfunktion des Steuergeräts zu erzielen. Aus Sicherheitsgründen kann vorgesehen sein, dass die Integrität von Computerprogrammen durch das Steuergerät unter Verwendung etwa eines Hardware-Sicherheits-Modul geprüft wird, um zu verhindern, dass ein manipuliertes Computerprogramm, d.h. dessen gespeicherter Programmcode, ausgeführt wird. Dazu können insbesondere kryptographische Funktionen verwendet werden.
-
Offenbarung der Erfindung
-
Erfindungsgemäß werden ein Verfahren zur Fernbestätigung der Integrität eines Computerprogramms in einer zu prüfenden Recheneinheit sowie ein System zu dessen Durchführung und eine Bestätigungseinheit und eine Nachweiseinheit mit den Merkmalen der unabhängigen Patentansprüche vorgeschlagen. Vorteilhafte Ausgestaltungen sind Gegenstand der Unteransprüche sowie der nachfolgenden Beschreibung.
-
Im Rahmen der Erfindung wird eine Bestätigungseinheit verwendet. Dabei wählt die Bestätigungseinheit ein Paar aus einer Liste von Paaren, in der jedes Paar eine Zufalls-Zeichenkette und einen Referenz-Prüfwert umfasst, aus und übermittelt die Zufalls-Zeichenkette des ausgewählten Paares an eine Nachweiseinheit. Die Bestätigungseinheit empfängt und vergleicht einen Vergleichs-Prüfwert, der basierend auf der (von der Berechnungseinheit) übermittelten Zufalls-Zeichenkette und dem gespeicherten Programmcode mittels der Prüfwert-Funktion berechnet wurde, mit dem Referenz-Prüfwert des ausgewählten Paares und bestätigt die Integrität des gespeicherten Programmcodes, wenn diese gleich sind. Zur Berechnung der Referenz-Prüfwerte und der Vergleichs-Prüfwerte wird dieselbe Prüffunktion verwendet. Eine Speicherung von Referenz-Prüfwerten oder geheimen Schlüsseln in der zu prüfenden Recheneinheit ist nicht notwendig. Dies ist vorteilhaft, da so eine Integritätsprüfung von Computerprogrammen für zu prüfende Recheneinheiten, die über keinen Vertrauensanker, wie z.B. ein Hardware-Sicherheits-Modul (HSM) oder Trusted Platform Modul (TPM), verfügen oder in denen dieser durch Hardware- oder Software-Fehler kompromittiert ist, durchgeführt und bestätigt werden kann.
-
Wenn der Vergleichs-Prüfwert nicht gleich dem Referenz-Prüfwert ist, wird die Integrität des gespeicherten Programmcodes nicht bestätigt. Ebenso wird vorzugsweise die Integrität des gespeicherten Programmcodes nicht bestätigt, wenn kein Vergleichs-Prüfwert empfangen wird. D.h. vorzugsweise umfasst das Verfahren, insbesondere als Teil des Schritts des Empfangens des Vergleichs-Prüfwerts, ein Warten nach dem Übermitteln, bis der Vergleichs-Prüfwert empfangen wird oder ein vorbestimmter maximaler Zeitraum verstrichen ist (d.h. Warten, bis eines von beiden erfüllt ist), wobei die Integrität des gespeicherten Programmcodes nicht bestätigt wird, wenn der Vergleichs-Prüfwert nicht innerhalb des vorbestimmten maximalen Zeitraums empfangen wird.
-
Das Computerprogramm, dessen Integrität bestätigt werden soll, liegt dabei in Form eines Programmcodes bzw. von Programmdaten vor, wobei der Begriff „Programmcode“ sowohl ausführbare Computeranweisungen als auch bei der Ausführung benötigte Daten einschließen soll. Der „Referenz-Programmcode“ ist dabei der korrekte, nicht manipulierte Programmcode. Der „gespeicherte Programmcode“ ist der in der Recheneinheit (als „zu prüfenden Recheneinheit“ bezeichnet) gespeicherte Programmcode, der möglicherweise manipuliert bzw. gegenüber dem Referenz-Programmcode verändert ist.
-
Die Bestätigungseinheit und die weiter unten genannte Nachweiseinheit können als Hardware (Prozessorkerne, Speicher, ...) bzw. Hardwaremodul in einer Recheneinheit und/oder als in einer Recheneinheit ausgeführtes Softwaremodul (Computerprogrammmodul) implementiert sein. Die Bestätigungseinheit ist als von der zu prüfenden Recheneinheit unabhängige Recheneinheit ausgeführt. Die Bestätigungseinheit kann im selben Fahrzeug bzw. in derselben Maschine wie die zu prüfende Recheneinheit umfasst sein. Die Bestätigungseinheit kann insbesondere auch in einem von der Nachweiseinheit unterschiedlichen Rechnersystem (z.B. Server, Cloud-Server, o.Ä.) implementiert sein. Die Nachweiseinheit ist bevorzugt innerhalb der zu prüfenden Recheneinheit implementiert. Die Nachweiseinheit kann aber auch unabhängig von der zu prüfenden Recheneinheit sein, z.B. in einem Fahrzeug in einem anderen Steuergerät implementiert sein, wenn die zu prüfende Recheneinheit ein Steuergerät des Fahrzeugs ist.
-
Mittels der Prüffunktion wird ein Prüfwert basierend auf einer Zeichenkette und einem Programmcode berechnet. Die Prüffunktion kann allgemein als Abbildung angesehen werden, die die beiden Eingabewerte (Zeichenkette, Programmcode) auf einen Ausgabewert (Prüfwert) abbildet; Prüfwert = f(Zeichenkette, Programmcode), wobei f die Prüffunktion ist. Alternativ bzw. im Besonderen kann die Prüffunktion als Abbildung angesehen werden, die einen Eingabewert, der aus der Zeichenkette und dem Programmcode gebildet wird, beispielsweise durch Aneinanderfügen, auf einen Ausgabewert (Prüfwert) abbildet; z.B. Prüfwert = f(Zeichenkette 11 Programmcode). Der Begriff Prüffunktion soll in einem allgemeinen Sinn verstanden werden, so dass beide Möglichkeiten umfasst sind, wobei selbstverständlich auch weitere Möglichkeiten denkbar sind und mit Begriff Prüffunktion umfasst sein sollen. Da die Längen der Zeichenkette und des Programmcodes im Allgemeinen unbestimmt sind, sollte in jedem Fall die Prüffunktion Eingabewerte beliebiger Länder auswerten können (beispielsweise durch Blockauswertung bzw. -berechnung).
-
Als Prüffunktion zur Berechnung der Prüfwerte kann eine Hashfunktion, insbesondere eine kryptographische Hashfunktion, verwendet werden, die Prüfwerte können dann als Hashwerte angesehen werden. Weitergehend kann die Prüffunktion das ein oder mehrmalige Anwenden wenigstens einer Hashfunktion, insbesondere wenigstens einer kryptographischen Hashfunktion, umfassen.
-
Eine verwendete kryptographische Hashfunktion sollte eine oder mehrere der folgenden Eigenschaften aufweisen:
- - jeder berechnete Hashwert sollte eine bestimmte, fixe Länge aufweisen, unabhängig von der Länge der eingegebenen Zeichenfolge;
- - Kollisionsresistenz: es ist also nicht praktikabel zwei verschiedene Eingabewerte zu finden, die den gleichen Hashwert ergeben;
- - nicht praktikabel umkehrbar;
- - Lawineneffekt: die Hashwerte zweier Eingaben, die sich nur gering, z.B. um ein Bit unterscheiden, sollten sehr unterschiedlich sein.
-
„Nicht praktikabel“ soll heißen, dass ein sehr hoher zeitlicher und/oder rechentechnischer Aufwand nötig wäre. Geeignete kryptographische Hashfunktionen sind z.B. Hashfunktionen gemäß SHA-1 oder SHA-2, d.h. SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224 und SHA-512/256, die etwa aus dem Dokument FIPS PUB 180-4 (http://dx.doi.org/10.6028/NIST.FIPS.180-4) des NIST (National Institute of Standards and Technology) oder auch aus RFC 6234 bekannt sind. Die Länge der Hashwerte ist bei SHA-1 160 Bit, bei Hashfunktionen der SHA-2-Familie 224, 256, 384 bzw. 512 Bit. Ebenso ist auch die Verwendung von MD5 (Message-Digest Algorithm 5, RFC1321), Länge 128 Bit, oder SHA-3 (FIPS PUB 202, http://dx.doi.org/10.6028/NIST.FIPS.202), Länge je nach Version 224, 256, 384, 512 Bit oder beliebig, möglich.
-
Ein Beispiel für eine Prüffunktion, die das Anwenden einer kryptographischen Hashfunktion umfasst, ist HMAC (hash-based message authentication code; Hash-basierter Nachrichtenauthentifizierungscode) entsprechend RFC2104 bzw. FIPS PUB 198 (http://csrc.nist.gov/publications/fips/fips198-1/FIPS-198-1_final.pdf). HMAC umfasst das mehrmalige Anwenden einer Hashfunktion, insbesondere eine der vorstehend genannten kryptographischen Hashfunktionen. Allgemeiner kann auch ein anderer Nachrichtenauthentifizierungscode (MAC) verwendet werden, in dessen Abbildung ein Schlüssel (Zufalls-Zeichenkette) und eine Nachricht (Programmcode) eingehen. Die HMAC-Abbildung bzw. die MAC-Abbildung eines Schlüssels (Zufalls-Zeichenkette) und einer Nachricht (Programmcode) auf einen Authentifizierungscode (Prüfwert) stellen entsprechend Prüffunktionen dar.
-
Jede Zufalls-Zeichenketten (vereinfacht auch als Zeichenkette bezeichnet) ist eine beliebige Folge bzw. Kette von Zeichen (etwa Bits oder auch entsprechende Dezimal-, Hexadezimaldarstellungen oder Ähnliches). Die Zufalls-Zeichenketten der Liste sollen unabhängig voneinander sein, beispielsweise sollte es sich nicht um aufeinanderfolgende Nummern handeln. Aus der Kenntnis einer Zufalls-Zeichenkette der Liste bzw. deren Paaren kann also nicht darauf geschlossen werden, welche weiteren Zufalls-Zeichenketten in der Liste eingeschlossen sind. Dies soll durch den Begriff „Zufall“ angedeutet werden. Typischerweise sind die Zeichen jeder Zeichenkette zufällig gewählt.
-
Die Liste von Paaren sollte nur der Bestätigungseinheit bekannt bzw. durch diese gespeichert sein. Dabei sollte sichergestellt sein, dass die Liste außerhalb der Bestätigungseinheit nicht bekannt ist, so dass insbesondere Angreifer, die den gespeicherten Computercode manipulieren, die Liste nicht kennen. Die Nachweiseinheit und die zu prüfende Recheneinheit kennen die Liste ebenso nicht.
-
Bevorzugt wird, durch die Bestätigungseinheit, das ausgewählte Paar als nicht mehr auswählbar gekennzeichnet oder von der Liste gestrichen, und/oder es wird bei mehrmaliger Durchführung (der Integritätsprüfung beginnend mit dem Auswählen bis einschließlich des Vergleichs) jedes Paar maximal einmal durch die Bestätigungseinheit ausgewählt. Ein Streichen des Paares von der Liste sollte offensichtlich erst erfolgen, nachdem der Referenz-Prüfwert ausgewertet wurde, z.B. bis nach dem Vergleich zwischengespeichert wurde, oder erst nach dem Vergleich. Durch diese Ausgestaltung können sogenannte Replay-Angriffe verhindert werden, da bei jeder Fernbestätigung eine andere Zufalls-Zeichenkette verwendet wird und somit, vorausgesetzt es wird eine geeignete Prüfwert-Funktion (Hashfunktion mit Lawineneffekt) zur Berechnung des Prüfwerts verwendet, jedes Mal ein anderer Prüfwert auftritt. Weiter bevorzugt erfolgt die Kennzeichnung des ausgewählten Paares als nicht mehr auswählbar bzw. das Streichen von der Liste unmittelbar nach Übermitteln der Zufalls-Zeichenkette. Im Falle des Streichens wird der Referenz-Prüfwerte zwischengespeichert, bis der Vergleichs-Prüfwert empfangen wurde, wobei eine maximale Zeitspanne vorgegeben ist, innerhalb derer auf den Empfang gewartet wird. Ebenso weiter bevorzugt wird bei mehrmaliger Durchführung jedes Paar, dessen Zufalls-Zeichenkette einmal übermittelt wurde, maximal einmal durch die Bestätigungseinheit ausgewählt, d.h. eine erneute Auswahl eines Paares wird unterbunden, sobald die im Paar umfasste Zufalls-Zeichenkette einmalig übermittelt wurde.
-
Bevorzugt wird die Liste von Paaren durch eine Programmiereinheit, die das Referenz-Computerprogramm in der Recheneinheit speichert bzw. an die Recheneinheit überträgt und dessen Speicherung veranlasst, erzeugt und wird an die Bestätigungseinheit übermittelt. Da die Programmiereinheit im Besitz des Referenz-Programmcodes ist, kann diese zweckmäßigerweise bei Speicherung des Programmcodes in der zu prüfenden Recheneinheit die Liste von Paaren manipulationssicher erzeugen.
-
Bevorzugt umfasst das Verfahren ein Übermitteln, durch die Bestätigungseinheit, eines Ergebnisses, ob oder ob nicht die Integrität bestätigt wird, an eine Datenkommunikationseinheit, die zur Datenkommunikation mit der zu prüfenden Recheneinheit eingerichtet ist (d.h. Senden einer Nachricht mit einem Inhalt, der anzeigt, ob oder ob nicht die Integrität bestätigt wird bzw. wurde), und ein Senden, durch die Datenkommunikationseinheit, von Daten an die zu prüfende Recheneinheit in Abhängigkeit von dem Ergebnis und/oder ein Verwenden, durch die Datenkommunikationseinheit, von der zu prüfenden Recheneinheit empfangener Daten in Abhängigkeit von dem Ergebnis. Die Datenkommunikationseinheit kann z.B. bei angenommener Manipulation (im Sinne der Fernbestätigung) Daten von der zu prüfenden Recheneinheit aus Sicherheitsgründen verwerfen, um Fehlfunktionen zu vermeiden. Weitergehend kann vorgesehen sein, dass, wenn die Datenkommunikationseinheit kein Ergebnis von der Bestätigungseinheit empfängt (z.B. innerhalb einer maximalen Zeitspanne), die Datenkommunikationseinheit als Ergebnis (in Abhängigkeit von welchem Daten gesendet bzw. verwendet werden) bestimmt bzw. annimmt, dass die Integrität nicht bestätigt wird.
-
Bevorzugt umfasst das Verfahren ein Empfangen, durch die Nachweiseinheit, der Zufalls-Zeichenkette, die von der Bestätigungseinheit übermittelt bzw. gesendet wurde, ein Berechnen, durch die Nachweiseinheit, eines Vergleichs-Prüfwerts basierend auf der empfangenen Zufalls-Zeichenkette und dem gespeicherten Programmcode mittels der Prüfwert-Funktion und ein Übermitteln bzw. Senden, durch die Nachweiseinheit, des Vergleichs-Prüfwerts an die Bestätigungseinheit. Diese Ausgestaltung ist zweckmäßig, um den Vergleichs-Prüfwert zu bestimmen.
-
Bevorzugt wird, wenn die Integrität nicht bestätigt wird, durch die Bestätigungseinheit an die Nachweiseinheit übermittelt, dass die Integrität nicht bestätigt wird, und durch die Nachweiseinheit die Ausführung des gespeicherten Programmcodes unterbunden bzw. die Unterbindung der Ausführung des gespeicherten Programmcodes veranlasst und/oder durch die Nachweiseinheit die Verwendung bestimmter Funktionalitäten der Recheneinheit unterbunden bzw. die Unterbindung die Verwendung bestimmter Funktionalitäten der Recheneinheit veranlasst, und/oder, durch die Nachweiseinheit und/oder die Bestätigungseinheit, eine Fehlermeldung in einem Protokoll gespeichert und/oder an eine entfernte Überwachungseinheit gesendet. Soweit die Nachweiseinheit die Ausführung des gespeicherten Programmcodes unterbindet bzw. eine Unterbindung der Ausführung des gespeicherten Programmcodes veranlasst, sollten die Nachweiseinheit und/oder die zu prüfende Recheneinheit über eine entsprechende Funktionalität verfügen. Etwa durch ein Sicherheitsmodul (z.B. HSM) oder ähnliches implementiert. Wenn beispielsweise die Nachweiseinheit nicht Teil der zu prüfenden Recheneinheit ist, kann die zu prüfende Recheneinheit ein solches Sicherheitsmodul umfassen, und die Nachweiseinheit kann an dieses eine Anweisung senden, die Ausführung des gespeicherten Programmcodes zu unterbinden, d.h. die Nachweiseinheit veranlasst die Unterbindung. Wen beispielsweise die Nachweiseinheit Teil der zu prüfenden Recheneinheit ist, insbesondere wenn die Nachweiseinheit ein solches Sicherheitsmodul umfass, kann die Nachweiseinheit die Ausführung des gespeicherten Programmcodes direkt unterbinden. Die Unterbindung die Verwendung bestimmter Funktionalitäten der Recheneinheit bezieht sich darauf, dass nur ein eingeschränkter Funktionsumfang der Recheneinheit verwendet wird, wenn die Integrität nicht bestätigt wird.
-
Bevorzugt ist die Nachweiseinheit dazu eingerichtet, einen Speicherbereich, in dem der gespeicherte Programmcode in der zu prüfenden Recheneinheit gespeichert ist, auszulesen; und/oder die zu prüfende Recheneinheit dazu eingerichtet, den Inhalt des Speicherbereichs, in dem der gespeicherte Programmcode in der zu prüfenden Recheneinheit gespeichert ist, in Reaktion auf eine entsprechende Aufforderung von der Nachweiseinheit an die Nachweiseinheit zu übermitteln. Dies ist insbesondere zweckmäßig, wenn die Nachweiseinheit nicht in der zu prüfenden Recheneinheit implementiert ist.
-
Bevorzugt umfasst das Verfahren ein Ergänzen der Liste um wenigstens ein neues Paar, wobei durch die Bestätigungseinheit eine Anforderung, das wenigstens eine neue Paar für die Liste zu erzeugen, an die Nachweiseinheit übermittelt wird, durch die Nachweiseinheit wenigstens eine neue Referenz-Prüfsumme basierend auf wenigstens einer neuen Zufalls-Zeichenkette und dem gespeicherten Programmcode mittels der Prüfwert-Funktion berechnet wird, durch die Nachweiseinheit das wenigstens eine neue Paar, das die wenigstens eine neue Zufalls-Zeichenkette und die wenigstens eine neue Referenz-Prüfsumme umfasst, an die Bestätigungseinheit übermittelt wird, und durch die Bestätigungseinheit die Liste durch das übermittelte wenigstens eine neue Paar ergänzt wird, wobei die wenigstens eine neue Zufalls-Zeichenkette durch die Bestätigungseinheit erzeugt und mit der Anforderung an die Nachweiseinheit übermittelt wird oder durch die Nachweiseinheit erzeugt wird, wobei insbesondere die wenigstens eine neue Zufalls-Zeichenkette als wenigstens eine Kette zufällig gewählter Zeichen erzeugt wird. Der Begriff „Ergänzen“ schließt auch ein Ergänzen einer leeren Liste um Einträge bzw. Paare ein. Ein leere Liste kann z.B. dann gegeben sein, wenn nur eine einmalige Verwendung jedes Paares zugelassen ist und alle Paare „aufgebraucht“ sind, d.h. verwendet wurden. Auch kann dies unmittelbar nach Programmierung, d.h. Schreiben des Programmcodes in den Speicher der zu prüfenden Recheneinheit der Fall sein, etwa bei der Fertigung des Fahrzeugs bzw. der Maschine, in der die zu prüfende Recheneinheit verwendet wird, oder bei Einbau der zu prüfenden Recheneinheit. Bei der Programmierung kann davon ausgegangen werden, dass der gespeicherte Programmcode nicht manipuliert ist, da dies in einer abgesicherten Umgebung geschieht.
-
Weiter bevorzugt wird das Ergänzen der Liste durchgeführt, wenn (bzw. nachdem) die Integrität bestätigt wird, und/oder nicht durchgeführt wird, wenn die Integrität nicht bestätigt wird. Wenn nur eine einmalige Verwendung jedes Paares zugelassen ist, kann der Fall auftreten, dass nur noch ein Paar oder einige wenige Paare in der List noch nicht verwendet wurden. Entsprechend kann, bevor alle Paare verwendet wurden, ein Ergänzen vorgesehen sein, wobei dadurch, dass dies nur dann erfolgt, wenn die Integrität bestätigt wurde, sichergestellt wird, dass der gespeicherte Programmcode, basierend auf dem die neuen Referenz-Prüfwerte berechnet werden, nicht manipuliert ist. Die Anforderung, neue Paare zu erzeugen, sollte innerhalb eines möglichst kurzen Zeitraums nach der Bestätigung der Integrität erfolgen, so dass eine Manipulation innerhalb dieses kurzen Zeitraums unwahrscheinlich oder sogar ausgeschlossen ist, etwa, wenn der Zeitraum kürzer als eine zum Schreiben neuen Programmcodes notwendige Zeitdauer ist. Falls die zu prüfende Recheneinheit über ein Sicherheitsmodul o.Ä. verfügt, das entsprechende Funktionalitäten aufweist, kann vorgesehen sein, dass die zu prüfende Recheneinheit in einen abgesicherten Zustand (Speicherschutz) versetzt wird, in dem Schreiben bzw. Neuprogrammieren von Programmcode in der zu prüfenden Recheneinheit unterbunden wird, wenn bzw. sobald die Integrität bestätigt wird, oder mit der Anforderung, und erst wieder erlaubt wird, nachdem die wenigstens eine neue Referenz-Prüfsumme berechnet wurde.
-
Ein erfindungsgemäßes System ist dazu eingerichtet, das erfindungsgemäße Verfahren durchzuführen. Eine erfindungsgemäße Bestätigungseinheit oder Nachweiseinheit ist dazu eingerichtet (insbesondere programmtechnisch), die Schritte des erfindungsgemäßen Verfahrens, die dazu vorgesehen sind, von der Bestätigungseinheit bzw. Nachweiseinheit durchgeführt zu werden, durchzuführen.
-
Auch die Implementierung eines erfindungsgemäßen Verfahrens in Form von Computerprogrammen bzw. Computerprogrammmodulen oder Computerprogrammprodukts mit Programmcode zur Durchführung aller Verfahrensschritte ist vorteilhaft, da dies besonders geringe Kosten verursacht, insbesondere wenn die ausführende Recheneinheit noch für weitere Aufgaben genutzt wird. Schließlich ist ein maschinenlesbares Speichermedium vorgesehen mit einem darauf gespeicherten Computerprogramm bzw. Computerprogrammmodul wie oben beschrieben. Geeignete Speichermedien bzw. Datenträger zur Bereitstellung des Computerprogramms sind insbesondere magnetische, optische und elektrische Speicher, wie z.B. Festplatten, Flash-Speicher, EEPROMs, DVDs u.a.m. Auch ein Download eines Programms über Computernetze (Internet, Intranet usw.) ist möglich. Ein solcher Download kann dabei drahtgebunden bzw. kabelgebunden oder drahtlos (z.B. über ein WLAN-Netz, eine 3G-, 4G-, 5G- oder 6G-Verbindung, etc.) erfolgen.
-
Weitere Vorteile und Ausgestaltungen der Erfindung ergeben sich aus der Beschreibung und der beiliegenden Zeichnung.
-
Die Erfindung ist anhand von Ausführungsbeispielen in der Zeichnung schematisch dargestellt und wird im Folgenden unter Bezugnahme auf die Zeichnung beschrieben.
-
Kurze Beschreibung der Zeichnungen
-
- 1 zeigt ein Ablaufdiagramm gemäß einer bevorzugten Ausführungsform der Erfindung.
- 2A, 2B zeigen schematisch Systeme mit einer Bestätigungseinheit und einer Nachweiseinheit, die zur Integritätsprüfung eines in einer zu prüfenden Recheneinheit gespeicherten Computerprogramms eingesetzt werden.
-
Ausführungsform(en) der Erfindung
-
1 zeigt ein Ablaufdiagramm gemäß einer bevorzugten Ausführungsform der Erfindung.
-
In einem optionalen Schritt 100 wird, etwa durch eine Programmiereinheit, beim Programmieren einer Recheneinheit (im Weiteren zu prüfende Recheneinheit) mit dem Computerprogramm bzw. Speichern/Schreiben des Referenz-Programmcodes des Computerprogramms eine Liste mit Paaren, die jeweils eine Zeichenkette und einen Referenz-Prüfwert umfassen (oder aus diesen bestehen), erzeugt und durch eine Bestätigungseinheit gespeichert (d.h. in einem Speicher der Bestätigungseinheit gespeichert und/oder in einem Speicher, auf den die Bestätigungseinheit Zugriff hat gespeichert). Der Referenz-Prüfwert jedes Paares wird dabei durch die Programmiereinheit, die über den Referenz-Programmcode verfügt, basierend auf dem Referenz-Programmcode und der Zufallszeichenkette des jeweiligen Paares mittels einer Prüffunktion (insbesondere Hashfunktion) berechnet. Die Zufallszeichenketten werden zufällig gewählt. Die Anzahl der Paare in der Liste kann z.B. abhängig von der geplanten Einsatzdauer der zu prüfenden Recheneinheit und/oder der Integritäts-Prüfungsfrequenz gewählt werden. Die Liste kann z.B. einige bis einige hundert oder einige tausend Paare umfassen. Die weiteren Schritte beziehen sich auf die Integritätsbestätigung während des regulären Einsatzes des Computerprogramms in der zu prüfenden Recheneinheit.
-
In Schritt 110 wird durch die Bestätigungseinheit eines der Paare der Liste von Paaren ausgewählt, z.B. zufällig oder entsprechend einer Reihenfolge der Listeneinträge. Vorzugsweise wird bei mehrmaliger Durchführung jedes Paar maximal einmal ausgewählt. Die im ausgewählten Paar enthaltene Zeichenkette wird in einem Schritt 120 mittels einer Datenverbindung (z.B. Mobilfunkverbindung) an eine Nachweiseinheit übermittelt bzw. gesendet, die die Zeichenkette empfängt.
-
Im bevorzugten Schritt 130 berechnet die Nachweiseinheit mittels der Prüffunktion basierend auf der übermittelten bzw. empfangenen Zeichenkette und dem in der zu prüfenden Recheneinheit gespeicherten Programmcode einen Vergleichs-Prüfwert. Die Nachweiseinheit sollte dazu direkt oder indirekt Zugriff auf den Speicherbereich der zu prüfenden Recheneinheit haben, in dem der Programmcode gespeichert ist. Ein direkter Zugriff kann gegeben sein, wenn die Nachweiseinheit in der zu prüfenden Recheneinheit umfasst ist oder wenn ein Direkt-Speicherzugriff (DMA: Direct Memory Access) gegeben ist. Ein indirekter Zugriff kann z.B. dadurch gegeben sein, dass die zu prüfende Recheneinheit dazu eingerichtet ist, in Reaktion auf eine entsprechende Aufforderung (Speicherbereichsabfrage), den Inhalt dieses Speicherbereichs an die Nachweiseinheit zu übermitteln.
-
Der berechnete Vergleichs-Prüfwert wird im bevorzugten Schritt 140 von der Nachweiseinheit an die Bestätigungseinheit übermittelt bzw. gesendet, die diesen empfängt.
-
In Schritt 150 führt die Bestätigungseinheit einen Vergleich zwischen dem übermittelten bzw. empfangenen Vergleichs-Prüfwert und dem Referenz-Prüfwert des in Schritt 110 ausgewählten Paares durch. Wenn der Vergleichs-Prüfwert gleich dem Referenz-Prüfwert ist, wird davon ausgegangen, dass der gespeicherte Programmcode unverändert bzw. nicht manipuliert ist, es wird also die Integrität des gespeicherten Programmcodes bestätigt. Andernfalls, d.h. wenn der Vergleichs-Prüfwert nicht gleich dem Referenz-Prüfwert ist, wird die Integrität des gespeicherten Programmcodes nicht bestätigt. Diese Bestätigung bzw. Nicht-Bestätigung erfolgt im Sinne der Prüffunktion, d.h. die Prüffunktion sollte die Eigenschaft aufweisen, dass unterschiedliche Eingaben zu unterschiedlichen Ausgaben führen, so dass, wenn der gespeicherte Programmcode gegenüber dem Referenz-Programmcode geändert wurde, die Prüfwerte nicht übereinstimmen. Da zusätzlich die Zeichenkette eingeht, die für verschiedene Integritätsprüfungen verschieden ist, wird sichergestellt, insbesondere bei maximal einmaliger Verwendung jedes Paares der Liste, dass erkannt wird, wenn bereits ermittelte (vor Manipulation, korrekte) Vergleichs-Prüfwerte von einem Angreifer aufgezeichnet und später (nach Manipulation) wiedergegeben werden (sogenannter Replay-Angriff). Wenn innerhalb eines maximalen Zeitraums nach Übermitteln der Zufalls-Zeichenkette kein Vergleichs-Prüfwert empfangen wird, wird die Integrität ebenfalls nicht bestätigt, d.h. es wird von einer Manipulation ausgegangen.
-
Wenn die Integrität nicht bestätigt wird, kann in einem bevorzugten Schritt 160 eine Fehlermeldung o.Ä. erzeugt werden, die z.B. protokolliert oder an eine Überwachungseinheit gesendet wird. Insbesondere kann in diesem Fall auch ein Unterbinden der Ausführung des gespeicherten Programmcodes vorgesehen sein (etwa wenn in der zu prüfenden Recheneinheit ein Sicherheitsmodul mit geeigneter Funktionalität vorgesehen ist).
-
Wenn andererseits die Integrität bestätigt wird, wird in einem bevorzugten Schritt 170 die Ausführung des gespeicherten Programmcodes zugelassen. Optional kann nach Schritt 170 vorgesehen sein, dass das Verfahren, d.h. die Integritätsbestätigung erneut durchgeführt wird, d.h. es kann zu Schritt 110 zurückgesprungen werden (Pfeil 175). Dies kann z.B. an regelmäßig oder zufällig gewählten Zeitpunkten erfolgen.
-
In beiden Fällen (Schritte 160, 170) könnte zusätzlich oder alternativ auch vorgesehen sein, dass eine Nachricht mit dem Ergebnis der Integritätsprüfung an eine andere Recheneinheit (etwa die Datenkommunikationseinheit in 2A oder 2B) übermittelt bzw. gesendet wird.
-
In einem bevorzugten Schritt 180 kann ein Ergänzen der Liste um ein oder mehrere neue Paare (mit neuen Zeichenketten und neuen Referenz-Prüfwerten) erfolgen. Es wird hier davon ausgegangen, dass ein nicht manipulierter Zustand der zu prüfenden Recheneinheit vorliegt (etwa nachdem die Integrität des gespeicherten Programmcodes bestätigt wurde). Die neuen Zeichenketten werden beispielsweise von der Bestätigungseinheit oder der Nachweiseinheit zufällig gewählt. Die Nachweiseinheit berechnet mittels der Prüffunktion basierend auf den neuen Zeichenketten und dem gespeicherten Programmcode die neuen Referenz-Prüfwerte. Anschließend werden die neuen Paare an die Bestätigungseinheit übermittelt und von dieser die Liste um die neuen Paare ergänzt, d.h. es werden neue Listeneinträge erzeugt. In Schritt 110 bzw. statt der dort beschriebenen Vorgehensweise zur Erzeugung der Liste könnte dort ebenso die Vorgehensweise nach Schritt 180 verwendet werden.
-
2A zeigt schematisch ein System mit einer (entfernten) Bestätigungseinheit 2 und einer Nachweiseinheit 4, die zur Integritätsprüfung eines in einer zu prüfenden Recheneinheit 6 gespeicherten Computerprogramms eingesetzt werden. Die Bestätigungseinheit 2, die Nachweiseinheit 4 bzw. die zu prüfende Recheneinheit 6 sind dazu eingerichtet, diejenigen Schritte des Verfahrens zur Fernbestätigung der Integrität eines Computerprogramms, die sie jeweilig betreffen, auszuführen.
-
Bei der zu prüfenden Recheneinheit 6 handelt es sich beispielhaft um ein Steuergerät eines Fahrzeugs 8. Die Nachweiseinheit 4 ist ebenso in dem Fahrzeug 8 vorgesehen und kann mit der Nachweiseinheit 4 über eine drahtgebundene oder drahtlose Verbindung Daten austauschen (Pfeil 12). Z.B. könnten die Nachweiseinheit 4 und die zu prüfende Recheneinheit 6 über Ethernet oder einen CAN-Bus verbunden sein (CAN: Controller Area Network). Die Nachweiseinheit 4 kann eine eigens zur Implementierung des erfindungsgemäßen Verfahrens vorgesehene Nachweiseinheit sein oder in einer Recheneinheit, die auch für andere Funktionen verwendet wird, eingeschlossen sein. Die Nachweiseinheit 4 könnte insbesondere in der zu prüfenden Recheneinheit 6 eingeschlossen sein. Die dargestellte Ausführung, in der die Nachweiseinheit 4 von der zu prüfenden Recheneinheit 6 getrennt ist, ist zweckmäßig, wenn die zu prüfende Recheneinheit nicht über ausreichend Ressourcen (Rechenleistung, Speicher) verfügt, um selbst als Nachweiseinheit wirken zu können, insbesondere zu wenig Ressourcen, um den Vergleichs-Prüfwert mittels der Prüffunktion zu berechnen. Bei wie gezeigt getrennter Ausführung sollte die Nachweiseinheit 4 den Speicherbereich der zu prüfenden Recheneinheit 6, in dem der Programmcode gespeichert ist, auslesen können oder die zu prüfende Recheneinheit 6 diesen Speicherbereich (bzw. darin gespeicherte Daten) an die Nachweiseinheit 4 übermitteln können. Anders als dargestellt ist es prinzipiell auch möglich, dass sich die Nachweiseinheit 4 nicht in dem Fahrzeug 8, bzw. allgemeiner einer Maschine, die durch die zu prüfende Recheneinheit 6 gesteuert wird, befindet.
-
Die Bestätigungseinheit 2, beispielsweise ein Rechnersystem oder Server, befindet sich entfernt von der zu prüfenden Recheneinheit 6 und der Nachweiseinheit 4. Die Bestätigungseinheit 2 ist mit der Nachweiseinheit 4 zum Datenaustausch verbunden (Pfeil 14). Dazu wird vorzugsweise eine drahtlose Verbindung, z.B. eine Mobilfunk-Verbindung, verwendet.
-
Weiterhin ist eine Datenkommunikationseinheit 10 dargestellt, die dazu eingerichtet ist, Daten mit der zu prüfenden Recheneinheit 6 zu kommunizieren. Es kann sich um Daten, die von der Datenkommunikationseinheit 10 an die zu prüfende Recheneinheit 6 gesendet werden, um von dieser verwendet zu werden, und/oder um Daten, die von der zu prüfenden Recheneinheit 6 an die Datenkommunikationseinheit 10 gesendet werden, um von der Datenkommunikationseinheit verwendet zu werden, handeln. Die Datenkommunikationseinheit 10 kann die Datenkommunikation (Pfeil 18) mit der zu prüfenden Recheneinheit in Abhängigkeit von dem Ergebnis der Integritätsprüfung durchführen. Dazu wird das Ergebnis, ob oder ob nicht die Integrität bestätigt wurde, von der Bestätigungseinheit 10 an die Datenkommunikationseinheit 10 gesendet (Pfeil 16). Insbesondere kann vorgesehen sein, dass bestimmte Daten nur dann von der Datenkommunikationseinheit 10 an die zu prüfende Recheneinheit 6 gesendet werden, wenn die Integrität bestätigt wurde (ansonsten werden keine oder andere Daten gesendet). Ebenso kann vorgesehen sein, dass Daten, die von der zu prüfenden Recheneinheit 6 an die Datenkommunikationseinheit 10 gesendet werden, von der Datenkommunikationseinheit nicht oder nur in eingeschränktem Umfang (d.h. bestimmte Computerprogramme) verwendet werden.
-
Wenn, wie dargestellt, die zu prüfende Recheneinheit 6 in einem Fahrzeug 8 als Steuergerät verwendet wird, könnte es sich beispielsweise bei der Datenkommunikationseinheit 10 um ein Steuergerät eines anderen Fahrzeugs oder ein Rechensystem, das Daten, die ein bestimmtes geografisches Gebiet betreffen (sogenannter Edge-Server), verarbeitet, handeln. In diesem Fall könnten die Daten autonome Fahrfunktionen, die z.B. kooperativ ausgeführt werden, betreffen, wobei die Datenkommunikationseinheit 10 von der zu prüfenden Recheneinheit 6 übermittelte Daten nur dann verwendet, wenn die Integrität bestätigt wurde, da ansonsten eine Manipulation vorliegen könnte, die im Zusammenhang mit der autonomen Fahrfunktion zu Gefährdungen führen könnte.
-
In 2A befinden sich die Bestätigungseinheit 2 und die Datenkommunikationseinheit 10 außerhalb des Fahrzeugs 8. Diese können sich unabhängig voneinander auch im Fahrzeug 8 befinden. In 2B ist der Fall dargestellt, dass sich beide im Fahrzeug 8 befinden. Zusätzlich ist in 2B die Nachweiseinheit 4 beispielhaft in der (zu prüfenden) Recheneinheit 6 umfasst, z.B. als Sicherheitsmodul bzw. Hardwaresicherheitsmodul der Recheneinheit 6.
-
Die Bestätigungseinheit 2 kann als zentrale Bestätigungs-Recheneinheit im Fahrzeug 8 angesehen werden, die die Integrität von Programmcode in zu prüfenden Recheneinheiten bestätigt, z.B. wenn die zu prüfende Recheneinheit Hardwarevoraussetzungen nicht erfüllt, um Integritätsprüfungen selbst durchzuführen. Die Datenkommunikationseinheit 10 könnte z.B. ein Steuergerät des Fahrzeugs 8 sein, das Daten mit der zu prüfenden Recheneinheit 6, die ebenfalls ein Steuergerät des Fahrzeugs sein kann, austauscht. Die Verbindungen zum Datenaustausch zwischen der Bestätigungseinheit 2, der Nachweiseinheit 4 bzw. der zu prüfenden Recheneinheit 6 (die Nachweiseinheit 4 verwendet als Komponente der zu prüfenden Recheneinheit 6 insbesondere deren Kommunikationsschnittstellen) und der Datenkommunikationseinheit 10 sind in der Ausgestaltung der 2B vorzugsweise drahtgebunden ausgeführt, z.B. über Ethernet oder einen CAN-Bus.
-
Abgesehen von der Anordnung der Bestätigungseinheit 2, der Datenkommunikationseinheit 10 und der Nachweiseinheit 4 und deren Datenaustausch-Verbindung gelten weiterhin die Ausführungen zu 2A, so dass die Beschreibung hier nicht wiederholt, sondern auf die Beschreibung der 2A verwiesen wird.