DE102018112816A1 - Adresscodierter Zugriff auf Speicher - Google Patents

Adresscodierter Zugriff auf Speicher Download PDF

Info

Publication number
DE102018112816A1
DE102018112816A1 DE102018112816.9A DE102018112816A DE102018112816A1 DE 102018112816 A1 DE102018112816 A1 DE 102018112816A1 DE 102018112816 A DE102018112816 A DE 102018112816A DE 102018112816 A1 DE102018112816 A1 DE 102018112816A1
Authority
DE
Germany
Prior art keywords
address
memory
addresses
code
original
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE102018112816.9A
Other languages
English (en)
Inventor
Berndt Gammel
Gerd Dirscherl
Bernd Meyer
Steffen Sonnekalb
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Infineon Technologies AG
Original Assignee
Infineon Technologies AG
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Infineon Technologies AG filed Critical Infineon Technologies AG
Priority to DE102018112816.9A priority Critical patent/DE102018112816A1/de
Priority to US16/422,911 priority patent/US11086796B2/en
Priority to CN201910457470.3A priority patent/CN110543790B/zh
Publication of DE102018112816A1 publication Critical patent/DE102018112816A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • G06F12/1425Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/71Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/566Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/78Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/82Protecting input, output or interconnection devices
    • G06F21/85Protecting input, output or interconnection devices interconnection devices, e.g. bus-connected or in-line devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/062Securing storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1052Security improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/034Test or assess a computer or a system

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Human Computer Interaction (AREA)
  • Mathematical Physics (AREA)
  • Storage Device Security (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

Es wird ein Verfahren bereitgestellt, um auf einen Speicher über mindestens eine Adresse zuzugreifen, wobei die mindestens eine Adresse ein Codewort eines Codes umfasst. Außerdem wird eine entsprechende Einrichtung vorgeschlagen.

Description

  • 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. Ai' = Ai + E ,  wobei
    Figure DE102018112816A1_0001
    der Differenzvektor E ein Gewicht wt besitzt, das wt ( E ) d
    Figure DE102018112816A1_0002
    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): A1 + E = 0000 + 1111 = 1111 = A4 ;  und
    Figure DE102018112816A1_0003
    A1* + E = 0001 + 1111 = 1110 = A4* .
    Figure DE102018112816A1_0004
  • 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: A1 + E = 0000 + 1101 = 1101 = A3 ;  und
    Figure DE102018112816A1_0005
    A1* + E = 0001 + 1101 = 1100 = A3* .
    Figure DE102018112816A1_0006
  • 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: A2 + E = 0010 + 1111 = 1101 = A3 ;  und
    Figure DE102018112816A1_0007
    A2* + E = 0011 + 1111 = 1100 = A3* .
    Figure DE102018112816A1_0008
  • 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: A2 + E = 0010 + 1101 = 1111 = A4 ;  und
    Figure DE102018112816A1_0009
    A2* + E = 0011 + 1101 = 1110 = A4* .
    Figure DE102018112816A1_0010
  • 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 d = max wt ( E ) = 3.
    Figure DE102018112816A1_0011
  • 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.

