-
Ausführungsformen der vorliegenden Erfindung beziehen sich auf das Verringern der Änderungen eines erfolgreichen Angriffs auf Adresszeilen.
-
In Sicherheitsanwendungen werden Mikrocontroller und ASICS verwendet, die vorzugweise gegeben Angriffe, die physische Manipulationen, sogenannte physische Angriffe, umfassen, geschützt sind. Physische Angriffe ermöglichen ein Manipulieren eines einzelnen oder einiger logischer Werte.
-
Ein beispielhafter physischer Angriff kann auf eine statischen Manipulation basieren, z. B. Abschneiden eines Kabels oder Beschädigen eines Schaltelements (z. B. eines Transistors), derart, dass ein logischer Wert (ein Bit und/oder ein Signal) dauerhaft geändert ist.
-
Außerdem existieren verschiedene dynamische physische Angriffe: Zum Beispiel kann ein Signal auf einen bestimmten Wert gezwungen werden oder es kann für einen kurzen Zeitraum zu seinem entgegengesetzten logischen Wert invertiert werden. Ein derartiger physischer Angriff ermöglicht einem Angreifer, während einer Berechnung vorübergehend Fehler einzuspeisen. Dies könnte z. B. durch eine Laserfehlereinspeisung (LFI) oder durch Anordnen von Sondennadeln an einer Signalleitung und dadurch Anlegen eines vorgegebenen elektrischen Potentials an der Signalleitung erzielt werden. Eine derartige Manipulation ist reversibel und der Angreifer kann mehrere Fehlereinspeisungen anbringen, um das Verhalten einer Logikschaltung zu analysieren und möglicherweise einen geheimen Wert aufgrund der vorübergehenden Fehlfunktion der Schaltung zu entnehmen.
-
Prominente Ziele eines Angriffs können Signalleitungen sein, die Adressen führen, die verwendet werden, um auf bestimmte Peripherieschnittstellenregister oder Speicherorte zuzugreifen. Eine Adressmanipulation kann dadurch einen geheimen Wert offenbaren, wenn ein Geheimnis von einer manipulierten Adresse gelesen oder zu ihr geschrieben wird, z. B. einer Adresse, die nicht die beabsichtigte Zieladresse, sondern eine falsche Adresse in derselben oder von einer weiteren Peripherieeinrichtung (z. B. eines Speicherortes) ist.
-
Die Aufgabe ist, einen verbesserten Lösungsversuch bereitzustellen, um die Chancen eines erfolgreichen Angriffs auf Adressen, die zum Zugreifen auf einen Speicher verwendet werden, zu verringern.
-
Dies wird gemäß den Bestandteilen der unabhängigen Ansprüche gelöst. Weitere Ausführungsformen resultieren aus den abhängigen Ansprüchen.
-
Die hier vorgeschlagenen Beispiele können insbesondere auf mindestens einer der folgenden Lösungen basieren. Kombinationen der folgenden Bestandteile können verwendet werden, um ein gewünschtes Ergebnis zu erzielen. Die Bestandteile des Verfahrens könnten mit einem oder mehreren Bestandteilen einer Einrichtung, einer Vorrichtung oder eines Systems kombiniert werden oder umgekehrt.
-
Ein Verfahren zum Zugreifen auf einen Speicher über mindestens eine Adresse wird vorgeschlagen,
- - wobei die mindestens eine Adresse ein Codewort eines Codes umfasst.
-
Der Speicher kann ein Speicherplatz (Speicherraum) oder eine Speicherdomäne sein, insbesondere ein sicherer Speicher. Der Zugriff auf den Speicher kann über das Codewort, das die Adresse ist, ausgeführt werden. Die Adresse kann durch einen Adressdecoder umgeleitet werden. Der Zugriff kann einen Schreibvorgang, einen Lesevorgang oder eine Prüfvorgang umfassen.
-
In einer Ausführungsform ist die Adresse ein Codewort des Codes. Der Code kann ein Fehlerdetektions- und/oder ein Fehlerkorrekturcode sein. Daher kann gewährleistet werden, dass der Zugriff lediglich dann erfolgreich ist, wenn die Adresse ein Codewort des Codes ist.
-
Der gültige Adressraum kann daher auf Codeworte des Codes beschränkt werden. Wenn der Zugriff auf eine Adresse gerichtet ist, die kein Codewort ist, kann der Zugriff abgewiesen werden und/oder eine vorgegebene Aktion kann ausgelöst werden. Dies ermöglicht ein Detektieren von Angriffen, die auf einzelne Bits einer Adresse gerichtet sind.
-
Gemäß einer Ausführungsform wird
- - eine Anweisung, die einer Adresse zugeordnet ist, erhalten,
- - geprüft, ob die Adresse ein Codewort ist,
- - dann, wenn die Adresse ein Codewort des Codes ist, die Anweisung ausgeführt und
- - dann, wenn die Adresse kein Codewort des Codes ist, eine vorgegebene Aktion ausgelöst.
-
Die vorgegebene Aktion kann eine Benachrichtigung über einen Versuch, auf eine ungültige Adresse zuzugreifen, umfassen. Der Zugriff kann blockiert werden oder er kann zu einer vorgegebenen Adresse umgeleitet werden. Die vorgegebene Aktion kann eine übergeordnete Aktion auslösen, die einen Versuch anzeigt, das System zu kompromittieren. Sie kann eine Alarmbenachrichtigung umfassen oder sie kann eine Auswirkung auf das Gesamtsystem haben, z. B. ein Anhalten eines Vorgangs, um zu vermeiden, dass weitere Versuche, das System zu kompromittieren erfolgreich sind.
-
Die Anweisung kann einen Lesevorgang, einen Schreibvorgang, einen Prüfvorgang, einen Lesewiederholungsvorgang (wiederholter Lesevorgang) oder dergleichen umfassen.
-
Gemäß einer Ausführungsform wird die Anweisung erhalten und durch einen Adressdecoder geprüft.
-
Gemäß einer Ausführungsform
- - umfasst die mindestens eine Adresse einen Satz von mindestens zwei Adressen, wobei der Satz von mindestens zwei Adressen eine ursprüngliche Adresse und mindestens eine Redundanzadresse umfasst,
- - sind die ursprüngliche Adresse und die mindestens eine Redundanzadresse Codeworte des Codes,
- - ist eine ursprüngliche Anweisung zur ursprünglichen Adresse gerichtet und ist mindestens eine zusätzliche Anweisung zur mindestens einen Redundanzadresse gerichtet und
- - werden Daten, die von der ursprünglichen Anweisung und/oder von der mindestens einen zusätzlichen Anweisung erhalten werden, verglichen, um zu bestimmen, ob es eine unerwünschte Änderung einer der Adressen gab.
-
Gemäß einer Ausführungsform sind die ursprüngliche Adresse und die mindestens eine Redundanzadresse zu demselben physischen Wert, der im Speicher gespeichert ist, gerichtet oder sie sind zu verschiedenen physischen Werten gerichtet, die derselben Adresse entsprechen, oder wobei mindestens einer der physischen Werte, der durch die mindestens eine Redundanzadresse referenziert wird, invertiert ist.
-
Daher kann ein gemeinsamer Wert (Daten) über die ursprüngliche Adresse sowie über die mindestens eine Redundanzadresse referenziert werden. Es besteht allerdings die Möglichkeit, dass mindestens einer der Redundanzwerte (mindestens teilweise oder vollständig) invertiert ist.
-
Gemäß einer Ausführungsform kann der Vergleich von Daten Folgendes sein:
- - Vergleichen von Daten, die von der ursprünglichen Adresse gelesen werden, mit Daten, die von der mindestens einen Redundanzadresse gelesen werden; oder
- - Vergleichen von Daten, die zur ursprünglichen Adresse geschrieben werden sollen, mit Daten, die von der mindestens einen Redundanzadresse gelesen werden oder umgekehrt.
-
Gemäß einer Ausführungsform kann der Vergleich von Daten die folgenden Ergebnisse liefern:
- - wenn die Daten, die von der ursprünglichen Adresse gelesen werden oder in die ursprüngliche Adresse geschrieben werden, von den Daten, die von der Redundanzadresse gelesen werden, abweichen, wird eine vorgegebene Aktion ausgelöst;
- - wenn die Daten, die von der ursprünglichen Adresse gelesen werden oder in die ursprüngliche Adresse geschrieben werden, von den Daten, die von der Redundanzadresse gelesen werden, nicht abweichen, wird keine Adressmanipulation detektiert.
-
Es ist festzuhalten, dass „abweichen“ in dieser Hinsicht bedeutet, dass der Vergleich eine unerwartete Differenz anzeigt. Eine derartige unerwartete Differenz löst die vorgegeben Aktion aus. Allerdings kann eine unerwartete Differenz von ersten Daten und zweiten Daten stammen, wobei eine dieser Datenmengen invertiert ist: Wenn z. B. ein Vergleich zwischen ersten Daten und zweiten Daten ausgeführt wird, wobei die zweiten Daten eine Inversion der ersten Daten sind, wird der Vergleich dennoch (wegen der vordefinierten Inversion) anzeigen, dass die ersten Daten nicht von den zweiten Daten abweichen, weil die Inversion absichtlich erfolgt und inhärent kompensiert werden kann (z. B. durch Invertieren der Bits vor dem Durchführen des eigentlichen Vergleichs).
-
Gemäß einer Ausführungsform ist die Anweisung eine Leseanweisung, eine Schreibanweisung oder eine Prüfanweisung (Verifizieranweisung).
-
Gemäß einer Ausführungsform
- - umfasst der Speicher einen ersten Speicherplatz (Speicherraum) und einen zweiten Speicherplatz;
- - ist ein Abschnitt (bzw. einen Teil) des ersten Speicherplatzes durch einige Adressen erreichbar;
- - ist ein Abschnitt (bzw. einen Teil) des zweiten Speicherplatzes (Speicherraum) durch einige Adressen erreichbar;
- - sind eine Kombination der einigen Adressen für den Abschnitt des ersten Speicherplatzes und eine Kombination der einigen Adressen für einen Abschnitt des zweiten Speicherplatzes Codeworte des Codes.
-
Der erste Speicherplatz und der zweite Speicherplatz können Speicherplätze verschiedener Sicherheitsdomänen sein. Insbesondere kann einer der Speicherplätze sicherer als der andere sein.
-
Es besteht auch die Möglichkeit, dass mehr als zwei Speicherplätze verwendet werden. In diesem Fall kann das Gelehrte zwischen dem ersten Speicherplatz und jedem weiteren Speicherplatz angewandt werden.
-
Der Abschnitt des (erste oder zweiten) Speicherplatzes kann ein Register sein. Das Register kann über mindestens zwei Adressen, z. B. eine ursprüngliche Adresse und mindestens eine Redundanzadresse, adressierbar sein. Es besteht die Möglichkeit, dass einige Adressen auf eine physischen Adresse festgelegt sind oder dass sie z. B. durch einen Adressdecoder auf die physische Adresse abgebildet werden.
-
Die Kombination der einigen Adressen pro Register (oder Abschnitt) kann ein Codewort festlegen, ebenso wie die Kombination der einigen Adressen jedes Registers der weiteren Speicherdomänen. Daher gewährleistet die Codierung, dass kein Adress-Tupel aus dem ersten Speicherplatz vorliegt, das durch Einspeisen eines Fehlers E mit wt(E) ≤ d zu einem Adress-Tupel des zweiten Speicherplatzes geändert werden kann. Mit anderen Worten benötigt ein Angreifer mehr als d-1 Bit-Manipulationen, um den gewählten Code zu überwinden.
-
Gemäß einer Ausführungsform
- - werden zwei Adressen pro Abschnitt des ersten Speicherplatzes sowie zwei Adressen pro Abschnitt des zweiten Speicherplatzes verwendet, wobei die zwei Adressen eine ursprüngliche Adresse und eine Redundanzadresse umfassen;
- - besitzt der Code einen Codeabstand d, der mindestens zwei beträgt und
- - werden der erste Speicherplatz und/oder der zweite Speicherplatz wie folgt verwendet: die ursprünglichen Adressen sind in einem ersten Adressraum angeordnet und die Redundanzadressen sind in einem zweiten Adressraum angeordnet.
-
Gemäß einer Ausführungsform überlappen der erste Adressraum und der zweite Adressraum nicht.
-
Gemäß einer Ausführungsform verwendet der erste Adressraum ansteigende Adressen und verwendet der zweite Adressraum absteigende Adressen oder umgekehrt.
-
Eine ansteigende Adresse bezieht sich auf eine Adresse, auf die über einen ansteigenden Adresszähler zugegriffen wird, und eine absteigende Adresse bezieht sich auf eine Adresse, auf die über einen absteigenden Adresszähler zugegriffen wird. Daher können verschiedenen Adressräume durch verschiedene Bereiche von Werten, die durch den Adresszähler gesetzt werden, erstellt werden.
-
Gemäß einer Ausführungsform umfasst der Speicher einen kontinuierlichen oder einen diskontinuierlichen Speicherraum.
-
Gemäß einer Ausführungsform umfasst der Speicher mindestens einen physischen Speicherchip.
-
Der Speicher kann durch einen oder mehrere Speicherchips beliefert werden.
-
Gemäß einer Ausführungsform umfasst der Speicher Register eines Prozessors, eine ASIC oder einen Controller.
-
Außerdem wird eine Einrichtung bereitgestellt, die zum Zugreifen auf einen Speicher über mindestens eine Adresse ausgelegt ist, wobei die mindestens eine Adresse ein Codewort eines Codes umfasst.
-
Die Einrichtung kann eine Verarbeitungseinheit zum Durchführen der Schritte wie hier beschrieben umfassen. Es ist festzuhalten, dass die Schritte des Verfahrens, die hier angegeben werden, in der Einrichtung und/oder der Verarbeitungseinheit ausführbar sein können.
-
Es ist ferner festzuhalten, dass die Verarbeitungseinheit mindestens ein, insbesondere einige Mittel umfassen kann, die ausgelegt sind, um die Schritte des hier beschriebenen Verfahrens auszuführen. Die Mittel können logisch oder physisch getrennt sein; insbesondere könnten einige logisch getrennte Mittel in mindestens einer physischen Einheit kombiniert werden.
-
Die Verarbeitungseinheit kann Folgendes umfasst: einen Prozessor, einen Mikrocontroller, eine fest verdrahtete Schaltung, eine ASIC, eine FPGA und/oder eine Logikeinrichtung.
-
Ferner wird eine Vorrichtung vorgeschlagen, die Mittel umfasst, um auf einen Speicher über mindestens eine Adresse zuzugreifen, wobei die mindestens eine Adresse ein Codewort eines Codes umfasst.
-
Es wird ein Computerprogrammprodukt bereitgestellt, das direkt in einen Speicher einer digitalen Verarbeitungseinrichtung geladen werden kann und das Software-Code-Abschnitte umfasst, um die Schritte des hier beschriebenen Verfahrens durchzuführen.
-
Außerdem wird ein computerlesbares Medium vorgeschlagen, das computerausführbare Anweisungen besitzt, die ausgelegt sind, zu bewirken, dass ein Computersystem Schritte des hier beschriebenen Verfahrens durchführt.
-
Ausführungsformen werden unter Bezugnahme auf die Zeichnungen gezeigt und dargestellt. Die Zeichnungen dienen dazu, das grundlegende Prinzip darzustellen, derart, dass lediglich Aspekte, die zum Verstehen des grundlegenden Prinzips erforderlich sind, dargestellt werden. Die Zeichnungen sind nicht maßstabsgetreu. In den Zeichnungen bezeichnen dieselben Bezugszeichen ähnliche Bestandteile.
- 1 zeigt ein beispielhaftes Diagramm, das visualisiert, dass eine Adresse A verwendet wird, um auf einen Speicher über einen Adressdecoder zuzugreifen;
- 2 zeigt einen schematischen Ablaufplan mit Schritten, um zu bestimmen, ob ein Zugriff auf den Speicher als gültig betrachtet wird oder nicht;
- 3 zeigt ein beispielhaftes Nachrichtenfolgediagramm, das eine Kommunikation zwischen einer Anwendung, einem Adressdecoder und einem Speicher visualisiert;
- 4 zeigt ein ähnliches Konzept zu dem, das in 3 gezeigt ist, außer, dass der Schreibvorgang durch einen weiteren Lesevorgang ersetzt ist;
- 5 zeigt ein Nachrichtenfolgediagramm einer alternativen Ausführungsform ohne Verwendung einer zusätzlichen Neuabbildung beim Adressdecoder, die in 4 gezeigt ist.
-
Hier beschriebene Beispiele schlagen insbesondere das Verwenden mindestens einer Adresse als ein Codewort vor.
-
Ein Code kann ein Fehlerdetektions- und/oder ein Fehlerkorrekturcode sein. Dieser code umfasst einige Codeworte, die durch den Code definiert sind. Die Codeworte besitzen einen vorgegebenen Abstand voneinander, derart, dass individuelle Fehler im Codewort detektiert und/oder korrigiert werden können.
-
Ein Hamming-Abstand (siehe https://en.wikipedia.org/wiki/Hamming_distance) wird verwendet, um einige Begriffe in der Codierungstheorie wie z. B. Fehlerdetektions- und Fehlerkorrekturcodes zu definieren. Insbesondere gilt ein Code C als k-fehlerdetektierend, wenn zwei beliebige Codeworte c1 und c2 aus dem Code C, die einen Hamming-Abstand kleiner k besitzen, übereinstimmen; auf andere Weise ist ein Code k-fehlerdetektierend, wenn der minimale Hamming-Abstand zwischen zwei beliebigen seiner Codeworte mindestens k + 1 ist.
-
Zum Beispiel wenn die Codeworte des Codes, der für Adressen verwendet wird, einen Abstand besitzen, der 2 beträgt, kann eine Einzelbitadressmanipulation in der Adresse detektiert werden, z. B. durch einen Adressdecoder.
-
Hier beschriebene Beispiele liefern eine Lösung, die keine zusätzlichen Seitenbandsignale erfordert. Außerdem können diese Lösungen in Kombination mit bestehenden Bus-Systemen verwendet werden. Der Lösungsversuch liefert ferner einen Schutz gegen Einzelbitmanipulationen auf Adressleitungen und er liefert einen Schutz gegeben mehrfache Bitmanipulationen.
-
Beispiel: Verwenden einer einzelnen Adresse als ein Codewort
-
In einem Beispiel ist die Adresse ein Codewort. Das Codewort kann geprüft werden, z. B. durch einen Adressdecoder. Wenn das Codewort gültig ist, wird der Zugriff auf die Adresse ausgeführt. Wenn das Codewort ungültig ist, kann der Adressdecoder eine vorgegebene Aktion initiieren, z. B. einen Alarm oder eine beliebige vordefinierte Benachrichtigung ausgeben. Daher wird der Zugriff auf eine manipulierte Adresse, die kein Codewort ist, bemerkt und kann vermieden oder umgeleitet werden.
-
1 zeigt ein beispielhaftes Diagramm, das visualisiert, das seine Adresse A verwendet wird, um auf einen Speicher 101 über einen Adressdecoder 102 zuzugreifen.
-
Eine Anweisung Cmd wird verwendet, um einen Vorgang z. B. einen Lesevorgang, einen Schreibvorgang, einen Löschvorgang, einen Prüfvorgang oder dergleichen unter Verwendung der Adresse A durchzuführen. Wahlweise kann die Anweisung Cmd Daten zum Durchführen des Vorgangs verwenden; diese Option ist durch eckige Klammern angegeben. Zum Beispiel dann, wenn die Anweisung Cmd ein Schreibvorgang ist, sollen Daten bei der Adresse A geschrieben (gespeichert) werden. Wenn die Anweisung Cmd ein Lesevorgang ist, kann lediglich die Adresse A als ein Operand zum Lesen von Daten bei dieser Adresse verwendet werden.
-
Die Anweisung Cmd wird beim Adressdecoder 102, der bestimmt, ob die Adresse A ein Codewort eines vorgegebenen Codes ist, empfangen. Wenn die Adresse A ein Codewort ist, wird die Adresse A als gültig betrachtet und ein Zugriff auf den Speicher bei der Adresse A wird gewährt.
-
Wenn die Adresse A kein Codewort ist, wird die Adresse A als ungültig betrachtet und eine vorgegebene Aktion wird ausgelöst. Die vorgegebene Aktion kann eine Benachrichtigung über einen Versuch, auf eine ungültige Adresse zuzugreifen, umfassen. Der Zugriff kann blockiert werden oder er kann zu einer vorgegebenen Adresse umgeleitet werden. Die vorgegebene Aktion kann eine übergeordnete Aktion auslösen, die einen Versuch anzeigt, das System zu kompromittieren.
-
2 zeigt schematischen Ablaufplan mit Schritten, um zu bestimmen, ob ein Zugriff auf den Speicher als gültig betrachtet wird oder nicht. Die in 2 gezeigten Schritte können durch den Adressdecoder 102 ausgeführt werden, wie in 1 beispielhaft gezeigt ist.
-
In einem Schritt 201 wird geprüft, ob die Adresse A in der Anweisung Cmd(A, <data>) ein Codewort ist. Wenn ja wird zu einem Schritt 202 abgezweigt und die Anweisung Cmd wird ausgeführt, der Zugriff auf den Speicher 101 wird gewährt.
-
Wenn die Bedingung von Schritt 201 nicht erfüllt ist, wird zu einem Schritt 203 abgezweigt und die Anweisung Cmd wird nicht ausgeführt; eine vordefinierte Aktion (z. B. eine Alarmbenachrichtigung) kann wie oben beschrieben stattdessen ausgelöst werden.
-
Daher ermöglicht die in 1 und 2 gezeigte Lösung lediglich den Zugriff auf Adressen, die Codeworte eines vorgegebenen Codes sind. Der Zugriff kann z. B. einen Lese-, Schreib-, Lösch- oder Prüfzugriff umfassen.
-
Es ist festzuhalten, dass der Adressdecoder eine beispielhafte Einheit ist, die zum Prüfen verwendet werden kann, ob die Adresse gültig ist, d. h. ob die Adresse ein Codewort ist. Eine beliebige Einheit, die geeignet ist, um auf den tatsächlichen Speicher zuzugreifen, kann ebenfalls für zu diesem Zweck verwendet werden.
-
Beispiel: Verbinden gespeicherter Informationen mit mindestens zwei Adressen
-
In einem beispielhaften Szenario werden zwei oder mehr Adressen für dasselbe Peripherieschnittstellenregister bereitgestellt und ein Datenwert kann zwei (oder mehr) Male gesendet werden: einmal unter Verwendung einer ersten Adresse (d. h. einer „ursprünglichen Adresse“ A) und ein zweites Mal unter Verwendung einer weiteren Adresse (d. h. einer „Redundanzadresse“ A*).
-
Es ist festzuhalten, dass der Begriff „ursprüngliche Adresse“ sich auf eine erste Adresse bezieht und der Begriff „Redundanzadresse“ sich auf mindestens eine weitere (d. h. zweite, dritte usw.) Adresse bezieht. Daher können mindestens zwei Adressen A und A* vorliegen, die auf einen tatsächlichen Abschnitt eines Speichers z. B. eines Registers oder eines Prozessors Bezug nehmen.
-
Ein Vergleich der über die verschiedenen Adressen A und A* empfangenen Daten kann dann verwendet werden, um zu bestimmen, ob eine Adressmanipulation aufgetreten ist.
-
Es ist festzuhalten, dass dieselben Datenregister nicht sowohl mit der ursprünglichen Adresse als auch mit der Redundanzadresse verbunden werden können. In diesem Szenario kann ein tatsächliches physisches Register vorliegen, das Daten umfasst und auf das über zwei verschiedene Adressen zugegriffen wird. Es besteht auch die Möglichkeit, dass zwei verschiedene Speicherplätze für die Adressen A und A* verwendet werden, wohingegen die Daten, die in den verschiedenen Plätzen gespeichert sind, dieselben sein können. Als eine Möglichkeit, kann eine Datenmenge in Bezug auf die andere Datenmenge invertiert (gespeichert und/oder auf sie zugegriffen) werden.
-
3 zeigt ein beispielhaftes Nachrichtenfolgediagramm, das eine Kommunikation zwischen einer Anwendung 301, einem Adressdecoder 302 und einem Speicher 303 visualisiert.
-
Die Anwendung 301 kann eine beliebige Funktionalität sein, die einen Zugriff auf den Speicher 303 verwendet. Die Funktionalität des Adressdecoders 302, die hier beschrieben wird, ist optional, wie später z. B. in Bezug auf 5 gezeigt wird.
-
Das beispielhafte Szenario, das in 3 dargestellt ist, zeigt, dass eine Information „data“ auf den Speicher 303 geschrieben wird und dann durch einen nachfolgenden Lesevorgang geprüft wird, ob der Schreibvorgang erfolgreich war.
-
Daher gibt die Anwendung 301 in einem Schritt 304 eine Schreibanweisung
Write (A, data)
zum Adressdecoder 302 aus und gibt dabei eine Adresse A und zu schreibende Informationen „data“ an. Der Adressdecoder 302 in einem Schritt 305 bildet die Adresse A auf eine tatsächliche Adresse a ab und initiiert die eigentliche Schreibanweisung 306
Write (a, data)
zur physischen Adresse des Speichers 303. Es ist festzuhalten, dass die Adresse A und die abgebildete Adresse a dieselbe sein können.
-
Es ist festzuhalten, dass der Speicher 303 ein physisches Register eines Controllers oder eines Prozessors sein kann oder dass er jegliche Art eines kontinuierlichen oder diskontinuierlichen Speicher(raum)s sein kann.
-
Die Anwendung gibt in einem Schritt 307 eine Leseanweisung
Read (A*)
aus, die an die Redundanzadresse A* gerichtet ist. In diesem Beispiel bildet der Adressdecoder 302 in einem Schritt 308 die Redundanzadresse A* auf die physische Adresse a ab und löst eine Leseanweisung 309 an dieser Adresse a aus:
Read (a).
-
In einem Schritt 310 werden die Informationen data*, die in Schritt 309 gelesen wurden, zur Anwendung 301 übermittelt. In einem Schritt 311 vergleicht die Anwendung 301 data und data*. Wenn beide identisch sind, liegt eine hohe Wahrscheinlichkeit vor, dass der Schreibvorgang erfolgreich war. Wenn beide nicht identisch sind, kann der Schreibvorgang fehlerhaft gewesen sein und/oder eine Adressmanipulation kann auf die Anweisungen gerichtet gewesen sein, die entweder in Schritt 304 oder Schritt 307 übermittelt wurden.
-
Die Kombination der Adressen A und A* kann insbesondere ein Codewort eines vorgegebenen Codes sein, d. h. (A, A*) → CW. Es ist auch eine Möglichkeit, dass jede der Adressen A und A* ein Codewort des vorgegebenen Codes ist.
-
Wenn ein Angriff auf die Adresse A erfolgreich ist, was zu einer verschiedenen Adresse B führen würde, würde der Adressdecoder 302 die tatsächliche Adresse a nicht verwenden, um auf den Speicher 303 zuzugreifen, sondern eine weitere Adresse b. Der Lesevorgang 307 (wenn er nicht angegriffen wird) würde dann die Informationen data* zurückgeben, die von data verschieden sind, weil der Schreibvorgang an der Adresse A nicht erfolgreich war.
-
Wenn der Schreibvorgang 304, 306 erfolgreich war und die Adresse, die im Lesevorgang 307 verwendet wird, zu einer Adresse B umgeleitet wird, sind die Informationen data* von den Informationen data, die an die Adresse A geschrieben werden, verschieden. Daher könnten Angriffe auf die Vorgänge 304 oder 307 durch die Anwendung 301 erkannt werden.
-
Wenn die Codeworte dieses Codes einen Hamming-Abstand besitzen, der zwei beträgt, würde eine Manipulation eines einzelnen Bits im Codewort nicht zu einem anderen Codewort führen, und daher würde sie dem Angreifer keine gültigen Informationen offenbaren.
-
4 zeigt ein ähnliches Konzept, außer, dass der Schreibvorgang in Schritt 304 durch einen weiteren Lesevorgang in einem Schritt 401 ersetzt wird.
-
Die Anwendung gibt in Schritt 401 eine Leseanweisung
Read (A)
aus, die an die ursprüngliche Adresse A gerichtet ist. In diesem Beispiel bildet ein Adressdecoder 302 in einem Schritt 402 die Adresse A auf die physische Adresse a ab und löst eine Leseanweisung 403 an dieser Adresse a aus:
Read (a).
-
In einem Schritt 404 werden die Informationen data, die in Schritt 403 gelesen werden, zur Anwendung 301 übermittelt.
-
Dann werden die Schritte 307 bis 311 ausgeführt, wie hinsichtlich 3 oben beschrieben wurde.
-
Daher ist ein Lesevorgang in zwei Lesevorgänge unterteilt, die jeweils verschiedene Adressen verwenden, zuerst die Adresse A, dann die Adresse A*. Jede Manipulation jeder der Adressen A oder A* in den Schritten 401 oder 307 kann zu einer verschiedenen physischen Adresse a führen, was dann offenbaren würde, dass die Informationen, die in den Schritten 404 und 310 empfangen wurden, verschieden sind. Daher können Manipulationen, die an die Adressen der Anweisungen, die in den Schritten 401 und 307 verwendet werden, gerichtet sind, durch die Anwendung erkannt werden.
-
5 zeigt ein Nachrichtenfolgediagramm einer alternativen Ausführungsform ohne Verwenden einer zusätzlichen Neuabbildung beim Adressdecoder 302.
-
Eine Leseanweisung (Schritt 501)
Read (A)
ist an die Adresse A des Speichers 303 gerichtet und gibt Informationen data, die bei dieser Adresse A gespeichert sind, zurück (Schritt 502).
-
Dann wird eine Leseanweisung (Schritt 503)
Read (A*)
an eine Adresse A* des Speichers 303 gerichtet und gibt Informationen data*, die bei dieser Adresse A* gespeichert sind, zurück (Schritt 504).
-
Wenn sichergestellt wurde, dass die Adressen A und A* dieselben Informationen führen, kann ein Vergleich in einem Schritt 309 anzeigen, dass die Lesezugriffe in beiden Schritten 501 und 503 erfolgreich waren, weil data und data* identisch sind. Andernfalls kann eine Manipulation von Adresse A oder Adresse A* aufgetreten sein.
-
Diese Beispiele zeigen, dass z. B. die Anwendung 301 (oder eine weitere Funktionalität) sicherstellen kann, dass der Speicher 303 in einer fehlertoleranten Weise verwendet wird: Sämtliche Informationen data können zu einem Satz von Adressen A und A* geschrieben werden, wobei jede der Adressen A und A* Codeworte eines vorgegebenen Codes sein kann.
-
Beispiel: Verwenden einiger Adressen als ein einzelnes Codewort
-
Um zu vermeiden, dass eine Einzelbitmanipulation beide Adressen (A und A*) zum Adressbereich eines weiteren Peripheriegeräts verschiebt, kann der folgende Lösungsversuch verwendet werden.
-
Es ist festzuhalten, dass ein Peripheriegerät eine beliebige Einheit, z. B. eine Steuereinheit, ein Prozessor, ein Register(satz) oder ein Speicher sein, die eine bestimmte sichere Domäne definiert. Es ist häufig erforderlich, dass ein Adressraum einer ersten Domäne nicht mit den Adressraum einer weitere Domäne stört, insbesondere wenn die erste Domäne eine sichere Domäne ist. In einem solchen Beispiel kann es für weniger schädlich gehalten werden, wenn eine Anweisung, die an eine bestimmte Adresse einer sichere Domäne gerichtet ist, zu einer weiteren Adresse der sicheren Domäne umgeleitet wird. Allerdings wird es für problematisch gehalten, wenn ein Zugriff auf einen weniger sichere Adressraum auf einen sicheren Adressraum gerichtet ist, der dann Informationen aus dem sicheren Adressraum zurückgeben kann (was selbstverständlich vermieden werden sollte).
-
Logische Register R1, R2, ... können bei ursprünglichen Adressen A1, A2, ... bereitgestellt werden, wobei jede der ursprünglichen Adressen mindestens eine Redundanzadresse A1*, A2* usw. besitzen kann.
-
Die logischen Register können Register eines Peripheriegeräts, z. B. eines Prozessors, eines Controllers oder dergleichen sein. Die logischen Register können außerdem Teile eines physischen Speichers sein.
-
Als eine Möglichkeit kann mehr als eine Redundanzadresse für jede ursprüngliche Adresse (d. h. für jedes Register) bereitgestellt werden; daher kann die ursprüngliche Adresse A1 Redundanzadressen A1*, A1** usw. zugeordnet sein. Die folgenden Beispiele nehmen allerdings ein Paar von Adressen, d. h. eine ursprüngliche Adresse und eine Redundanzadresse, für jedes der Register an, d. h.:
- - R1: A1, A1*;
- - R2: A2, A2*;
- - R3: A3, A3* und
- - R4: A4, A4*.
-
Die Register R1 bis R4 können in Gruppen GA, GB gruppiert werden. Jede Gruppe umfasst Register einer bestimmten Speicherdomäne, z. B. eines bestimmten Peripheriegeräts, wie z. B. eines Prozessors.
-
Im hier bereitgestellten Beispiel kann mindestens eine der Gruppen GA und GB Registern eines sicheren Prozessors zugeordnet werden.
-
Eine Aufgabe eines Angriffs ist, dass mehrere Adressleitungsmanipulationen eine ursprüngliche Adresse A und ihre entsprechende Redundanzadresse A* zu einer Adresse eines Registers, das einer weiteren Gruppe angehört, bewegen.
-
Zum Beispiel umfasst
- - die Gruppe GA die Register
- - R1: A1, A1* und
- - R2: A2, A2* und
- - die Gruppe GB die Register
- - R3: A3, A3* und
- - R4: A4, A4*.
-
Ein Differenzvektor E zeigt eine schädliche Adressmanipulation an, derart, dass eine Adresse Ai zu einer fehlerhaften Adresse Ai' geändert wird, d. h.
der Differenzvektor E ein Gewicht wt besitzt, das
beträgt, wobei d das Hamming-Gewicht des Differenzvektors E bezeichnet, der einer maximalen Anzahl von Einzelbitfehlern (Notwendigkeiten, LFI-Stellen) entspricht, die der Angreifer einspeisen kann, um die Gegenmaßnahme zu überwinden.
-
Es ist festzuhalten, dass sich „+“ auf eine Bitweise Addition Modulo-2, d. h. eine exklusive ODER-Operation (die auch als EXOR bezeichnet wird), bezieht.
-
Ein Adresscodierungsschema wird derart verwendet, dass die folgenden Bedingungen gelten:
- - A1 + E ≠ A3 und A1* + E ≠ A3*,
- - A1 + E ≠ A4 und A1* + E ≠ A4*,
- - A2 + E ≠ A3 und A2* + E ≠ A3*, und
- - A2 + E ≠ A4 undA2* + E ≠ A4*.
-
Daher stellt die Codierung sicher, dass kein Adresspaar aus der Gruppe GA vorliegt, das durch eine Fehlereinspeisung E mit wt(E) ≤ d zu einem Adresspaar der Gruppe GB geändert werden kann.
-
Daher sind die Adresspaare (A1, A1*), (A3, A3*) und (A4, A4*) Codeworte eines vorgegebenen Codes. Dementsprechend sind die Adresspaare (A2, A2*), (A3, A3*) und (A4, A4*) Codeworte dieses Codes.
-
Ein geeigneter oder bevorzugter Code kann derart gewählt werden, dass der Angreifer gleichzeitig eine Bitleitung auf 0 und eine weitere Bitleitung auf 1 zwingen muss, was in einigen physischen Angriffsszenarios schwieriger sein kann, als zwei Bitleitungen auf entweder 0 oder 1 zu zwingen.
-
In einer derartigen Lösung ist keine zusätzliche Hardware für Paritätsbits erforderlich und das Sicherheitsniveau kann derart eingestellt werden, dass es mit dem Fehlermodell, das den Angreifer beschreibt, übereinstimmt.
-
Dieses Beispiel umfasst somit eine Kombination von
- - Registern, auf die über mehrere Adressen zugegriffen werden kann,
- - einer Gruppierung von Registern und
- - einer Auswahl eines Adresscodierungsschemas derart, dass ein Angreifer mehr als d - 1 Manipulationen benötigt, um den gewählten Code zu überwinden.
-
Gemäß dem obigen Beispiel sind die vier Register R1 bis R4 in den zwei Gruppen GA und GA wie folgt angeordnet:
- - GA (R1,R2) und
- - GB (R3,R4).
-
Ein beispielhafter Code wird mit einem beispielhaften Abstand verwendet, der d = 3 beträgt.
-
Als eine zusätzliche Anforderung sollten zwei Fehler auch eine wechselnde Polarität besitzen. Dies kann wie folgt ausgedrückt werden (Adressen sind als binäre Zeichenfolgen notiert):
- - Die Gruppe GA umfasst
- - das Register R1 mit
- - der ursprünglichen Adresse A1 = 0000 und
- - der Redundanzadresse A1* = 0001 und
- - das Register R2 mit
- - der ursprünglichen Adresse A2 = 0010 und
- - der Redundanzadresse A2* = 0011 und
- - die Gruppe GB umfasst
- - das Register R3 mit
- - der ursprünglichen Adresse A3 = 1101 und
- - der Redundanzadresse A3* = 1100 und
- - das Register R4 mit
- - der ursprünglichen Adresse A4 = 1111 und
- - der ursprünglichen Adresse A4* = 1110.
-
Das Register
R1 wird durch einen Differenzvektor
E = 1111, der vier Fehler einspeist, auf das Register
R4 abgebildet. In diesem Fall wird die Adresse
A1 auf die Adresse
A4 abgebildet und die Adresse
A1* wird auf die Adresse
A4* abgebildet (die Operation „+“ gibt die EXOR-Operation an):
-
Das Register
R1 wird durch einen Differenzvektor E = 1101, der drei Fehler einspeist, auf das Register
R3 abgebildet. Hier wird die Adresse
A1 auf die Adresse
A3 abgebildet und die Adresse
A1* wird auf die Adresse
A3* abgebildet:
-
Das Register
R2 wird durch einen Differenzvektor E = 1111, der vier Fehler einspeist, auf das Register
R3 abgebildet. In diesem Fall wird die Adresse
A2 auf die Adresse
A3 abgebildet und die Adresse
A2* wird auf die Adresse
A3* abgebildet:
-
Das Register
R2 wird durch einen Differenzvektor E = 1101, der drei Fehler einspeist, auf das Register
R4 abgebildet. Hier wird die Adresse
A2 auf die Adresse
A4 abgebildet und die Adresse
A2* wird auf die Adresse
A4* abgebildet:
-
Daher erfordert ein Angriff gemäß diesem Beispiel mindestens den Differenzvektor E = 1101, der drei Bitfehler enthält. Deshalb beträgt der Codeabstand in diesem Beispiel
-
Ein beliebiger Differenzvektor E, der lediglich zwei Bitfehler verwendet, würde nicht ausreichen, um eine Adresse der Gruppe GA zu einer Adresse der Gruppe GB umzuleiten.
-
In einer beispielhaften Ausführungsform kann ein Codeabstand von d ≥ 2 erreicht werden, indem ansteigende Adressen für Ai und absteigende (insbesondere nicht überlappende) Adressen für Ai* für beliebige Anzahlen von Registern in beliebigen Anzahlen von Gruppen verwendet werden.
-
In einem oder mehreren Beispielen können die hier beschriebenen Funktionen mindestens teilweise in Hardware wie z. B. bestimmten Hardware-Komponenten oder einem Prozessor implementiert werden. Im Allgemeinen können die Techniken in Hardware, Prozessoren, Software und/oder Firmware implementiert werden. Bei Software-Implementierung können die Funktionen al seine oder mehrere Anweisungen oder Code in einem computerlesbaren Medium gespeichert oder auf es übertragen und durch eine hardwarebasierte Verarbeitungseinheit ausgeführt werden. Computerlesbare Medien können computerlesbare Speichermedien enthalten, die einem materiellen Medium wie z. B. Datenspeichermedien oder Kommunikationsmedien, die ein Medium enthalten, das das Übertragen eines Computerprogramms von einem Ort zu einem weiteren z. B. gemäß einem Kommunikationsprotokoll ermöglicht, entsprechen. Auf diese Weise können computerlesbare Medien im Allgemeinen (1) materiellen computerlesbaren Speichermedien, die nichttransitorisch sind, oder (2) einem Kommunikationsmedium wie z. B. einem Signal oder einer Trägerwelle entsprechen. Datenspeichermedien können beliebige verfügbare Medien sein, auf die durch einen oder mehrere Computer oder einen oder mehrere Prozessoren zugegriffen werden kann, um Anweisungen, Code und/oder Datenstrukturen zur Implementierung der in dieser Offenlegung beschriebenen Techniken abzurufen. Ein Computerprogrammprodukt kann ein computerlesbares Medium enthalten.
-
Beispielhaft und nicht einschränkend kann ein derartiges computerlesbares Speichermedium einen RAM, einen ROM, einen EEPROM, eine CD-ROM oder einen weiteren optischen Plattenspeicher, einen magnetischen Plattenspeicher, einen Flash-Speicher oder ein beliebiges weitere Medium, das verwendet werden kann, um das gewünschte Programm in der Form von Anweisungen oder Datenstrukturen zu speichern, und auf das durch einen Computer zugegriffen werden kann, umfassen. Außerdem wird eine beliebige Verbindung ordnungsgemäß als ein computerlesbares Medium, d. h. ein computerlesbares Übertragungsmedium, bezeichnet. Zum Beispiel werden dann, wenn Anweisungen von einer Internetseite, einem Server oder einer entfernten Quelle unter Verwendung eines Koaxialkabels, eines faseroptischen Kabels, eines verdrillten Doppelkabels, einer digitalen Teilnehmerleitung (DSL) oder drahtlosen Technologien wie z. B. Infrarot, Funk und Mikrowellen übertragen werden, das Koaxialkabel, das faseroptische Kabel, das verdrillte Doppelkabel, die DSL oder die drahtlosen Technologien wie z. B. Infrarot, Funk und Mikrowellen in die Definition des Mediums einbezogen. Selbstverständlich enthalten die computerlesbaren Speichermedien und Datenspeichermedien dennoch nicht Verbindungen, Trägerwellen, Signale und weitere transiente Medien, sondern sind stattdessen auf nicht transiente, materille Speichermedien gerichtet. Plattenspeicher wie hierin verwendet enthalten Compact-Disc (CD), Laser-Disc, Optical-Disc, Digital-Versatile-Disc (DVD), Floppy-Disk und Blu-Ray-Disc, wobei Disks Daten typischerweise magnetische wiedergeben, während Discs Daten optisch mit Lasern wiedergeben. Kombinationen der oben genannten sollen auch im Umfang computerlesbarer Medien enthalten sein.
-
Anweisungen können durch einen oder mehrere Prozessoren wie z. B. eine oder mehrere Zentraleinheiten (CPU), digitale Signalprozessoren (DSPs), allgemein verwendbare Mikroprozessoren, anwendungsspezifische integrierte Schaltungen (ASICs), feldprogrammierbare Gate-Anordnungen (FPGAs) oder weitere vergleichbare integrierte oder diskrete Logikschaltungsanordnungen ausgeführt werden. Entsprechend kann sich der Begriff „Prozessor“ wie hierin verwendet auf eine der vorhergehenden Strukturen oder eine beliebige weitere Struktur, die zur Implementierung der hier beschriebenen Techniken geeignet ist, beziehen. Zusätzlich kann die hierin beschriebene Funktionalität in einigen Aspekten in fest zugeordneten Hardware- und/oder Software-Modulen, die zum Codieren und Decodieren konfiguriert sind, bereitgestellt werden oder in einen kombinierten Codec eingearbeitet werden. Außerdem könnten die Techniken vollständig in einer oder mehreren Schaltungen oder Logikelementen implementiert werden.
-
Die Techniken dieser Offenlegung können in einer Vielzahl von Eirichtungen oder Vorrichtungen implementiert werden, die ein drahtloses Handgerät, eine Integrierte Schaltung (IC) oder eine Gruppe von ICs (z. B. einen Chipsatz) enthalten. Verschiedene Komponenten, Module oder Einheiten werden in dieser Offenlegung beschrieben, um funktionelle Aspekte von Einrichtungen, die konfiguriert sind, die offenbarten Techniken durchzuführen, hervorzuheben, erfordern jedoch nicht notwendigerweise eine Realisierung durch verschiedene Hardware-Einheiten. Vielmehr können wie oben beschrieben verschiedene Einheiten in einer einzelnen Hardware-Einheit kombiniert oder durch eine Sammlung interoperativer Hardware-Einheiten, die einen oder mehrere Prozessoren wie oben beschrieben in Verbindung mit geeigneter Software und/oder Firmware enthalten, bereitgestellt werden.
-
Obwohl verschiedene beispielhafte Ausführungsformen der Erfindung offenbart wurden, wird für Fachleute deutlich werden, dass verschiedene Änderungen und Modifikationen vorgenommen werden können, die einige der Vorteile der Erfindung erreichen werden, ohne vom Geist und Umfang der Erfindung abzuweichen. Es wird für die Fachwelt deutlich werden, dass weitere Komponenten, die dieselben Funktionen durchführen, geeignet substituiert werden können. Selbstverständlich können Bestandteile, die in Bezug auf eine bestimmte Figur erläutert werden, mit Bestandteilen weiterer Figuren kombiniert werden, selbst in den Fällen, in denn dies nicht ausdrücklich erwähnt wurde. Ferner können die Verfahren der Erfindung entweder in reinen Software-Implementierungen unter Verwendung der geeigneten Prozessorbefehle oder in hybriden Implementierungen, die eine Kombination von Hardware-Logik und Software-Logik verwenden, um dieselben Ergebnisse zu erzielen, verwirklicht werden. Derartige Modifikationen des Erfindungsgedankens sollen durch die angehängten Ansprüche abgedeckt sein.