-
Ausführungsbeispiele beziehen sich auf eine Vorrichtung und ein Verfahren zum Schreiben von Daten, die zu speichern sind, in einen vorbestimmten Speicherbereich, die beispielsweise angewendet werden können zum Erfassen von kryptographischen Angriffen.
-
In kryptographischen Systemen können sogenannte Seitenkanalangriffe durchgeführt werden, um kryptographische Informationen von dem Kryptosystem zu erhalten. Beispielsweise ist Fehleranalyse ein Typ von verschiedenen möglichen Seitenkanalangriffen auf dem Gebiet der Kryptographie. Das Prinzip hier ist es, Fehler in kryptographische Implementierungen einzubringen, um interne Zustände von einem Prozessor oder einem zugeordneten Speicher zu offenbaren.
-
Beispielsweise kann eine Smart Card, die einen eingebetteten Prozessor enthält, hoher Temperatur, ungestützter Versorgungsspannung oder ungestütztem Versorgungsstrom, übermäßig hoher Übertaktung, starken elektrischen oder magnetischen Feldern oder sogar Ionisierungsstrahlung ausgesetzt werden, um den Betrieb einer zentralen Verarbeitungseinheit (CPU; CPU = Central Processing Unit) oder zugeordneter Peripheriegeräte zu beeinflussen, wie z.B. eines Hauptspeichers (z.B. eines Direktzugriffsspeichers, RAM). Hier können aufgrund eines solchen Angriffs Schreiboperationen zum Zurückschreiben von Daten in den Hauptspeicher verfälscht werden, so dass z.B. Daten in die falschen Speicheradressen zurückgeschrieben werden.
-
Aus der
US 2006/0 015 754 A1 ist sind Verfahren und Vorrichtungen bekannt, um dynamisch einen Sicherheitsversionsparameter, der verwendet wird, um sichere Daten zu verschlüsseln, zu aktualisieren.
-
Aus der
US 2003/0 012 372 A1 sind Systeme und Verfahren zum gemeinsamen Durchführen von Verschlüsselung und Fehlerkorrekturcodierung bekannt.
-
Somit ist es wünschenswert, ein Konzept zum Erfassen von solchen falschen Speicherschreiboperationen zu schaffen, die möglicherweise durch böswillige Seitenkanalangriffe verursacht werden.
-
Es ist die Aufgabe der vorliegenden Erfindung, Vorrichtungen und Verfahren zum Schreiben von Daten, die zu speichern sind, in einen vorbestimmten Speicherbereich sowie ein Computerprogramm mit verbesserten Charakteristika zu schaffen.
-
Die Aufgabe wird gelöst durch die Merkmale der unabhängigen Ansprüche. Weiterbildungen finden sich in den abhängigen Ansprüchen.
-
Bevorzugte Ausführungsbeispiele der vorliegenden Erfindung werden nachfolgend Bezug nehmend auf beiliegende Zeichnungen näher erläutert. Es zeigen:
- 1 ein schematisches Flussdiagramm eines Verfahrens für ein destruktives Lesen von Daten eines vorbestimmten Speicherbereichs um eine Schreiboperation zu sichern, gemäß einem Ausführungsbeispiel der vorliegenden Erfindung;
- 2 ein Flussdiagramm zum Erfassen eines Angriffs basierend auf einem Ausführungsbeispiel der vorliegenden Erfindung; und
- 3 ein schematisches Blockdiagramm einer Vorrichtung zum Schreiben von Daten, die zu speichern sind, in einen vorbestimmten Speicherbereich, gemäß einem Ausführungsbeispiel der vorliegenden Erfindung.
-
Die folgende Beschreibung umfasst spezifische Einzelheiten, wie z.B. bestimmte Ausführungsbeispiele, Prozeduren, Techniken usw. zu Erklärungs- aber nicht Begrenzungszwecken. Es ist für einen Fachmann auf diesem Gebiet klar, dass neben diesen spezifischen Einzelheiten andere Ausführungsbeispiele verwendet werden können. Beispielsweise kann die Technologie auch bei jedem Speichersystemtyp verwendet werden, obwohl die folgende Beschreibung durchgeführt wird unter Verwendung von nicht begrenzenden beispielhaften Anwendungen bei cache-basierten Speichersystemen. In einigen Fällen werden detaillierte Beschreibungen gut bekannter Verfahren, Schnittstellen, Schaltungen und Vorrichtungen ausgelassen, um die Beschreibung nicht mit unnötigen Einzelheiten zu belasten. Darüber hinaus sind bei einigen der Figuren einzelne Blöcke gezeigt. Fachleute auf diesem Gebiet werden erkennen, dass die Funktionen dieser Blöcke unter Verwendung einzelner Hardwareschaltungen implementiert werden können, die Softwareprogramme und Daten verwenden, in Verbindung mit einem geeignet programmierten Digitalmikroprozessor oder einem Universalcomputer, der anwendungsspezifische integrierte Schaltungsanordnung (ASIC; ASIC = application specific integrated circuitry) und/oder einen oder mehrere Digitalsignalprozessoren (DSPs) verwendet.
-
Viele der heutigen Speichertechnologien haben das Problem, dass sporadisch einzelne Bitfehler auftreten können. Dies ist unvermeidbar. Das Problem ist jedoch allgemein begrenzt auf einzelne weit verstreute Bits. Mehrbitfehler in einer begrenzten Datenregion treten auf, sie treten jedoch so selten auf, dass sie im Allgemeinen kein Zuverlässigkeitsproblem darstellen. Die Zuverlässigkeit vieler Speicherprodukte leidet jedoch unter den einzelnen Fehlern oder Einbitfehlern. Aus diesem Grund sind Daten, die in den Speicherelementen gespeichert sind, mit Redundanzinformationen versehen, die es ermöglichen, dass diese Fehler erkannt und, falls möglich, korrigiert werden.
-
Dies kann erreicht werden durch Hinzufügen eines Fehlercodes pro Speicherblock, wobei ein Speicherblock in einzelne Speicherblöcke organisiert ist und jeder Speicherblock ein oder mehrere Datenwörter umfasst (z.B. ein Datenwort = 1 Byte). Eine Mehrzahl von Datenwörtern, die in einem Speicherblock gespeichert sind, soll in der Folge als ein Datenblock bezeichnet werden, d.h. ein Datenblock umfasst eine Mehrzahl von Datenwörtern.
-
Sowohl Fehlererfassungscodes (EDC; EDC = error-detecting codes) als auch Fehlerkorrekturcodes (ECC; ECC = error-correcting codes) können als Fehlercodes verwendet werden. Falls ein sehr kleiner Speicherblock als Grundeinheit gewählt wird, ist der Aufwand des Codes, d.h. insbesondere der Speicherplatz, der zum Speichern eines Fehlererfassungs- oder -korrekturwerts erforderlich ist, der einem Datenblock zugeordnet ist, im Vergleich zu der Größe des Speichers oder Datenblocks sehr groß. Falls jedoch eine größere Blockeinheit oder Größe des darunterliegenden Speicherblocks gewählt wird, wird der zusätzliche Aufwand für den Fehlercode oder den Fehlererfassungswert erträglich, ein Speicherzugriff wird jedoch sehr langsam und energieintensiv werden aufgrund der Erfordernis, den gesamten Block zu lesen, selbst wenn nur ein einzelnes Byte des Blocks gefordert ist. Zum Prüfen der Richtigkeit eines Datenworts, z.B. eines einzelnen Bytes eines Datenblocks, muss der gesamte Datenblock, der in einem Speicherblock gespeichert ist, von dem Speicherblock ausgelesen werden. Dies liegt daran, dass auf einen größeren Speicher typischerweise nur auf einer Speicherblockbasis zugegriffen werden kann. Falls beispielsweise ein Datenblock eine Nettodatenblockgröße von 16 Bytes oder 128 Bits aufweist, die Unterwörter oder Datenwörter umfassen, die jeweils vier Bytes umfassen, müssen die gesamten 16 Bytes gelesen werden, um auf ein einzelnes Byte zuzugreifen. Dies erzeugt einen Zeitverlust von zumindest drei oder vier Takten zum Lesen der drei Datenwörtern, die dieses einzelne Byte nicht umfassen.
-
Die Möglichkeit zum Kompensieren des Problems des langsamen Zugriffs im Falle eines größeren Speicherblocks ist das Installieren und Verwenden eines Cache-Speichers zwischen dem Hauptspeicher und dem Prozessor. Der Cache ist ein kleinerer schneller Speicher, der Kopien der Daten von den am häufigsten verwendeten Hauptspeicherstellen speichern kann. Wenn die CPU von einem Speicherbereich in dem Hauptspeicher lesen oder in denselben schreiben muss, prüft sie zunächst, ob eine Kopie dieses Speicherbereichs bereits in dem Cache ist. Falls dies der Fall ist, kann die CPU unmittelbar von dem Cache lesen oder in denselben schreiben, was sehr viel schneller ist als Lesen von oder Schreiben in den Hauptspeicher.
-
Im Fall eines Cache-Fehlzugriffs, d.h. in dem Fall, dass sich Daten eines gewünschten Speicherblocks nicht bereits in dem Cache-Speicher befinden, werden Daten des Speicherblocks, der einen Datenblock und einen zugeordneten Fehlererfassungs- oder -korrekturwert umfasst, von dem Hauptspeicher in den Cache gelesen. Fehlererfassung und/oder -korrektur kann basierend auf dem Datenblock und dem zugeordneten Fehlererfassungs/Korrekturwert durchgeführt werden.
-
Sobald dieselben in dem Cache sind, kann die CPU die gewünschten Daten verarbeiten oder manipulieren, bevor der resultierende Datenblock von dem Cache in den Hauptspeicher zurückgeschrieben wird. Während oder vor der Speicherschreiboperation wird ein neuer Fehlererfassungs- oder Fehlerkorrekturcode für den resultierenden Datenblock bestimmt. Danach werden die resultierenden Daten zurück in den Hauptspeicher geschrieben.
-
Aufgrund eines fehlerverursachenden Angriffs kann ein Problem entstehen, da die resultierenden Daten nicht zu der Adresse des ursprünglichen Speicherblocks zurückgeschrieben werden, sondern zu einer falschen Speicheradresse des Hauptspeichers. In diesem Fall ist der ursprüngliche Datenblock nach wie vor an der Adresse des ursprünglichen Speicherblocks verfügbar und somit kann der ursprüngliche Datenblock an der ursprünglichen Speicheradresse zu einem späteren Zeitpunkt gelesen werden, ohne zu realisieren, dass diese ursprünglichen Daten eigentlich bereits hätten modifiziert werden sollen. Dies liegt daran, dass der zugeordnete Fehlererfassungs/Korrekturwert (z.B. eine Prüfsumme) ebenfalls nach wie vor korrekt ist.
-
Ein Flussdiagramm eines Verfahrens 10 gemäß einem Ausführungsbeispiel der vorliegenden Erfindung, das das oben erwähnte Problem lösen kann, ist in 1 schematisch gezeigt.
-
Das Verfahren 10 dient zum Schreiben von Daten, die zu speichern sind, in einen vorbestimmen Speicherbereich, wobei die Daten, die zu speichern sind, einen Datenblock und einen zugeordneten Fehlererfassungs- oder -korrekturwert umfassen. Wie es oben erklärt wurde, kann der vorbestimmte Speicherbereich ein Speicherblock sein, der in einem Hauptspeicher angeordnet ist, wie z.B. ein Direktzugriffsspeicher (RAM).
-
In einem ersten Schritt 12 werden Daten, die in dem vorbestimmten Speicherbereich gespeichert sind, von dem vorbestimmten Speicherbereich gelesen, z.B. über einen Speicherbus. Die gespeicherten Daten umfassen dabei einen gespeicherten Datenblock und einen Fehlererfassungs- oder -korrekturwert, der dem gespeicherten Datenblock zugeordnet ist. Dieser Fehlererfassungs/Korrekturwert kann beispielsweise ein Paritätswert, eine Prüfsumme oder ein anderer Wert sein, der Redundanzinformationen von bekannten Fehlerkorrekturcodes umfasst, auf deren Basis eine begrenzte Menge an Fehlern in dem Datenblock erfasst und/oder korrigiert werden kann.
-
Nach dem Lesen 12 der gespeicherten Daten wird in einem Schritt 14 zumindest entweder der gespeicherte Datenblock oder der zugeordnete gespeicherte Fehlererfassungswert in dem vorbestimmten Speicherbereich manipuliert. Es wird nachfolgend beschrieben, wie der vorbestimmte Speicherbereich manipuliert werden kann. Anders ausgedrückt, der Inhalt des Speicherblocks, von dem der ursprüngliche Datenblock und der zugeordnete Fehlererfassungs/Korrekturwert in Schritt 12 gelesen wurden, wird geändert.
-
Ferner werden nach der Manipulation in Schritt 14 die Daten, die zu speichern sind, in Schritt 16 in den vorbestimmten Speicherbereich geschrieben. Daher ergeben sich die Daten, die zu speichern sind, von dem ursprünglichen Datenblock, der von dem vorbestimmten Speicherbereich gelesen wird, wobei zumindest einzelne Datenwörter des ursprünglichen Datenblocks in der Zwischenzeit verarbeitet und geändert worden sein können, z.B. durch eine CPU.
-
Gemäß einigen Ausführungsbeispielen wird das Manipulieren 14 des vorbestimmten Speicherbereichs durchgeführt, so dass die Manipulation nicht korrigiert werden kann durch Anlegen eines Fehlerkorrekturschemas an die manipulierten Daten in dem vorbestimmten Speicherbereich. Das heißt der Inhalt des ursprünglichen Speicherbereichs wird in einem solchen Ausmaß geändert, dass durch diese Änderung künstlich eingeführte Fehler nicht durch ein angewendetes Fehlerkorrekturschema korrigiert werden können. Dies stellt sicher, dass eine verfälschte Schreiboperation (Schritt 16) auf jeden Fall erfasst werden kann zu einem späteren Zeitpunkt, wenn auf den ursprünglichen Speicherblock oder Daten, die in demselben gespeichert sind, zugegriffen wird.
-
Falls aufgrund einer verfälschten Schreiboperation die Daten, die zu speichern sind, d.h. die Daten, die sich von dem ursprünglichen Datenblock ergeben, nicht in den vorbestimmten Speicherbereich geschrieben werden, nachdem der vorbestimmte Speicher manipuliert wurde (Schritt 14) werden die darin gespeicherten manipulierten Daten nicht überschrieben. Da der Inhalt des ursprünglichen vorbestimmten Speicherbereichs geändert wurde, so dass der Datenblock und der Fehlererfassungs/Korrekturwert, die darin gespeichert sind, nicht zueinander passen in Bezug auf ein darunterliegendes Fehlerkorrekturschema, kann die systematische (und beträchtliche) Manipulation des ursprünglichen vorbestimmten Speicherbereichs erfasst werden, aber nicht korrigiert werden, wenn die manipulierten Daten zu einem späteren Zeitpunkt von dem vorbestimmten Speicherbereich gelesen werden. Die Manipulation in Schritt 14 muss so beträchtlich sein, dass der Fall eines Einzelbitfehlers (oder dergleichen) ausgeschlossen werden kann. Deshalb müssen durch die Manipulation genug Fehler eingeführt werden, so dass der Fehlercode nicht mehr in der Lage ist, sie zu korrigieren.
-
Auf diese Weise kann ein böswilliger Seitenkanalangriff, der zu einer falschen Schreib- oder Rückschreiboperation führt, zuverlässig erfasst werden und angemessene Gegenmaßnahmen können eingeleitet werden.
-
Die Manipulation 14 des vorbestimmten Speicherbereichs kann auf vielfältige Weise durchgeführt werden. Beispielsweise können die darin gespeicherten Daten zufällig manipuliert werden oder können manipuliert werden gemäß einem spezifischen Manipulationsschema, das angepasst sein kann, um zu einem definitiven Ausfall des darunterliegenden Fehlerkorrekturmechanismus zu führen, d.h. die Manipulation 14 sollte einen Fehlervektor in die Daten einführen, die in dem Speicherblock gespeichert sind, der durch das Fehlerkorrekturschema später nicht korrigiert werden kann. Eine effiziente Möglichkeit zum Einführen eines solchen Fehlervektors kann das Löschen oder Entfernen des gespeicherten Datenblocks und/oder des zugeordneten gespeicherten Fehlererfassungswerts von dem vorbestimmten Speicherbereich, d.h. dem Speicherblock, sein.
-
Wie es oben erwähnt wurde, kann der vorbestimmte Speicherbereich ein fehlercodegeschützter Speicherbereich sein, beispielsweise ein RAM, der mit einem Cache-Speicher gekoppelt ist. In diesem Fall umfasst das Lesen 12 das Lesen der gespeicherten Daten von dem fehlercodegeschützten Speicherbereich in den Cache-Speicher. Gleichartig dazu umfasst das Schreiben 16 das Schreiben der Daten, die zu speichern sind, von dem Cache-Speicher in den fehlercodegeschützten Speicherbereich.
-
Um ein vorher falsches Schreiben 16 oder eine solche Schreiboperation zu erfassen, z.B. aufgrund eines Angriffszenarios, umfasst des Lesen 12 das Durchführen einer Fehleridentifikation und/oder Fehlerkorrektur des gelesenen Datenblocks basierend auf dem Lesefehlererfassungs/Korrekturwert, wobei beide von dem vorbestimmten Speicherblock gelesen werden. Zu diesem Zweck können verschiedene Fehlerkorrekturalgorithmen angelegt werden. Falls ein identifizierter Fehler des Datenblocks, der von dem vordefinierten Speicherbereich gelesen wird, nicht durch einen geeigneten Fehlerkorrekturmechanismus korrigiert werden kann, folgt dem Lesen 12 das Signalisieren eines vorhergehenden fehlerhaften Schreibens 16. In diesem Fall kann ein potentieller kryptographischer Angriff signalisiert werden und geeignete Gegenmaßnahmen, wie z.B. eine Systemabschaltung können eingeleitet werden. Dies wird nun mit Bezugnahme auf 2 näher dargestellt.
-
2 zeigt beispielhaft ein Verfahren 20, das weitere Schritte umfasst nach dem Lesen 12 der gespeicherten Daten von dem vorbestimmten Speicherbereich. Nachdem die Daten beispielsweise von einem Hauptspeicher in einen Cache-Speicher gelesen werden, wird ein Fehleridentifikations- und/oder Korrekturschritt 24 durchgeführt unter Verwendung der gelesenen Daten. Schritt 24 kann daher direkt in dem Hauptspeicher selbst durchgeführt werden, in dem die Daten gespeichert sind. Gleichartig dazu kann Schritt 24 auch außerhalb des Hauptspeichers durchgeführt werden, z.B. einem Cache-Speicher oder einer angehängten CPU unter Verwendung angemessener Programmanweisungen.
-
In einem weiteren Schritt 25 wird bestimmt, ob der Datenblock und der zugeordnete Fehlererfassungs/Korrekturwert, die von dem vorbestimmten Speichererbereich abgerufen werden, fehlerfrei sind oder eine Fehlerkorrektur ermöglichen. Falls dies der Fall ist, kann der fehlerfreie oder fehlerkorrigierte Datenblock für weitere Verarbeitung innerhalb des Cache-Speichers oder durch die CPU verwendet werden (Schritt 26). Nachdem der Datenblock verarbeitet oder geändert wurde, kann der geänderte Datenblock erneut fehlergeschützt werden und zurückgeschrieben werden in den ursprünglichen vorbestimmten Speicherbereich. Es ist jedoch anzumerken, dass gemäß Ausführungsbeispielen der vorliegenden Erfindung der Inhalt des vorbestimmten Speicherblocks modifiziert wurde (Schritt 14) zwischen der Leseoperation 12 und der Schreiboperation 16.
-
Falls jedoch Schritt 25 anzeigt, dass eine Fehlerkorrektur der Daten, die von dem vorbestimmten Speicherbereich gelesen werden, basierend auf einem darunterliegenden Fehlerkorrekturschema nicht möglich ist, kann ein Alarmsignal ausgegeben oder eine Angriffsgegenmaßnahme eingeleitet werden (Schritt 28).
-
Mit Bezugnahme auf 3 ist ein schematisches Blockdiagramm einer Vorrichtung 30 gemäß einem Ausführungsbeispiel der vorliegenden Erfindung gezeigt, zum Schreiben von Daten, die zu speichern sind, in einen vorbestimmten Speicherbereich 31.
-
In dem vorbestimmten Speicherbereich 31, der ein adressierbarer Speicherblock oder eine Einheit eines Hauptspeichers 34 sein kann, wie z.B. eines RAM, sind ein Datenblock 32 und ein zugeordneter Fehlererfassungswert 33 gespeichert.
-
Die Vorrichtung 30 umfasst eine Datenlesevorrichtung 35, die konfiguriert ist, um die gespeicherten Daten 32, 33 von dem vorbestimmten Speicherbereich 31 zu lesen. Ferner umfasst die Vorrichtung 30 einen Speichermanipulator 36, der konfiguriert ist, um nach dem Lesen der gespeicherten Daten 32, 33 zumindest entweder den gespeicherten Datenblock 32 oder den zugeordneten gespeicherten Fehlererfassungswert 33 in dem vorbestimmten Speicherbereich 31 zu manipulieren. Außerdem ist eine Datenschreibvorrichtung 37 vorgesehen, um nach dem Manipulieren die Daten, die zu speichern sind, in den vorbestimmten Speicherbereich 31 zu schreiben.
-
Gemäß einigen Ausführungsbeispielen kann die Vorrichtung 30 ferner einen Datenmanipulator 38 umfassen, der konfiguriert ist, um nach dem Lesen und vor dem Schreiben zumindest einen Teil des gelesenen Datenblocks 32 zu manipulieren, um den Datenblock zu erhalten, der zu speichern ist. Der Datenmanipulator kann beispielsweise eine Verarbeitungseinheit (CPU) sein, zum Verarbeiten und Ändern von Daten, die in dem Hauptspeicher 34 gespeichert sind, gemäß Programmanweisungen.
-
Wie es oben erwähnt wurde, kann die Datenlesevorrichtung 35 konfiguriert sein, um eine Fehleridentifikation und/oder -korrektur der gelesenen Daten 32, 33 durchzuführen, nach dem Zuführen der Lesedaten in einen geeigneten Fehlererfassungsmechanismus. Die Datenlesevorrichtung 35 kann auch konfiguriert sein, um eine vorhergehende fehlerhafte Schreiboperation durch die Datenschreibvorrichtung 37 zu signalisieren, falls ein identifizierter Fehler des Datenblocks 32, der von dem vordefinierten Speicherbereich 31 gelesen wird, nicht durch den Fehlerkorrekturmechanismus korrigiert werden kann. In diesem Fall wird ein Alarm signalisiert und/oder eine geeignete Angriffsgegenmaßnahme kann eingeleitet werden.
-
Die Datenlesevorrichtung 35, der Speichermanipulator 36 und die Datenschreibvorrichtung 37 können aufeinander abgestimmt oder aneinander angepasst sein, was durch die gestrichelten Pfeile in 3 angezeigt ist. Dies bedeutet, dass der folgende Zeitplan durchgeführt werden muss:
- 1. Lesen von dem vorbestimmte Speicherbereich 31;
- 2. Manipulieren, z.B. Löschen, des vorbestimmten Speicherbereichs 31, und
- 3. Schreiben von Daten, die zu speichern sind, in den vorbestimmten Speicherbereich 31 oder, im Falle eines Angriffs, in eine andere Stelle.
-
Die einzelnen Blöcke der Vorrichtung 30 können als Hardware implementiert sein. Sie können zwischen unterschiedlichen Komponenten eines Rechen- oder Speichersystems verteilt sein. Das heißt, obwohl dies nicht explizit gezeigt ist, die verschiedenen Blöcke können zwischen einem Hauptspeicher 34 und einem Cache-Speicher und/oder einer CPU verteilt sein. Zumindest der Speichermanipulator 36 kann in dem Hauptspeicher 35 selbst implementiert sein. D.h. die Manipulation oder Änderung des vorbestimmten Speicherbereichs wird durch den Hauptspeicher 34 selbst ausgeführt, z.B. unter Verwendung einer eingebetteten Steuerung, während oder nach der Leseoperation 12. Aus diesem Grund kann eine geeignete Speichermanipulations- oder Löschschaltung in den Hauptspeicher 34 implementiert sein.
-
Außerdem können auch die Datenlesevorrichtung 35 und/oder die Datenschreibvorrichtung 37 in den Hauptspeicher 34 integriert sein als Teil einer I/O- (Eingabe/Ausgabe-) Schnittstelle. Gemäß anderen Ausführungsbeispielen können die Lesevorrichtung 35 und die Schreibvorrichtung 37 Teil eines Speichers oder einer Cache-Steuerung sein.
-
Der Datenmanipulator 38 kann realisiert werden durch eine CPU oder einen Mikrocontroller zum Verarbeiten und Handhaben der Daten, die in dem Hauptspeicher 34 gespeichert sind, wie es oben erwähnt wurde.
-
Zusammenfassend liefern Ausführungsbeispiele ein Konzept zum Ermöglichen eines hohen Schutzes von Speicherschreiboperationen für fehlercodegeschützte Daten. Dies kann erreicht werden durch Implementieren einer Datenänderungsleseoperation vor einer Schreiboperation ohne weitere komplexe Maßnahmen zu erfordern. Vor jeder Schreiboperation werden Daten von einem vordefinierten Speicherbereich gelesen und eine Fehlercodeuntersuchung wird durchgeführt. Genau nach der Leseoperation werden die gelesenen Daten modifiziert oder sogar gelöscht. Diese Modifikationsoperation kann durch den Speicher selbst durchgeführt werden während oder nach der tatsächlichen Leseoperation. Nachfolgend können die gelesenen Daten (die z.B. durch eine CPU zu verarbeiten sind) nicht ein zweites Mal von dem vordefinierten Speicherbereich gelesen werden, ohne dass in der Zwischenzeit eine erfolgreiche Schreiboperation stattgefunden hat, d.h. zwischen den zwei Leseoperationen, die auf den gleichen Speicherbereich zugreifen. Eine Schreiboperation wird als erfolgreich angesehen, falls die vorher gelesenen und geänderten Daten korrekt in den vordefinierten Speicherbereich zurückgeschrieben werden. Im Fall einer falschen Schreiboperation, d.h. einer Schreiboperation, die die gelesenen und geänderten Daten zu einer falschen Speicheradresse zurück schreibt, existiert jedoch kein gültiges Fehlercodewort mehr für die ursprünglich gelesenen Daten an dem vordefinierten Speicherbereich (da die gespeicherten Daten modifiziert/gelöscht wurden). Somit kann sichergestellt werden, dass eine verfälschte Schreiboperation erfasst werden kann während eines späteren Zugriffs auf die absichtlich beschädigten Daten, die in dem vorbestimmten Speicherbereich gespeichert sind.
-
Ausführungsbeispiele sind besonders geeignet für Systeme, die Datenzugriff über einen Cache-Speicher durchführen. Dies macht insbesondere Sinn für fehlergeschützte Hauptspeicher, da eine fehlerwortgeschützte Speichereinheit wesentlich größer ist als die kleinste schreibbare Dateneinheit (beispielsweise ein Byte). In diesem Fall muss ein Speicherbereich oder eine Speichereinheit, die überschrieben werden soll, zu dem Cache übertragen werden (durch die Leseoperation 12). Da einige Ausführungsbeispiele die Daten, die von dem Hauptspeicherbereich gelesen werden, ungültig machen, muss sichergestellt werden, dass die zwischengespeicherten Daten zurück in den Hauptspeicher geschrieben werden, wenn dieselben von dem Cache zu verschieben sind, unabhängig davon, ob sie wirklich überschrieben wurden oder nicht. Für RAM-Hauptspeicher ist dies kein wesentlicher Nachteil, da auf RAM, auf den während des Schreibens zugegriffen wird, normalerweise ebenfalls innerhalb einer eher kurzen Zeitperiode zugegriffen wird durch Schreiben (unter der Bedingung einer vernünftigen Cache-Trefferrate). Somit können Ausführungsbeispiele äußerst effizient sein in einem Cache-System und können einen hervorragenden Schutz gegen fehlerhaftes Speicherschreiben, z.B. aufgrund von Seitenkanalangriffen, bereitstellen.
-
Im Prinzip kann die vorliegende Erfindung selbstverständlich auch für jeden Speichertyp angewendet werden, der Lese- und Schreibzugriff ermöglicht.
-
Ausführungsbeispiele können besonders vorteilhaft bei Speichersystemen angewendet werden, die einen Hauptspeicher umfassen, wie z.B. einen flashbasierten Speicher oder einen RAM-Typ-Speicher in Verbindung mit einem schnelleren Cache-Speicher.
-
Abhängig von den Umständen kann das erfindungsgemäße Verfahren zum Schreiben von Daten entweder in Hardware oder Software implementiert werden. Die Implementierung kann auf einem digitalen Speichermedium sein, insbesondere auf einer Platte, CD oder DVD mit Steuersignalen, die elektronisch ausgelesen werden können, die mit einem programmierbaren Computersystem zusammenarbeiten können, so dass das erfindungsgemäße Verfahren zum Schreiben von Daten ausgeführt wird. Allgemein ist die Erfindung somit auch ein Computerprogrammprodukt mit einem Programmcode, der auf einem maschinenlesbaren Träger gespeichert ist zum Durchführen von einem der erfindungsgemäßen Verfahren, wenn das Computerprogrammprodukt auf einem Computer läuft. Anders ausgedrückt, die Erfindung kann somit auch realisiert werden als ein Computerprogramm mit einem Programmcode zum Durchführen von einem der Verfahren, wenn das Computerprogramm auf einem Computer läuft.