Claims (19)

  1. Verfahren, um auf einen Speicher über mindestens eine Adresse zuzugreifen, - bei dem die mindestens eine Adresse ein Codewort eines Codes umfasst.
  2. Verfahren nach Anspruch 1, - bei dem eine Anweisung, die einer Adresse zugeordnet ist, erhalten wird, - bei dem geprüft wird, ob die Adresse ein Codewort ist, - bei dem dann, wenn die Adresse ein Codewort des Codes ist, die Anweisung ausgeführt wird, - bei dem dann, wenn die Adresse kein Codewort des Codes ist, eine vorgegebene Aktion ausgelöst wird.
  3. Verfahren nach Anspruch 2, bei dem die Anweisung erhalten und von einem Adressdecoder geprüft wird.
  4. Verfahren nach Anspruch 1, - bei dem die mindestens eine Adresse einen Satz von mindestens zwei Adressen umfasst, wobei der Satz von mindestens zwei Adressen eine ursprüngliche Adresse und mindestens eine Redundanzadresse umfasst, - bei dem die ursprüngliche Adresse und die mindestens eine Redundanzadresse Codeworte des Codes sind, - bei dem eine ursprüngliche Anweisung an die ursprüngliche Adresse gerichtet ist und mindestens eine zusätzliche Anweisung an die mindestens eine Redundanzadresse gerichtet ist, - bei dem Daten, die von der ursprünglichen Anweisung und/oder von der mindestens einen zusätzlichen Anweisung erhalten werden, verglichen werden, um zu bestimmen, ob es eine unerwünschte Änderung einer der Adressen gab.
  5. Verfahren nach Anspruch 4, bei dem die ursprüngliche Adresse und die mindestens eine Redundanzadresse zu demselben physischen Wert, der in dem Speicher gespeichert ist, verweist oder zu verschiedenen physischen Werten verweist, die derselben Adresse entsprechen, oder wobei mindestens einer der physischen Werte, der durch die mindestens eine Redundanzadresse referenziert wird, invertiert ist.
  6. Verfahren nach einem der Ansprüche 4 oder 5, bei dem der Vergleich von Daten einer der folgenden sein kann: - ein Vergleich von Daten, die von der ursprünglichen Adresse gelesen werden, mit Daten, die von der mindestens einen Redundanzadresse gelesen werden; - ein Vergleich von Daten, die an die ursprüngliche Adresse geschrieben werden sollen, mit Daten, die von der mindestens einen Redundanzadresse gelesen werden oder umgekehrt.
  7. Verfahren nach einem der Ansprüche 4 bis 6, bei dem der Vergleich von Daten die folgenden Ergebnisse liefern kann: - 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.
  8. Verfahren nach einem der vorhergehenden Ansprüche 3 bis 7, bei dem die Anweisung eine Leseanweisung, eine Schreibanweisung oder eine Prüfanweisung ist.
  9. Verfahren nach Anspruch 1, - bei dem der Speicher einen ersten Speicherraum und einen zweiten Speicherraum umfasst; - bei dem ein Teil des ersten Speicherraums durch mehrere Adressen erreichbar ist; - bei dem ein Teil des zweiten Speicherraums durch mehrere Adressen erreichbar ist, - bei dem eine Kombination der mehreren Adressen für den Teil des ersten Speicherraums und eine Kombination der mehreren Adressen für irgendeinen Teil des zweiten Speicherraums Codeworte des Codes sind.
  10. Verfahren nach Anspruch 9, - bei dem zwei Adressen pro Teil des ersten Speicherraums sowie zwei Adressen pro Teil des zweiten Speicherraums verwendet werden, wobei die zwei Adressen eine ursprüngliche Adresse und eine Redundanzadresse umfassen; - bei dem der Code einen Codeabstand d aufweist, der mindestens zwei beträgt; - bei dem der erste Speicherraum und/oder der zweite Speicherraum wie folgt verwendet werden: die ursprünglichen Adressen sind in einem ersten Adressraum angeordnet und die Redundanzadressen sind in einem zweiten Adressraum angeordnet.
  11. Verfahren nach Anspruch 10, bei dem der erste Adressraum und der zweite Adressraum nicht überlappend ausgeführt sind.
  12. Verfahren nach einem der Ansprüche 10 oder 11, bei dem der erste Adressraum ansteigende Adressen verwendet und der zweite Adressraum absteigende Adressen verwendet oder umgekehrt.
  13. Verfahren nach einem der vorhergehenden Ansprüche, bei dem der Speicher einen kontinuierlichen oder einen diskontinuierlichen Speicherraum umfasst.
  14. Verfahren nach einem der vorhergehenden Ansprüche, bei dem der Speicher mindestens einen physischen Speicherchip umfasst.
  15. Verfahren nach einem der vorhergehenden Ansprüche, bei dem der Speicher Register eines Prozessors, einen ASIC oder einen Controller umfasst.
  16. Vorrichtung, die eingerichtet ist, auf einen Speicher über mindestens eine Adresse zuzugreifen, wobei die mindestens eine Adresse ein Codewort eines Codes umfasst.
  17. Vorrichtung, die Mittel umfasst, um auf einen Speicher über mindestens eine Adresse zuzugreifen, wobei die mindestens eine Adresse ein Codewort eines Codes umfasst.
  18. Computerprogrammprodukt, das direkt in einen Speicher einer digitalen Verarbeitungseinrichtung geladen werden kann und das Softwarecodeabschnitte enthält, um die Schritte des Verfahrens nach einem der Ansprüche 1 bis 15 durchzuführen.
  19. Computerlesbares Medium, das computerausführbare Anweisungen enthält, die ausgelegt sind, zu bewirken, dass ein Computersystem die Schritte des Verfahrens nach einem der Ansprüche 1 bis 15 durchführt.
