-
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 Zustande 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.
-
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, eine Vorrichtung und
ein 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.
-
Gemäß einem
Aspekt schaffen Ausführungsbeispiele
eine Vorrichtung zum Schreiben von Daten, die zu speichern sind,
in einen vorbestimmten Speicherbereich, wobei die Daten, die zu
speichern sind, einen Datenblock und einen zugeordneten Fehlererfassungswert
umfassen. Die Vorrichtung umfasst eine Datenlesevorrichtung, die
konfiguriert ist, um gespeicherte Daten von dem vorbestimmten Speicherbereich
zu lesen, wobei die gespeicherten Daten einen gespeicherten Datenblock
und einen zugeordneten gespeicherten Erfassungswert umfassen, einen
Speichermanipulator, der konfiguriert ist, um nach dem Lesen der
gespeicherten Daten zumindest entweder den gespeicherten Datenblock
oder den zugeordneten gespeicherten Fehlererfassungswert in dem
vorbestimmten Speicherbereich zu manipulieren, und einen Datenschreibvorrichtung,
die konfiguriert ist, um nach dem Manipulieren die Daten, die zu
speichern sind, in den vorbestimmten Speicherbereich zu schreiben.
-
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 gespei cherten 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.
-
Obwohl
diese Erfindung bezüglich
mehrerer Ausführungsbeispiele
beschrieben wurde, gibt es Änderungen,
Permutationen und Äquivalente,
die in den Schutzbereich dieser Erfindung fallen. Es sollte auch
angemerkt werden, dass es viele alternative Möglichkeiten zum Implementieren
der Verfahren und Anordnungen der vorliegenden Erfindung gibt. Daher
sollen die folgenden angehängten
Ansprüche so
interpretiert werden, dass sie alle solche Änderungen, Permutationen und Äquivalente
umfassen, die in die wahre Wesensart und den Schutzbereich der vorliegenden
Erfindung fallen.