DE102018112816.9A 2018-05-29 2018-05-29 Adresscodierter Zugriff auf Speicher Pending DE102018112816A1 (de)

Priority Applications (3)

Application Number Priority Date Filing Date Title
DE102018112816.9A DE102018112816A1 (de) 2018-05-29 2018-05-29 Adresscodierter Zugriff auf Speicher
US16/422,911 US11086796B2 (en) 2018-05-29 2019-05-24 Address-coded access towards memory
CN201910457470.3A CN110543790B (zh) 2018-05-29 2019-05-29 访问存储器的方法、装置、设备和计算机可读介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
DE102018112816.9A DE102018112816A1 (de) 2018-05-29 2018-05-29 Adresscodierter Zugriff auf Speicher

Publications (1)

Publication Number Publication Date
DE102018112816A1 true DE102018112816A1 (de) 2019-12-05

Family

ID=68576001

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102018112816.9A Pending DE102018112816A1 (de) 2018-05-29 2018-05-29 Adresscodierter Zugriff auf Speicher

Country Status (3)

Country Link
US (1) US11086796B2 (de)
CN (1) CN110543790B (de)
DE (1) DE102018112816A1 (de)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112379843B (zh) * 2020-11-23 2022-09-23 上海儒竞智控技术有限公司 Eeprom数据处理方法、***、存储介质及终端

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090235113A1 (en) * 2006-05-18 2009-09-17 Rambus Inc. Memory error detection
US20110246857A1 (en) * 2010-04-02 2011-10-06 Samsung Electronics Co., Ltd. Memory system and method
US20150378630A1 (en) * 2013-02-22 2015-12-31 Zte Corporation Method and Device of Data Protection, Storage Equipment

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
NL8100650A (nl) * 1981-02-11 1982-09-01 Philips Nv Inrichting voor het corrigeren van pulsvervorming bij homochrone datatransmissie.
US4602275A (en) * 1984-03-19 1986-07-22 Rca Corporation Television memory system
US7203890B1 (en) * 2004-06-16 2007-04-10 Azul Systems, Inc. Address error detection by merging a polynomial-based CRC code of address bits with two nibbles of data or data ECC bits
DE102004033387B4 (de) * 2004-07-09 2008-06-05 Infineon Technologies Ag Digitale RAM-Speicherschaltung mit erweiterter Befehlsstruktur
US8560899B2 (en) * 2010-07-30 2013-10-15 Infineon Technologies Ag Safe memory storage by internal operation verification
CN102203740B (zh) * 2011-05-27 2013-06-05 华为技术有限公司 数据处理方法、装置及***
US9136873B2 (en) * 2013-03-11 2015-09-15 Intel Corporation Reduced uncorrectable memory errors
DE102013215055B4 (de) * 2013-07-31 2021-01-28 Infineon Technologies Ag Schaltungsanordnung, Vorrichtung, Verfahren und Computerprogramm mit modifiziertem Fehlersyndrom zur Fehlererkennung von permanenten Fehlern in Speichern
US20150046772A1 (en) * 2013-08-06 2015-02-12 Sandisk Technologies Inc. Method and device for error correcting code (ecc) error handling
US9582354B2 (en) * 2014-01-28 2017-02-28 Infineon Technologies Ag Apparatus and method for improving data storage by data inversion
US9749319B2 (en) * 2015-05-20 2017-08-29 Google Inc. Address validation using signatures
US10437483B2 (en) * 2015-12-17 2019-10-08 Samsung Electronics Co., Ltd. Computing system with communication mechanism and method of operation thereof
KR20210157862A (ko) * 2020-06-22 2021-12-29 에스케이하이닉스 주식회사 메모리, 메모리 시스템 및 메모리 시스템의 동작 방법
KR20230030795A (ko) * 2021-08-26 2023-03-07 삼성전자주식회사 메모리 컨트롤러 및 이를 포함하는 메모리 장치

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090235113A1 (en) * 2006-05-18 2009-09-17 Rambus Inc. Memory error detection
US20110246857A1 (en) * 2010-04-02 2011-10-06 Samsung Electronics Co., Ltd. Memory system and method
US20150378630A1 (en) * 2013-02-22 2015-12-31 Zte Corporation Method and Device of Data Protection, Storage Equipment

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
SCHNEIDER, H.-J. (Hg.): Lexikon Informatik und Datenverarbeitung. R. Oldenbourg Verlag. München, Wien. 1998. Seiten 151-155 *

Also Published As

Publication number Publication date
US20190370190A1 (en) 2019-12-05
CN110543790A (zh) 2019-12-06
CN110543790B (zh) 2023-12-12
US11086796B2 (en) 2021-08-10

Similar Documents

Publication Publication Date Title
DE102013215055B4 (de) Schaltungsanordnung, Vorrichtung, Verfahren und Computerprogramm mit modifiziertem Fehlersyndrom zur Fehlererkennung von permanenten Fehlern in Speichern
DE102011108933B4 (de) Sichere Speicherung durch interne Betriebssicherstellung
DE102018123697A1 (de) Vorrichtungsbasierte Anti-Schadsoftware
DE3128740C2 (de)
DE102013211077A1 (de) Verfahren zum Testen eines Speichers und Speichersystem
DE102016107718A1 (de) Auslesen von Fehlervektoren aus einer Speichereinheit
DE2225841B2 (de) Verfahren und Anordnung zur systematischen Fehlerprüfung eines monolithischen Halbleiterspeichers
DE102017119065B4 (de) Aktualisieren eines Speichers
DE102011011333B4 (de) Lesen in Peripheriegeräte und schreiben aus Peripheriegeräten mit zeitlich getrennter, redundanter Prozessorausführung
DE102017126911A1 (de) Verknüpfter Speichersystem- und Hostsystem-Fehlerkorrekturcode
DE112011104830T5 (de) Ein Verfahren zum Sicherstellen der Programmkorrektheit unter Verwendung von feingranularem spekulativem Hardwareausführen
DE102018112816A1 (de) Adresscodierter Zugriff auf Speicher
DE102019101503A1 (de) Echtzeit-Stack-Schutz
DE102018130297A1 (de) Arbeitsnachweis-Konzept für ein Fahrzeug
EP3378006B1 (de) Verfahren zum laden eines sicheren speicherabbilds eines mikrocontrollers und anordnung mit einem mikrocontroller
DE112012006736T5 (de) Empfangen eines Update-Moduls durch Zugreifen auf eine Netzwerkstelle
DE102015114721B4 (de) Verfahren, Gerät und System zur Datenverarbeitung
DE102017124805B4 (de) Speicheranordnung und verfahren zum zwischenspeichern von speicherinhalten
DE102013108073B4 (de) Datenverarbeitungsanordnung und verfahren zur datenverarbeitung
DE102017108288B4 (de) Aktualisieren eines Speichers
WO2016050857A1 (de) Verfahren zur datenverarbeitung zum ermitteln, ob bei einer ausführung eines programms ein fehler aufgetreten ist und datenverarbeitungsanordnungen zum erzeugen von programm-code
DE102015211458A1 (de) Verfahren und Vorrichtung zum Absichern einer Programmzählerstruktur eines Prozessorsystems und zum Überwachen der Behandlung einer Unterbrechungsanfrage
DE112018002029T5 (de) Register fehlerhafter bits für einen speicher
DE102019122806A1 (de) Kryptografische Vorrichtung
DE102018102386A1 (de) Verfahren zum Senden von Daten, Verfahren zum Empfangen von Daten, Master-, Slave-, und Master-Slave-System

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R016 Response to examination communication