DE102014114157A1 - Verfahren zur Datenverarbeitung zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist und Datenverarbeitungsanordnungen zum Erzeugen von Programm-Code - Google Patents

Verfahren zur Datenverarbeitung zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist und Datenverarbeitungsanordnungen zum Erzeugen von Programm-Code Download PDF

Info

Publication number
DE102014114157A1
DE102014114157A1 DE102014114157.1A DE102014114157A DE102014114157A1 DE 102014114157 A1 DE102014114157 A1 DE 102014114157A1 DE 102014114157 A DE102014114157 A DE 102014114157A DE 102014114157 A1 DE102014114157 A1 DE 102014114157A1
Authority
DE
Germany
Prior art keywords
encoded
coded
numerical values
multiplier
program
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.)
Granted
Application number
DE102014114157.1A
Other languages
English (en)
Other versions
DE102014114157B4 (de
Inventor
Christof Fetzer
Dmitrii Kuvaiskii
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.)
Technische Universitaet Dresden
Original Assignee
Technische Universitaet Dresden
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 Technische Universitaet Dresden filed Critical Technische Universitaet Dresden
Priority to DE102014114157.1A priority Critical patent/DE102014114157B4/de
Priority to PCT/EP2015/072585 priority patent/WO2016050857A1/de
Publication of DE102014114157A1 publication Critical patent/DE102014114157A1/de
Application granted granted Critical
Publication of DE102014114157B4 publication Critical patent/DE102014114157B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/085Error detection or correction by redundancy in data representation, e.g. by using checking codes using codes with inherent redundancy, e.g. n-out-of-m codes

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Detection And Correction Of Errors (AREA)

Abstract

In einem Ausführungsbeispiel wird ein Verfahren zur Datenverarbeitung zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, bereitgestellt. Das Verfahren weist ein Ausführen von codiertem Programm-Code; ein Ausführen mindestens einer Anweisung des codierten Programm-Codes basierend auf ersten codierten ein oder mehreren Zahlenwerten, die mittels eines arithmetischen Codes aufweisend einen ersten Multiplikator codiert sind und ein oder mehreren Operanden der mindestens einen Anweisung entsprechen; und ein Ausführen der mindestens einen Anweisung basierend auf zweiten codierten ein oder mehreren Zahlenwerten, die mittels des arithmetischen Codes aufweisend einen zweiten Multiplikator codiert sind und den ein oder mehreren Operanden der mindestens einen Anweisung entsprechen, auf. Ferner weist das Verfahren ein Ermitteln auf, ob bei der Ausführung des Programms ein Fehler aufgetreten ist, basierend auf ersten ein oder mehreren Ergebniswerten des Ausführens der mindestens einen Anweisung auf den ersten codierten ein oder mehreren Zahlenwerten und dem ersten Multiplikator und/oder basierend auf zweiten ein oder mehreren Ergebniswerten des Ausführens der mindestens einen Anweisung auf den zweiten codierten ein oder mehreren Zahlenwerten und dem zweiten Multiplikator.

Description

  • Die Erfindung betrifft Verfahren zur Datenverarbeitung zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, Verfahren zum erzeugen von Programm-Code, Datenverarbeitungsanordnungen zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, und Datenverarbeitungsanordnungen zum Erzeugen von Programm-Code.
  • Es ist zu erwarten, dass Standard-Hardware oder Massen-Hardware (engl.: „Commodity Hardware”) immer weniger zuverlässig wird aufgrund der kontinuierlich steigenden Integrationsdichte und schrumpfenden Strukturbreiten von neuen Generationen von integrierten Schaltkreisen.
  • Um Hardwarefehler bei Ausführung von Software zu erkennen, kann die Software auf mehreren Hardwarekomponenten ausgeführt werden und die Ergebnisse können verglichen werden. Zum Beispiel kann die Software jeweils auf zwei oder drei Hardwarekomponenten ausgeführt werden. Eine Korrektur von aufgetretenen Fehlern ist jedoch erst ab einem Ausführen auf drei Hardware-Komponenten möglich. Weiterhin ist es kostspielig, die mehreren redundanten Hardwarekomponenten bereitzustellen, z. B. auf einem Chip bereitzustellen. Weiterhin schützt Diversität allein nur unzureichend gegen permanente Fehler in der Hardware, wenn diese alle Hardwarekomponenten betreffen. Gerade permanente Fehler werden in der Zukunft häufiger auftreten, weil Hardware bedingt durch schrumpfende Strukturen schneller altert.
  • Ein anderer Ansatz ist es, einen Prozessor in eine unsichere und eine sichere Prozessorkomponente aufzuteilen. Die unsichere Prozessorkomponente sendet ihre berechneten Ergebnisse zum Überprüfen zu der sicheren Prozessorkomponente, die das Ergebnis, wenn korrekt, ausgibt und andernfalls ein erneutes Berechnen veranlasst.
  • Ferner ist es möglich, einen Arbeitsspeicher, einen Prozessor-Cache oder Register dediziert zu schützen.
  • Hardware-basierte Ansätze verursachen jedoch hohe Kosten, selbst wenn nur ein Teil der Hardware geschützt wird, weil zusätzlicher Platz auf dem Chip benötigt wird. Daher werden diese Ansätze nur in High-End Systemen eingesetzt, jedoch nicht in Standard-Hardware oder Massen-Hardware.
  • Aufgrund ökonomischer Faktoren gibt es jedoch Bestrebungen, immer mehr Standard-Hardware mit ungenügender Fehler-Erkennung auch in kritischen Anwendungen zu benutzen. Zudem können nicht erkannte Hardwarefehler bei modernen Computern zu sichtbaren Fehlern der Software führen. Hieraus ergibt sich die Notwendigkeit, Hardwarefehler bei der Ausführung in Software zu erkennen.
  • Algorithmus-basierte Fehler-Toleranz und selbstüberprüfende Software nutzt Invarianten zum Überprüfen der Validität der erzeugten Ergebnisse. Es existieren oft keine passenden Invarianten, die eine gute Fehler-Erkennungs-Möglichkeit bereitstellen.
  • Andere Software-Ansätze arbeiten mit replizierter Ausführung und Vergleich (und Abstimmung) über die erhaltenen Ergebnisse. Die geschützte Software wird während oder vor dem Compilieren geändert. Einige Ansätze duplizieren einzelne Instruktionen innerhalb eines Ausführungsstranges. Andere verwenden Duplikate des ganzen Programms unter Verwendung mehrerer Ausführungsstränge. Bei manchen Ansätzen müssen Anweisungen von Hand eingefügt werden.
  • Jedoch weisen generische Software-Ansätze eine niedrige Effizienz auf oder haben spezielle Anforderungen an die Hardware, z. B. dass der Speicher mittels Fehler-korrigierender Codes (error correcting codes, ECC) geschützt ist oder, dass zwei Prozessorkerne zur parallelen Ausführung von Threads verfügbar sind. Andere Software-Ansätze haben gegenteilige Voraussetzungen und sind z. B. für ein Ausführen mit mehreren Threads ungeeignet. Diese Anforderungen schränken die Verwendungsmöglichkeiten generischer Software-Ansätze ein.
  • Generische Software-Ansätze zum Ausführen von Programmen auf verteilten Hardware-Systemen, z. B. Ansätze zum sicheren Austausch von Nachrichten mittels Replikation der Nachrichten, verdoppeln den benötigten Speicherplatz oder benötigen mehr als dreimal so viele Maschinen wie die Anzahl der gleichzeitig erkannten Fehler.
  • Eine weitere mögliche Lösung zum Detektieren von Hardware-Fehlern in Software ist die Verwendung von arithmetischen Codes, z. B. AN-Codes, der im Folgenden noch näher beschrieben wird. Ein arithmetischer Code weist die Eigenschaft auf, dass bei Anwendung einer arithmetischen Operation auf ein gültiges Codewort ein gültiges Codewort resultiert. Mit der Hilfe von arithmetischen Codes können codierte Programme erzeugt werden. Diese Codes detektieren Hardware-Fehler unabhängig von dem tatsächlichen Fehler-Modus der zugrundeliegenden Hardware. Jedoch haben Messungen gezeigt, dass mit AN-Codes oder mit anderen Codes, die keinen großen Aufwand erfordern, z. B. mit Residuum-Codes, codierte Programme immer noch zu hohe Raten von nicht-erkannten stillen Daten-Fehlern (englisch: „Silent Data Corruption”, SDC) enthalten.
  • Diese hohen Raten von unerkannten SDCs werden durch unzureichenden Schutz des Kontrollflusses (oder Ablaufflusses) und Datenflusses durch AN-Codes verursacht. Mit ANB- und ANBD-Codes werden höhere Fehler-Erkennungs-Raten erzielt.
  • Jedoch erhöht sich die Laufzeit des Ausführens eines mit AN-, ANB- oder ANBD-Codes codierten Programms erheblich. Beispielsweise kann sich die Laufzeit eines mit AN-Codes codierten Programms um bis das 100-fache verlangsamen. Die Laufzeit eines mit ANB- oder ANBD-Codes codierten Programms kann sich sogar um bis das 300-fache verlangsamen.
  • Der Erfindung liegt das Problem zu Grunde, Datenverarbeitungsanordnungen und Verfahren bereitzustellen zum zuverlässigen und Rechenzeit sparenden Erkennen von Fehlern in einem Programm-Ablauf.
  • Das Problem wird durch Verfahren und Datenverarbeitungsanordnungen mit den Merkmalen gemäß den unabhängigen Patentansprüchen gelöst.
  • Weiterbildungen ergeben sich aus den abhängigen Ansprüchen.
  • In verschiedenen Ausführungsbeispielen kann ein Verfahren zur Datenverarbeitung zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, ein Ausführen von codiertem Programm-Code, ein Ausführen mindestens einer Anweisung des codierten Programm-Codes basierend auf ersten codierten ein oder mehreren Zahlenwerten, die mittels eines arithmetischen Codes aufweisend einen ersten Multiplikator codiert sind und ein oder mehreren Operanden der mindestens einen Anweisung entsprechen, und ein Ausführen der mindestens einen Anweisung basierend auf zweiten codierten ein oder mehreren Zahlenwerten, die mittels des arithmetischen Codes aufweisend einen zweiten Multiplikator codiert sind und den ein oder mehreren Operanden der mindestens einen Anweisung entsprechen, aufweisen. Das Verfahren kann ein Ermitteln aufweisen, ob bei der Ausführung des Programms ein Fehler aufgetreten ist, basierend auf ersten ein oder mehreren Ergebniswerten des Ausführens der mindestens einen Anweisung auf den ersten codierten ein oder mehreren Zahlenwerten und dem ersten Multiplikator und/oder basierend auf zweiten ein oder mehreren Ergebniswerten des Ausführens der mindestens einen Anweisung auf den zweiten codierten ein oder mehreren Zahlenwerten und dem zweiten Multiplikator.
  • Anschaulich können sowohl Daten als auch die Anweisungen, die auf diesen Daten ausgeführt werden, dupliziert bzw. vervielfacht werden. Dabei können beide bzw. alle Kopien der Daten codiert werden. Beispielsweise können die Datenkopien mit jeweils verschiedenen Parametern codiert werden. Dadurch kann eine hohe Fehlerabdeckung erzielt werden. Es können beliebig viele Fehler detektiert werden, z. B. beliebig viele transiente und permanente Fehler, z. B. transiente und permanente Hardwarefehler. Aufgrund der redundanten codierten Kopien der Daten und der redundant ausgeführten Anweisungen kann verglichen mit einem herkömmlichen Verfahren zusätzlicher Schutz vor permanenten und transienten Fehlern gewährleistet werden. Es kann eine hohe Datenintegrität gewährleistet werden und das obige Verfahren kann sich gut für Anwendungen eignen, bei denen Datenintegrität besonders wichtig ist.
  • In verschiedenen Ausführungsbeispielen kann das Verfahren ein Verknüpfen, z. B. ein Addieren, der ersten bzw. zweiten ein oder mehreren Ergebniswerte des Ausführens einer Anweisung mit einem ersten bzw. zweiten akkumulierten Ergebniswert aufweisen. Der erste bzw. zweite akkumulierte Ergebniswert kann jeweils gespeichert werden, z. B. in einem ersten bzw. zweiten Akkumulator, z. B. in jeweils einem Register.
  • Ferner kann das Ermitteln, ob bei der Ausführung des Programms ein Fehler aufgetreten ist, auf dem ersten akkumulierten Ergebniswert und dem ersten Multiplikator und/oder auf dem zweiten akkumulierten Ergebniswert und dem zweiten Multiplikator basieren.
  • Zu Beginn der Programm-Ausführung können das erste und zweite akkumulierte Ergebnis initialisiert werden. Ferner können das erste und zweite akkumulierte Ergebnis initialisiert werden, nachdem ermittelt worden ist, ob ein Fehler aufgetreten ist und bevor weitere erste bzw. zweite codierte ein oder mehrere Ergebniswerte mit dem ersten bzw. zweiten akkumulierten Ergebniswert verknüpft werden.
  • In verschiedenen Ausführungsbeispielen kann das Verfahren ferner ein Ermitteln einer ersten Speicheradressen-Signatur basierend auf einer ersten Speicheradresse, ein Verknüpfen der ersten codierten ein oder mehreren Zahlenwerte mit der ersten Speicheradressen-Signatur mittels einer ausschließlichen oder (XOR)-Operation, und ein Speichern der ersten verknüpften codierten ein oder mehreren Zahlenwerte in einem Speicher an der ersten Speicheradresse, aufweisen. Das Verfahren kann ein Ermitteln einer zweiten Speicheradressen-Signatur basierend auf einer zweiten Speicheradresse, ein Verknüpfen der zweiten codierten ein oder mehreren Zahlenwerte mit der zweiten Speicheradressen-Signatur mittels einer ausschließlichen oder (XOR)-Operation, und ein Speichern der zweiten verknüpften codierten ein oder mehreren Zahlenwerte in einem Speicher an der zweiten Speicheradresse, aufweisen.
  • Weiterhin kann das Verfahren ein Laden der ersten codierten ein oder mehreren Zahlenwerte aus dem Speicher an der ersten Speicheradresse, ein Verknüpfen der geladenen ersten ein oder mehreren Zahlenwerte mit der ersten Speicheradressen-Signatur mittels der ausschließlichen oder (XOR)-Operation, ein Laden der zweiten codierten ein oder mehreren Zahlenwerte aus dem Speicher an der zweiten Speicheradresse, und ein Verknüpfen der geladenen zweiten ein oder mehreren Zahlenwerte mit der zweiten Speicheradressen-Signatur mittels der ausschließlichen oder (XOR)-Operation, aufweisen.
  • Ferner kann das Ermitteln, ob bei der Ausführung des Programms ein Fehler aufgetreten ist, ein Ermitteln aufweisen, ob bei dem Laden der ersten oder zweiten codierten ein oder mehreren Zahlenwerte ein Fehler aufgetreten ist, basierend auf den geladenen ersten und zweiten codierten ein oder mehreren Zahlenwerten, dem ersten Multiplikator und dem zweiten Multiplikator. Ferner können die geladenen ersten bzw. zweiten ein oder mehreren codierten Zahlenwerte mit dem ersten bzw. zweiten akkumulierten Ergebniswert verknüpft werden, z. B. addiert werden.
  • Anschaulich können Daten, bevor sie gespeichert werden, mit einer Speicheradressen-Signatur verknüpft werden, die beim Laden der Daten überprüft werden kann. Somit können betreffend die zu detektierenden Fehler ähnliche Garantien gegeben werden wie bei einer ANB-Codierung, jedoch ohne als arithmetischen Code einen ANB-Code zu verwenden, z. B. können ausgetauschte Operanden detektiert werden.
  • Die erste Speicheradressen-Signatur kann auf einer ersten Basisspeicheradresse und/oder der ersten Speicheradresse basiert sein. Die zweite Speicheradressen-Signatur kann auf einer zweiten Basisspeicheradresse und/oder der zweiten Speicheradresse basiert sein.
  • Beispielsweise können Daten, die in einem Zusammenhang miteinander stehen, z. B. Daten eines Feldes oder Puffers, mit einer Basisadressen-Signatur des Feldes und/oder mit einer Speicheradressen-Signatur der jeweiligen Speicherzelle innerhalb des Feldes, verknüpft werden. Dabei kann jedes Feld seine eigene Speicheradressen-Signatur aufweisen. Schreibzugriffe, die von dem Programm für einen Puffer ausgeführt werden sollen, aber tatsächlich in den Speicherbereich eines anderen Puffers schreiben, können zu einer Signatur führen, die für den anderen Puffer nicht erwartetet wird. Dies kann beim Laden der Daten leicht detektiert werden. Somit gewährleistet das obige Verfahren eine hohe Datenintegrität und eignet sich besonders gut für Anwendungen, bei denen Datenintegrität besonders wichtig ist. Selbst wenn ein Angreifer alle Multiplikatoren und Adressen kennen würde, ist die Wahrscheinlichkeit gering, dass der andere, angegriffene Puffer das richtige Codewort aufweist.
  • In verschiedenen Ausführungsbeispielen kann das Verfahren ein Decodieren eines ersten und zweiten codierten Zahlenwertes zu einem decodierten Zahlenwert mittels einer Differenz des codierten ersten und zweiten Zahlenwertes, und ein Auswählen des ersten Multiplikators und des zweiten Multiplikators derart, dass ein Decodieren des codierten ersten und zweiten Zahlenwertes zu einem decodierten Zahlenwert mittels einer Differenz des codierten ersten und zweiten Zahlenwertes möglich ist, aufweisen.
  • Weiterhin kann das Decodieren des codierten ersten und zweiten Zahlenwertes zu einem decodierten Zahlenwert ein Verschieben der Ziffern des Ergebniswertes der Differenz des codierten ersten und zweiten Zahlenwertes in Richtung der Ziffernposition mit dem niedrigsten Wert aufweisen, wobei der erste Multiplikator und der zweite Multiplikator derart ausgewählt werden, dass das Decodieren des ersten und zweiten codierten Zahlenwertes zu einem decodierten Zahlenwert mittels der Differenz des ersten und zweiten codierten Zahlenwertes gefolgt von dem Verschieben der Ziffern möglich ist.
  • Beim Decodieren der Daten können nur Subtraktions- und Verschiebeoperationen, z. B. Bit-Verschiebungen, ausgeführt werden. Dadurch ist obige Codierung besonders effizient und kann weniger rechenintensive Operationen benötigen als herkömmliche arithmetische Codierungen, z. B. herkömmliche Codierungen mittels AN-, ANB-, oder ANBD-Codes, die zum Decodieren teure Divisionen verwenden. Gleichzeitig können ähnliche Garantien gewährleistet werden, wie bei einer herkömmlichen Codierung. Beispielsweise können bei einer redundant ausgeführten Codierung mittels eines AN-Codes mehr Fehler detektiert werden als bei einer herkömmlichen AN-Codierung und gleichzeitig kann aufgrund der besonders effizienten Decodierung Rechenzeit gespart werden. Beispielsweise kann eine Diskrepanz oder ein Fehler detektiert werden, wenn bei einer der redundanten Ausführungen eine falsche Operation verwendet wird und bei einer anderen Ausführung die richtige Operation verwendet wird. Bei der obigen redundant ausgeführten Codierung können ähnlich viele Fehler detektiert werden als bei einer herkömmlichen ANB-Codierung, ohne eine ANB-Codierung zu verwenden.
  • Der erste Multiplikator kann gleich dem zweiten Multiplikator subtrahiert um eine Basiszahl hoch einer Exponentenzahl sein.
  • Die Basiszahl kann gleich zwei sein und das Verschieben der Ziffern kann ein Bit-Verschieben der Ziffern um die Exponentenzahl sein.
  • Unterschiedliche Teile eines Systems, z. B. unterschiedliche Computer-Programme oder unterschiedliche Teile eines Computer-Programms, können mit unterschiedlichen ersten und zweiten Multiplikatoren codiert werden, z. B. derart mit ersten und zweiten Multiplikatoren codiert werden, dass sich jeweils ein anderer Wert der Differenz des ersten und des zweiten Multiplikators ergibt. Anders ausgedrückt können unterschiedliche Teile des Systems derart mit ersten und zweiten Multiplikatoren codiert werden, dass sich unterschiedliche Exponentenzahlen ergeben. Beispielsweise können unterschiedliche Teile des Systems mit ersten und zweiten Multiplikatoren codiert werden, indem unterschiedliche Exponentenzahlen gewählt werden.
  • Auf diese Weise kann leicht detektiert werden, wenn ein Teil des Systems einen anderen Teil des Systems überschreibt. Ein Decodieren der codierten Daten würde mit hoher Wahrscheinlichkeit zu falschen decodierten Daten führen, was leicht detektiert werden kann.
  • In verschiedenen Ausführungsbeispielen kann das Verfahren ein Korrigieren eines fehlerhaften decodierten Zahlenwertes mittels eines codierten ersten und zweiten Zahlenwertes aufweisen, die jeweils dem decodierten Zahlenwert entsprechen.
  • Somit können Fehler nicht nur detektiert sondern auch korrigiert werden.
  • In verschiedenen Ausführungsbeispielen kann der arithmetische Code ein arithmetischer Code mit oder ohne Signaturen sein.
  • Bei einer redundant ausgeführten Codierung mittels eines arithmetischen Codes ohne Signaturen können bei höherer Performanz ähnliche viele Fehler detektiert werden als bei einer herkömmlichen Codierung mittels eines arithmetischen Codes mit Signaturen. Es können Hardwarefehler detektiert werden, die in Prozessoren, z. B. in der zentralen Verarbeitungseinheit, und im Speicher, z. B. im Arbeitsspeicher, auftreten können.
  • Der arithmetische Code kann mindestens einen Code aufweisen aus einer Gruppe von Codes bestehend aus: einem AN-Code, einem ANB-Code, einem AND-Code, einem ANDmem-Code, einem ANBD-Code und einem ANBDmem-Code. In bevorzugten Ausführungsbeispielen weist der arithmetische Code den AN-Code auf.
  • In verschiedenen Ausführungsbeispielen kann das Ermitteln, ob bei der Ausführung des Programms ein Fehler aufgetreten ist, mittels eines Überprüfungs-Schaltkreises durchgeführt werden.
  • Ferner kann das Verfahren ein Übermitteln der ersten codierten ein oder mehreren Ergebniswerte, des ersten Multiplikators, der zweiten codierten ein oder mehreren Ergebniswerte und des zweiten Multiplikators von dem Programm an den Überprüfungs-Schaltkreis aufweisen.
  • In verschiedenen Ausführungsbeispielen kann das Verfahren mittels eines Überprüfungs-Schaltkreises ausgeführt werden.
  • Der Überprüfungs-Schaltkreis kann außerhalb des Programms implementiert sein.
  • Weiterhin kann der Überprüfungs-Schaltkreis in sicherer Hardware implementiert sein.
  • Der Überprüfungs-Schaltkreis kann auch durch Redundanz abgesichert sein.
  • Ferner kann der Überprüfungs-Schaltkreis durch arithmetische Codes abgesichert sein.
  • In verschiedenen Ausführungsbeispielen kann ein Verfahren zum Erzeugen von Programm-Code zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, ein Erzeugen eines Programm-Code-Abschnittes zum Codieren von ein oder mehreren Operanden mindestens einer Anweisung des Programms in erste codierte ein oder mehrere Zahlenwerte mittels eines arithmetischen Codes aufweisend einen ersten Multiplikator, ein Erzeugen eines Programm-Code-Abschnittes zum Codieren der ein oder mehreren Operanden der mindestens einen Anweisung in zweite ein oder mehrere codierte Zahlenwerte mittels des arithmetischen Codes aufweisend einen zweiten Multiplikator, ein Erzeugen eines Programm-Code-Abschnittes zum Ausführen der mindestens einen Anweisung auf den ersten codierten ein oder mehreren Zahlenwerten und ein Erzeugen eines Programm-Code-Abschnittes zum Ausführen der mindestens einen Anweisung auf den zweiten codierten ein oder mehreren Zahlenwerten aufweisen. Das Verfahren kann ein Erzeugen eines Programm-Code-Abschnittes zum Ermitteln aufweisen, ob bei einer Ausführung des Programm-Codes ein Fehler aufgetreten ist, basierend auf ersten ein oder mehreren Ergebniswerten des Ausführens der mindestens einen Anweisung auf den ersten codierten ein oder mehreren Zahlenwerten und dem ersten Multiplikator und/oder basierend auf zweiten ein oder mehreren Ergebniswerten des Ausführens der mindestens einen Anweisung auf den zweiten codierten ein oder mehreren Zahlenwerten und dem zweiten Multiplikator.
  • Somit kann der Programm-Code zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, z. B. der codierte Programm-Code, automatisch erzeugt werden. Alternativ kann der Programm-Code manuell codiert werden, beispielsweise kann der zu schützende und codierte Programm-Code so klein wie möglich gehalten werden und manuell codiert werden.
  • Somit kann ein effizienter Schutz auf Software-Ebene bereitgestellt werden, der ein Korrumpieren der Daten verhindern kann.
  • In verschiedenen Ausführungsbeispielen kann das Verfahren ein Erzeugen eines Programm-Code-Abschnittes zum Ermitteln einer ersten Speicheradressen-Signatur basierend auf einer ersten Speicheradresse, ein Erzeugen eines Programm-Code-Abschnittes zum Verknüpfen der ersten codierten ein oder mehreren Zahlenwerte mit der ersten Speicheradressen-Signatur mittels einer ausschließlichen oder (XOR)-Operation und ein Erzeugen eines Programm-Code-Abschnittes zum Speichern der ersten verknüpften codierten ein oder mehreren Zahlenwerte in einem Speicher an der ersten Speicheradresse aufweisen. Weiterhin kann das Verfahren ein Erzeugen eines Programm-Code-Abschnittes zum Ermitteln einer zweiten Speicheradressen-Signatur basierend auf einer zweiten Speicheradresse, ein Erzeugen eines Programm-Code-Abschnittes zum Verknüpfen der zweiten codierten ein oder mehreren Zahlenwerte mit der zweiten Speicheradressen-Signatur mittels einer ausschließlichen oder (XOR)-Operation, und ein Erzeugen eines Programm-Code-Abschnittes zum Speichern der zweiten verknüpften codierten ein oder mehreren Zahlenwerte in einem Speicher an der zweiten Speicheradresse aufweisen.
  • In verschiedenen Ausführungsbeispielen kann das Verfahren ein Erzeugen eines Programm-Code-Abschnittes zum Laden der ersten codierten ein oder mehreren Zahlenwerte aus dem Speicher an der ersten Speicheradresse, ein Erzeugen eines Programm-Code-Abschnittes zum Verknüpfen der geladenen ersten ein oder mehreren Zahlenwerte mit der ersten Speicheradressen-Signatur mittels der ausschließlichen oder (XOR)-Operation, ein Erzeugen eines Programm-Code-Abschnittes zum Laden der zweiten codierten ein oder mehreren Zahlenwerte aus dem Speicher an der zweiten Speicheradresse, und ein Erzeugen eines Programm-Code-Abschnittes zum Verknüpfen der geladenen zweiten ein oder mehreren Zahlenwerte mit der zweiten Speicheradressen-Signatur mittels der ausschließlichen oder (XOR)-Operation aufweisen.
  • Weiterhin kann beim Erzeugen eines Programm-Code-Abschnittes zum Ermitteln, ob bei der Ausführung des Programm-Codes ein Fehler aufgetreten ist, ein Programm-Code-Abschnitt zum Ermitteln erzeugt werden, ob bei dem Laden der ersten oder zweiten codierten ein oder mehreren Zahlenwerte ein Fehler aufgetreten ist, basierend auf den geladenen ersten und zweiten codierten ein oder mehreren Zahlenwerten, dem ersten Multiplikator und dem zweiten Multiplikator.
  • Der Programm-Code-Abschnitt zum Ermitteln der ersten Speicheradressen-Signatur kann ferner derart erzeugt werden, dass die erste Speicheradressen-Signatur auf einer ersten Basisspeicheradresse und/oder der ersten Speicheradresse basiert ist, und der Programm-Code-Abschnitt zum Ermitteln der zweiten Speicheradressen-Signatur kann derart erzeugt werden, dass die zweite Speicheradressen-Signatur auf einer zweiten Basisspeicheradresse und/oder der zweiten Speicheradresse basiert ist.
  • In verschiedenen Ausführungsbeispielen kann das Verfahren ein Erzeugen eines Programm-Code-Abschnittes zum Decodieren eines ersten und zweiten codierten Zahlenwertes zu einem decodierten Zahlenwert mittels einer Differenz des codierten ersten und zweiten Zahlenwertes und ein Erzeugen des Programm-Code-Abschnittes zum Auswählen des ersten Multiplikators und des zweiten Multiplikators derart, dass ein Decodieren des codierten ersten und zweiten Zahlenwertes zu einem decodierten Zahlenwert mittels einer Differenz des codierten ersten und zweiten Zahlenwertes möglich ist, aufweisen.
  • Ferner kann beim Erzeugen des Programm-Code-Abschnittes zum Decodieren des codierten ersten und zweiten Zahlenwertes zu einem decodierten Zahlenwert ein Programm-Code-Abschnitt zum Verschieben der Ziffern des Ergebniswertes der Differenz des codierten ersten und zweiten Zahlenwertes in Richtung der Ziffernposition mit dem niedrigsten Wert erzeugt werden. Der Programm-Code-Abschnitt zum Auswählen des ersten Multiplikators und des zweiten Multiplikators kann derart erzeugt werden, dass der erste Multiplikator und der zweite Multiplikator derart ausgewählt werden, dass das Decodieren des ersten und zweiten codierten Zahlenwertes zu einem decodierten Zahlenwert mittels der Differenz des ersten und zweiten codierten Zahlenwertes gefolgt von dem Verschieben der Ziffern möglich ist.
  • Weiterhin kann das Verfahren ein Erzeugen eines Programm-Code-Abschnittes zum Korrigieren eines fehlerhaften decodierten Zahlenwertes mittels eines codierten ersten und zweiten Zahlenwertes aufweisen, die jeweils dem decodierten Zahlenwert entsprechen.
  • In verschiedenen Ausführungsbeispielen kann der arithmetische Code ein arithmetischer Code mit oder ohne Signaturen sein.
  • Der arithmetische Code kann mindestens einen Code aufweisen aus einer Gruppe von Codes bestehend aus: einem AN-Code, einem ANB-Code, einem AND-Code, einem ANDmem-Code, einem ANBD-Code, und einem ANBDmem-Code. In vorteilhaften Ausführungsbeispielen weist der arithmetische Code den AN-Code auf.
  • In verschiedenen Ausführungsbeispielen kann eine Datenverarbeitungsanordnung zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, einen Schaltkreis zum Ausführen von codiertem Programm-Code, einen ersten Anweisung-Ausführungs-Schaltkreis zum Ausführen mindestens einer Anweisung des codierten Programm-Codes basierend auf ersten codierten ein oder mehreren Zahlenwerten, die mittels eines arithmetischen Codes aufweisend einen ersten Multiplikator codiert sind und ein oder mehreren Operanden der mindestens einen Anweisung entsprechen, und einen zweiten Anweisung-Ausführung-Schaltkreis zum Ausführen der mindestens einen Anweisung basierend auf zweiten codierten ein oder mehreren Zahlenwerten, die mittels des arithmetischen Codes aufweisend einen zweiten Multiplikator codiert sind und den ein oder mehreren Operanden der mindestens einen Anweisung entsprechen, aufweisen. Die Datenverarbeitungsvorrichtung kann einen Ermittlungs-Schaltkreis zum Ermitteln aufweisen, ob bei der Ausführung des Programms ein Fehler aufgetreten ist, basierend auf ersten ein oder mehreren Ergebniswerten des Ausführens der mindestens einen Anweisung auf den ersten codierten ein oder mehreren Zahlenwerten und dem ersten Multiplikator und/oder basierend auf zweiten ein oder mehreren Ergebniswerten des Ausführens der mindestens einen Anweisung auf den zweiten codierten ein oder mehreren Zahlenwerten und dem zweiten Multiplikator.
  • In verschiedenen Ausführungsbeispielen kann die Datenverarbeitungsanordnung zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, einen Empfangs-Schaltkreis zum Empfangen von ersten codierten ein oder mehreren Ergebniswerten, eines ersten Multiplikators, zweiten codierten ein oder mehreren Ergebniswerten und eines zweiten Multiplikators von dem Programm in einem Überprüfungs-Schaltkreis außerhalb des Programms aufweisen. Der erste codierte Ergebniswert kann in dem Programm beim Ausführen zumindest einer Anweisung basierend auf ersten codierten ein oder mehreren Zahlenwerten ermittelt worden sein, wobei die ersten codierten ein oder mehreren Zahlenwerte ein oder mehreren Operanden der zumindest einen Anweisung entsprechen und mittels eines arithmetischen Codes aufweisend einen ersten Multiplikator codiert sind. Der zweite codierte Ergebniswert kann in dem Programm beim Ausführen zumindest einer Anweisung basierend auf zweiten codierten ein oder mehreren Zahlenwerten ermittelt worden sein, wobei die zweiten codierten ein oder mehreren Zahlenwerte ein oder mehreren Operanden der zumindest einen Anweisung entsprechen und mittels des arithmetischen Codes aufweisend einen zweiten Multiplikator codiert sind. Die Datenverarbeitungsanordnung kann einen Ermittlungs-Schaltkreis aufweisen zum Ermitteln in dem Überprüfungs-Schaltkreis, ob bei der Ausführung des Programms ein Fehler aufgetreten ist, basierend auf den ersten codierten ein oder mehreren Ergebniswerten und dem ersten Multiplikator und/oder basierend auf den zweiten ein oder mehreren Ergebniswerten und dem zweiten Multiplikator.
  • In verschiedenen Ausführungsbeispielen kann die Datenverarbeitungsanordnung zum Erzeugen von codierten Programm-Code zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist einen ersten Codierung-Programm-Code-Abschnitt-Erzeugungs-Schaltkreis zum Erzeugen eines Programm-Code-Abschnittes zum Codieren von ein oder mehreren Operanden mindestens einer Anweisung des Programms in erste codierte ein oder mehrere Zahlenwerte mittels eines arithmetischen Codes aufweisend einen ersten Multiplikator, einen zweiten Codierung-Programm-Code-Abschnitt-Erzeugungs-Schaltkreis zum Erzeugen eines Programm-Code-Abschnittes zum Codieren der ein oder mehreren Operanden der mindestens einen Anweisung in zweite ein oder mehrere codierte Zahlenwerte mittels des arithmetischen Codes aufweisend einen zweiten Multiplikator, einen ersten Anweisung-Ausführung-Programm-Code-Abschnitt-Erzeugungs-Schaltkreis zum Erzeugen eines Programm-Code-Abschnittes zum Ausführen der mindestens einen Anweisung auf den ersten codierten ein oder mehreren Zahlenwerten und einen zweiten Anweisung-Ausführung-Programm-Code-Abschnitt-Erzeugungs-Schaltkreis zum Erzeugen eines Programm-Code-Abschnittes zum Ausführen der mindestens einen Anweisung auf den zweiten codierten ein oder mehreren Zahlenwerten aufweisen. Die Datenverarbeitungsanordnung kann einen Ermittlung-Programm-Code-Abschnitt-Erzeugungs-Schaltkreis aufweisen zum Erzeugen eines Programm-Code-Abschnittes zum Ermitteln, ob bei einer Ausführung des Programm-Codes ein Fehler aufgetreten ist, basierend auf ersten ein oder mehreren Ergebniswerten des Ausführens der mindestens einen Anweisung auf den ersten codierten ein oder mehreren Zahlenwerten und dem ersten Multiplikator und/oder basierend auf zweiten ein oder mehreren Ergebniswerten des Ausführens der mindestens einen Anweisung auf den zweiten codierten ein oder mehreren Zahlenwerten und dem zweiten Multiplikator.
  • In verschiedenen Ausführungsbeispielen kann ein Computerprogrammelement, wenn es von einem Prozessor ausgeführt wird, bewirken, dass der Prozessor ein Verfahren zur Datenverarbeitung gemäß einem der obigen Ausführungsbeispiele ausführt.
  • Ausführungsbeispiele sind in den Figuren dargestellt und werden im Weiteren näher erläutert.
  • 1 zeigt ein Flussdiagram, das ein Verfahren zur Datenverarbeitung zum Ermitteln, ob bei einer Ausführung eines Programme ein Fehler aufgetreten ist, gemäß einem Ausführungsbeispiel illustriert.
  • 2 zeigt ein Flussdiagram, das ein Verfahren zur Datenverarbeitung zum Ermitteln, ob bei einer Ausführung eines Programme ein Fehler aufgetreten ist, gemäß einem weiteren Ausführungsbeispiel illustriert.
  • 3 zeigt ein Flussdiagram, das ein Verfahren zum Erzeugen von Programm-Code zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, gemäß einem Ausführungsbeispiel illustriert.
  • 4 zeigt eine Datenverarbeitungsanordnung zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, gemäß einem Ausführungsbeispiel.
  • 5 zeigt eine Datenverarbeitungsanordnung zum Ermitteln, ob in einer Programmausführung ein Fehler aufgetreten ist, gemäß einem weiteren Ausführungsbeispiel.
  • 6 zeigt eine Datenverarbeitungsanordnung zum Erzeugen von Programm-Code zum Ermitteln, ob in einer Programmausführung ein Fehler aufgetreten ist, gemäß einem Ausführungsbeispiel.
  • 7 zeigt eine Datenverarbeitungsanordnung gemäß einem Ausführungsbeispiel.
  • 8 zeigt eine Darstellung gemäß einem Ausführungsbeispiel, welche das Codieren und Ausführen eines Programms sowie das Decodieren und Überprüfen des codierten Ergebnisses illustriert.
  • 9 zeigt eine Darstellung gemäß einem Ausführungsbeispiel, welche einen Speicher mit zwei Puffern illustriert.
  • 10 zeigt eine Datenverarbeitungsanordnung gemäß einem Ausführungsbeispiel.
  • 1 zeigt ein Flussdiagramm 100, das ein Verfahren zur Datenverarbeitung zum Ermitteln, ob bei einer Ausführung eines Programms oder anders ausgedrückt in einer Ausführung eines Programms ein Fehler aufgetreten ist, gemäß einem Ausführungsbeispiel illustriert.
  • In 102 kann ein codierter Programm-Code ausgeführt werden. Der codierte Programm-Code kann zumindest einem Code-Abschnitt des auszuführenden Programms entsprechen. In 104 kann mindestens eine Anweisung des codierten Programm-Codes basierend auf ersten codierten ein oder mehreren Zahlenwerten ausgeführt werden, die mittels eines arithmetischen Codes aufweisend einen ersten Multiplikator codiert sind und ein oder mehreren Operanden der mindestens einen Anweisung entsprechen.
  • In 106 kann die mindestens eine Anweisung basierend auf zweiten codierten ein oder mehreren Zahlenwerten ausgeführt werden, die mittels des arithmetischen Codes aufweisend einen zweiten Multiplikator codiert sind und ebenfalls den ein oder mehreren Operanden der mindestens einen Anweisung entsprechen.
  • In anderen Worten kann die Anweisung dupliziert werden und dabei zuerst auf den ersten codierten ein oder mehreren Zahlenwerten ausgeführt werden und danach auf den zweiten codierten ein oder mehreren Zahlenwerten ausgeführt werden oder umgekehrt. Die Anweisung kann auch dupliziert werden und parallel auf den ersten und auf den zweiten codierten ein oder mehreren Zahlenwerten ausgeführt werden.
  • In 108 kann ermittelt werden, ob bei der Ausführung des Programms ein Fehler aufgetreten ist, basierend auf ersten ein oder mehreren Ergebniswerten des Ausführens der mindestens einen Anweisung auf den ersten codierten ein oder mehreren Zahlenwerten und dem ersten Multiplikator und/oder basierend auf zweiten ein oder mehreren Ergebniswerten des Ausführens der mindestens einen Anweisung auf den zweiten codierten ein oder mehreren Zahlenwerten und dem zweiten Multiplikator.
  • Anschaulich können alle Eingaben und Konstanten, also Daten oder Zahlenwerte, des ursprünglichen Programms in codierte Daten überführt werden. Die ursprünglichen Daten können dabei in gültige Code-Worte überführt werden und auf Informationsebene kann Redundanz hinzugefügt werden. Die Daten können nicht nur codiert werden, sondern dabei auch dupliziert werden. Alle Anweisungen, die auf diesen Daten ausgeführt werden, können ebenfalls dupliziert werden. Beispielsweise kann die Summe zweier Eingaben als zwei Summen codiert werden, wobei jede Summe auf einer codierten Kopie der Eingaben ausgeführt wird. Alle Anweisungen können auf den codierten Daten ausgeführt werden, ohne die Daten zwischendurch zu decodieren. Beispielsweise kann eine Addition zwei codierte Zahlenwerte addieren, wobei ein codiertes Ergebnis resultiert, das codiert weiter verarbeitet werden kann. Wenn beim Ausführen einer Anweisung auf codierten Eingaben ein Fehler auftritt kann das resultierende codierte Ergebnis mit hoher Wahrscheinlichkeit ein ungültiges Codewort sein, was leicht detektiert werden kann.
  • In verschiedenen Ausführungsbeispielen kann jeweils eine Anweisung des codierten Programm-Codes auf den ersten codierten ein oder mehreren Zahlenwerten und auf den zweiten codierten ein oder mehreren Zahlenwerten ausgeführt werden. Bevor eine nächste Anweisung des codierten Programm-Codes ausgeführt wird, kann für die ersten und/oder die zweiten Ergebnisse des Ausführens der einen Anweisung ermittelt werden, ob ein Fehler aufgetreten ist.
  • In verschiedenen Ausführungsbeispielen kann nach dem Ausführen von mehreren Anweisungen auf den ersten codierten ein oder mehreren Zahlenwerten und auf den zweiten codierten ein oder mehreren Zahlenwerten ermittelt werden, ob ein Fehler aufgetreten ist. Es muss also nicht nach jedem duplizierten Ausführen einer Anweisung überprüft werden, ob ein Fehler aufgetreten ist. Dennoch können Fehler, die in mindestens einer beliebigen Anweisung aufgetreten sind, die auf codierten Daten redundant ausgeführt wurde, detektiert werden.
  • In verschiedenen Ausführungsbeispielen kann jeweils wiederholt nach dem Ausführen von ein oder mehreren Anweisungen auf den ersten codierten ein oder mehreren Zahlenwerten und auf den zweiten codierten ein oder mehreren Zahlenwerten ermittelt werden, ob ein Fehler aufgetreten ist. Es können also ein oder mehrere duplizierte Anweisungen ausgeführt werden, dann kann ermittelt werden, ob ein Fehler aufgetreten ist und dann können weitere ein oder mehrere duplizierte Anweisungen ausgeführt werden, für die ermittelt werden kann, ob ein Fehler aufgetreten ist.
  • Die ersten bzw. zweiten ein oder mehreren Ergebniswerte des Ausführens einer Anweisung können mit einem ersten bzw. zweiten akkumulierten Ergebniswert verknüpft werden, z. B. addiert werden. Der erste bzw. zweite akkumulierte Ergebniswert kann jeweils gespeichert werden, z. B. in einem ersten bzw. zweiten Akkumulator, z. B. in jeweils einem Register.
  • Ferner kann das Ermitteln, ob bei der Ausführung des Programms ein Fehler aufgetreten ist, auf dem ersten akkumulierten Ergebniswert und dem ersten Multiplikator und/oder auf dem zweiten akkumulierten Ergebniswert und dem zweiten Multiplikator basieren.
  • Zu Beginn der Programm-Ausführung können das erste und zweite akkumulierte Ergebnis initialisiert werden. Ferner können das erste und zweite akkumulierte Ergebnis initialisiert werden, nachdem ermittelt worden ist, ob ein Fehler aufgetreten ist und bevor weitere erste bzw. zweite codierte ein oder mehrere Ergebniswerte mit dem ersten bzw. zweiten akkumulierten Ergebniswert verknüpft werden.
  • Die ersten und die zweiten ein oder mehreren Ergebniswerte des Ausführens einer Anweisung können die ersten und die zweiten codierten ein oder mehreren Zahlenwerte für das Ausführen einer anderen Anweisung sein. In diesem Fall können die ersten codierten ein oder mehreren Zahlenwerte der einen und der anderen ersten Anweisung denselben ersten Multiplikator aufweisen und die zweiten codierten ein oder mehreren Zahlenwerte der einen und der anderen zweiten Anweisung können denselben zweiten Multiplikator aufweisen.
  • Die ersten bzw. zweiten ein oder mehreren Zahlenwerte verschiedener Anweisungen können jeweils denselben ersten bzw. zweiten Multiplikator aufweisen.
  • Die ersten bzw. zweiten ein oder mehreren Zahlenwerte verschiedener Anweisungen können jeweils einen verschiedenen ersten bzw. zweiten Multiplikator aufweisen.
  • In verschiedenen Ausführungsbeispielen können neben (in anderen Worten parallel zu), zwischen, vor oder nach dem Ausführen der ein oder mehreren duplizierten Anweisungen des codierten Programm-Codes auch Anweisungen des Programms ausgeführt werden, die nicht codiert sind.
  • Alle Anweisungen bzw. alle sicherheitskritischen Anweisungen können als duplizierte Anweisungen des codierten Programm-Codes ausgeführt werden. In verschiedenen Ausführungsbeispielen können alle Anweisungen des codierten Programm-Codes auf codierten Daten ausgeführt werden, ohne die codierten Daten zwischen den Ausführungen zu decodieren oder erneut zu codieren.
  • Ferner kann eine erste Speicheradressen-Signatur basierend auf einer ersten Speicheradresse ermittelt werden. Eine zweite Speicheradressen-Signatur kann basierend auf einer zweiten Speicheradresse ermittelt werden. Die erste oder die zweite Speicheradressen-Signatur können bekannt sein.
  • Weiterhin können die ersten codierten ein oder mehreren Zahlenwerte mit der ersten Speicheradressen-Signatur mittels einer selbstinversen Operation, z. B. einer ausschließlichen oder (XOR)-Operation, verknüpft werden. Die derart verknüpften ersten codierten ein oder mehreren Zahlenwerte können in einem Speicher an der ersten Speicheradresse gespeichert werden, beispielsweise in einem Register, einem Cache-Speicher oder einem Arbeitsspeicher. Ferner können die zweiten codierten ein oder mehreren Zahlenwerte mit der zweiten Speicheradressen-Signatur mittels der selbstinversen Funktion, z. B. der ausschließlichen oder (XOR)-Operation, verknüpft werden. Auch die derart verknüpften zweiten codierten ein oder mehreren Zahlenwerte können in einem Speicher an der zweiten Speicheradresse gespeichert werden.
  • Anschaulich können Daten, bevor sie gespeichert werden, mit einer Speicheradressen-Signatur verknüpft werden, die beim Laden der Daten überprüft werden kann.
  • Die ersten und/oder zweiten ein oder mehreren Ergebniswerte können analog wie oben für die codierten Zahlenwerte beschrieben gespeichert werden.
  • Ferner können nur die ersten oder nur die zweiten codierten ein oder mehreren Zahlenwerte oder nur die ersten oder nur die zweiten ein oder mehreren Ergebniswerte wie oben beschrieben gespeichert werden.
  • Weiterhin können nur ein oder mehrere Werte der ersten bzw. der zweiten codierten ein oder mehreren Zahlenwerte oder nur ein oder mehrere Werte der ersten bzw. der zweiten ein oder mehreren Ergebniswerte wie oben beschrieben gespeichert werden.
  • In verschiedenen Ausführungsbeispielen können die ersten codierten ein oder mehreren Zahlenwerte aus dem Speicher an der ersten Speicheradresse geladen werden. Die geladenen ersten codierten ein oder mehreren Zahlenwerte können mit der ersten Speicheradressen-Signatur mittels einer selbstinversen Funktion, z. B. der ausschließlichen oder (XOR)-Operation, verknüpft werden. Die zweiten codierten ein oder mehreren Zahlenwerte können aus dem Speicher an der zweiten Speicheradresse geladen werden. Die geladenen zweiten codierten ein oder mehreren Zahlenwerte können mit der zweiten Speicheradressen-Signatur mittels der selbstinversen Funktion, z. B. der ausschließlichen oder (XOR)-Operation, verknüpft werden.
  • In verschiedenen Ausführungsbeispielen kann das Ermitteln, ob bei der Ausführung des Programms ein Fehler aufgetreten ist, ferner ein Ermitteln aufweisen, ob bei dem Laden der ersten oder zweiten codierten ein oder mehreren Zahlenwerte ein Fehler aufgetreten ist, basierend auf den geladenen ersten und zweiten codierten ein oder mehreren Zahlenwerten, dem ersten Multiplikator und dem zweiten Multiplikator. Ferner können die geladenen ersten bzw. zweiten ein oder mehreren codierten Zahlenwerte mit dem ersten bzw. zweiten akkumulierten Ergebniswert verknüpft werden, z. B. addiert werden.
  • Die erste Speicheradressen-Signatur kann auf einer ersten Basisspeicheradresse und/oder der ersten Speicheradresse basiert sein. Die erste Basisspeicheradresse kann einem ersten Speicherbereich eindeutig zugeordnet sein.
  • Ferner kann die zweite Speicheradressen-Signatur auf einer zweiten Basisspeicheradresse und/oder der zweiten Speicheradresse basiert sein. Die zweite Basisspeicheradresse kann einem zweiten Speicherbereich eindeutig zugeordnet sein.
  • Die erste Basisspeicheradresse kann gleich der zweiten Basisspeicheradresse sein, z. B. wenn die ersten codierten Zahlenwerte und die zweiten codierten Zahlenwerte in demselben Speicherbereich gespeichert werden.
  • Weiterhin kann die erste Basisspeicheradresse von der zweiten Basisspeicheradresse verschieden sein, z. B. wenn die ersten codierten Zahlenwerte und die zweiten codierten Zahlenwerte in verschiedenen, logisch voneinander getrennten Speicherbereichen gespeichert werden.
  • Weitere erste codierte Zahlenwerte können in einem Speicherbereich gespeichert werden, dem eine weitere erste Basisadresse zugeordnet ist.
  • Weitere zweite codierte Zahlenwerte können in einem Speicherbereich gespeichert werden, dem eine weitere zweite Basisadresse zugeordnet ist.
  • Ferner kann es ein oder mehrere Speicherbereiche geben.
  • Daten, die in einem Zusammenhang miteinander stehen, können in einem Speicherbereich, z. B. einem Feld oder Puffer, gespeichert werden, indem sie mit einer Basisadressen-Signatur des Feldes und/oder mit einer Speicheradressen-Signatur der jeweiligen Speicherzelle innerhalb des Feldes verknüpft werden.
  • In verschiedenen Ausführungsbeispielen kann eine Basisspeicheradresse einen ersten Speicherbereich markieren, beispielsweise die Startadresse eines ersten Puffers markieren. Eine andere Basisspeicheradresse kann einen zweiten Speicherbereich markieren, beispielsweise die Startadresse eines zweiten Puffers markieren. In dieser Ausführungsform kann, wie später näher beschrieben wird, detektiert werden, wenn codierte ein oder mehrere Zahlenwerte beim Speichern andere codierte ein oder mehrere Zahlenwerte überschreiben oder umgekehrt.
  • Es können jeweils verschiedenen Puffern verschiedene Basisadressen-Signaturen zugeordnet werden, wobei die Basisadressen-Signatur auf die Basisadresse des jeweiligen Puffers basiert ist. Das Verknüpfen eines zu speichernden Werts mit der Basisadressen-Signatur mittels einer z. B. ausschließlichen oder (XOR)-Operation ermöglicht es, zu detektieren, wenn dieser Wert mit dem Wert eines anderen Puffers oder einem falschen Wert überschrieben wird. Zusätzlich kann der Wert mit einem Speicheradressen-Wert, basierend auf der Speicheradresse innerhalb des Puffers an welcher der Wert gespeichert werden soll, mittels z. B. der ausschließlichen oder (XOR)-Operation verknüpft werden, zum Detektieren wenn ein oder mehrere Werte eines Puffers an einer falschen Speicheradresse innerhalb des Puffers gespeichert werden.
  • Ferner können ein erster und ein zweiter codierter Zahlenwert zu einem decodierten Zahlenwert mittels einer Differenz des codierten ersten und zweiten Zahlenwertes decodiert werden. Der erste Multiplikator und der zweite Multiplikator können derart gewählt werden, dass ein Decodieren des codierten ersten und zweiten Zahlenwertes zu einem decodierten Zahlenwert mittels einer Differenz des codierten ersten und zweiten Zahlenwertes möglich ist.
  • Weiterhin können der erste und der zweite Multiplikator vorbestimmt sein. In verschiedenen Ausführungsbeispielen können der erste und der zweite Multiplikator außerhalb des Programms ermittelt oder ausgewählt werden, beispielsweise in einem Überprüfungs-Schaltkreis. In verschiedenen Ausführungsbeispielen können der erste und der zweite Multiplikator beim Compilieren oder beim Interpretieren des Programms ausgewählt oder ermittelt werden.
  • In verschiedenen Ausführungsbeispielen kann der erste codierte Zahlenwert einen Zahlenwert der ersten codierten ein oder mehreren Zahlenwerte aufweisen und der zweite codierte Zahlenwert kann einen dem ersten codierten Zahlenwert entsprechenden Zahlenwert der zweiten codierten ein oder mehreren Zahlenwerte aufweisen.
  • Es können ein, mehrere oder alle der ersten und der zweiten codierten ein oder mehreren Zahlenwerte decodiert werden.
  • Es können die ersten und zweiten ein oder mehreren Ergebniswerte decodiert werden und als nicht codierte ein oder mehrere Zahlenwerte (in anderen Worten Eingabewerte oder Operanden) für eine nicht codierte Anweisung verwendet werden.
  • Die ersten und zweiten nicht codierten ein oder mehreren Ergebniswerte einer nicht codierten Anweisung können zu ersten und zweiten codierten ein oder mehreren Zahlenwerten codiert werden und als codierte erste und zweite ein oder mehrere Zahlenwerte für eine codierte Anweisung verwendet werden.
  • In verschiedenen Ausführungsbeispielen kann das Decodieren des codierten ersten und zweiten Zahlenwertes zu einem decodierten Zahlenwert ferner ein Verschieben der Ziffern des Ergebniswertes der Differenz des codierten ersten und zweiten Zahlenwertes in Richtung der Ziffernposition mit dem niedrigsten Wert aufweisen.
  • Ferner können der erste Multiplikator und der zweite Multiplikator derart ausgewählt werden, dass das Decodieren des ersten und zweiten codierten Zahlenwertes zu einem decodierten Zahlenwert mittels der Differenz des ersten und zweiten codierten Zahlenwertes gefolgt von dem Verschieben der Ziffern möglich ist. Beim Decodieren von Daten können nur Subtraktions- und Verschiebeoperationen, z. B. Bit-Verschiebungen, ausgeführt werden. Dadurch ist obige Codierung besonders effizient.
  • Der erste Multiplikator kann gleich dem zweiten Multiplikator subtrahiert um eine Basiszahl hoch einer Exponentenzahl sein.
  • Ferner kann die Basiszahl gleich der Zahl 2 sein und das Verschieben der Ziffern kann ein Bit-Verschieben der Ziffern um die Exponentenzahl sein.
  • In verschiedenen Ausführungsbeispielen kann ein fehlerhafter decodierter Zahlenwert mittels eines codierten ersten und zweiten Wertes korrigiert werden, die jeweils dem decodierten Zahlenwert entsprechen.
  • In verschiedenen Ausführungsbeispielen können ein, mehrere oder alle fehlerhaft decodierten Zahlenwerte, die ein, mehreren oder allen Werten der ersten und zweiten ein oder mehreren codierten und zu decodierenden Zahlenwerten entsprechen, korrigiert werden.
  • Weiterhin können ein, mehrere oder alle fehlerhaft decodierten Zahlenwerte, die ein, mehreren oder allen Werten der ersten und zweiten ein oder mehreren zu decodierenden Ergebniswerten entsprechen, korrigiert werden.
  • Es können die, den fehlerhaften decodierten ein oder mehreren Zahlenwerten entsprechenden, fehlerhaften ersten oder zweiten codierten ein oder mehreren Zahlenwerte korrigiert werden.
  • Weiterhin können die, den fehlerhaften decodierten ein oder mehreren Zahlenwerten entsprechenden, ersten bzw. zweiten codierten ein oder mehreren Zahlenwerte mittels der zweiten bzw. der ersten codierten ein oder mehreren Zahlenwerte korrigiert werden.
  • In einer Ausgestaltung können die, den fehlerhaften decodierten ein oder mehreren Zahlenwerten entsprechenden, fehlerhaften ersten oder zweiten ein oder mehreren Ergebniswerte korrigiert werden.
  • Ferner können die, den fehlerhaften decodierten ein oder mehreren Zahlenwerten entsprechenden, ersten bzw. zweiten codierten ein oder mehreren Ergebniswerte mittels der zweiten bzw. der ersten codierten ein oder mehreren Ergebniswerte korrigiert werden.
  • In verschiedenen Ausführungsbeispielen kann der arithmetische Code ein arithmetischer Code mit oder ohne Signaturen sein.
  • Der arithmetische Code kann mindestens einen der folgenden Codes enthalten oder mindestens einer der folgenden Codes sein: ein AN-Code, ein ANB-Code, ein AND-Code, ein ANDmem-Code, ein ANBD-Code oder ein ANBDmem-Code. In vorteilhaften Ausführungsbeispielen weist der arithmetische Code den AN-Code auf.
  • In noch einer Ausgestaltung kann der arithmetische Code jeder beliebige arithmetische Code sein, der das Decodieren der ersten und zweiten codierten ein oder mehreren Zahlenwerte mittels Subtraktion und Bit-Verschieben ermöglicht. In verschiedenen Ausführungsbeispielen kann der arithmetische Code jeder beliebige arithmetische Code sein, der das Decodieren der ersten und zweiten codierten ein oder mehreren Zahlenwerte ohne Division ermöglicht.
  • In verschiedenen Ausführungsbeispielen kann das Ermitteln, ob bei der Ausführung des Programms ein Fehler aufgetreten ist, mittels eines Überprüfungs-Schaltkreises durchgeführt werden.
  • In verschiedenen Ausführungsbeispielen können die ersten codierten ein oder mehreren Ergebniswerte, der erste Multiplikator, die zweiten codierten ein oder mehreren Ergebniswerte und der zweite Multiplikator von dem Programm an den Überprüfungs-Schaltkreis übermittelt werden, zum Ermitteln, ob bei der Ausführung des Programms ein Fehler aufgetreten ist.
  • In verschiedenen Ausführungsbeispielen können die ersten codierten ein oder mehreren Ergebniswerte, der erste Multiplikator, die zweiten codierten ein oder mehreren Ergebniswerte und der zweite Multiplikator von dem Überprüfungs-Schaltkreis empfangen werden.
  • Der Überprüfung-Schaltkreis kann den ersten bzw. zweiten akkumulierten Ergebniswert aufweisen. Die ersten bzw. zweiten empfangenen ein oder mehreren Ergebniswerte können von dem Überprüfungsschaltkreis mit dem ersten bzw. zweiten akkumulierten Ergebniswert verknüpft werden, z. B. addiert werden.
  • Ferner können als erste bzw. zweite codierte ein oder mehrere Ergebniswerte der erste bzw. zweite akkumulierte Ergebniswert von dem Programm an den Überprüfungsschaltkreis übermittelt und dort empfangen werden. Der Überprüfungsschaltkreis kann einen ersten bzw. zweiten empfangenen akkumulierten Ergebniswert mit mindestens einem weiteren ersten bzw. zweiten akkumulierten Ergebniswert verknüpfen, z. B. addieren.
  • Anschaulich können das Programm oder alternativ der Überprüfungsschaltkreis den ersten bzw. zweiten akkumulierten Ergebniswert ermitteln. Es können auch beide, das Programm und der Überprüfungsschaltkreis, jeweils einen ersten bzw. zweiten akkumulierten Ergebniswert ermitteln. Beispielsweise kann das Programm Daten nach jeder ausgeführten Anweisung oder erst nach mehreren ausgeführten Anweisungen an den Überprüfungsschaltkreis übermitteln.
  • In verschiedenen Ausführungsbeispielen kann das Verfahren mittels eines Überprüfungs-Schaltkreises ausgeführt werden.
  • In verschiedenen Ausführungsbeispielen kann der codierte Programm-Code ein Interpreter-Programm ausweisen, welches das Programm auf sichere Art und Weise lädt, interpretiert und ausführt. Das Interpreter-Programm kann mittels des Überprüfungs-Schaltkreises ausgeführt werden.
  • In verschiedenen Ausführungsbeispielen kann der codierte Programm-Code einen Code aufweisen zum Laden und Überprüfen von Werten, z. B. von gespeicherten Instruktionen, ihren Operanden und/oder von Ergebniswerten. In dieser Ausführungsform kann die redundant ausgeführte mindestens eine Anweisung einer Anweisung zum Laden von zu überprüfenden codierten ein oder mehreren Ergebniswerten und/oder dem zugehörigen Multiplikator entsprechen. Die codierten ein oder mehreren Ergebniswerte können den zu ladenden Instruktionen, ihren Operanden oder bereits berechneten Ergebniswerten entsprechen. Die ersten und zweiten codierten ein oder mehreren Zahlenwerte, die den Operanden der ausgeführten Lade-Anweisung entsprechen, können codierte Speicheradressen aufweisen, an denen die zu ladenden Werte gespeichert sind.
  • In verschiedenen Ausführungsbeispielen kann der codierte Programm-Code einen Code aufweisen zum Laden und/oder Überprüfen von Werten, z. B. von gespeicherten oder übermittelten Instruktionen und ihren Operanden, und einen Code aufweisen zum Ausführen der geladenen Instruktionen basierend auf ihren Operanden.
  • Der Überprüfungs-Schaltkreis kann außerhalb des Programms implementiert sein.
  • Ferner kann der Überprüfungs-Schaltkreis das Ermitteln ausführen, ob bei der Ausführung des Programms ein Fehler aufgetreten ist.
  • In verschiedenen Ausführungsbeispielen kann der Überprüfungs-Schaltkreis in sicherer Hardware implementiert sein.
  • Der Überprüfungs-Schaltkreis kann in Software implementiert sein. Der Überprüfungs-Schaltkreis kann als codierter Programm-Code implementiert sein.
  • Ferner kann der Überprüfungs-Schaltkreis durch Redundanz abgesichert sein.
  • In verschiedenen Ausführungsbeispielen kann der Überprüfungs-Schaltkreis durch arithmetische Codes abgesichert sein.
  • 2 zeigt ein Flussdiagramm 200, das ein Verfahren zur Datenverarbeitung zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, gemäß einem Ausführungsbeispiel illustriert.
  • In 202 können erste codierte ein oder mehrere Ergebniswerte, ein erster Multiplikator, zweite codierte ein oder mehrere Ergebniswerte und ein zweiter Multiplikator von dem Programm in einem Überprüfungs-Schaltkreis empfangen werden.
  • Der erste codierte Ergebniswert kann in dem Programm beim Ausführen zumindest einer Anweisung basierend auf ersten codierten ein oder mehreren Zahlenwerten ermittelt worden sein, wobei die ersten codierten ein oder mehreren Zahlenwerte ein oder mehreren Operanden der zumindest einen Anweisung entsprechen und mittels eines arithmetischen Codes aufweisend einen ersten Multiplikator codiert sein können.
  • Der zweite codierte Ergebniswert kann in dem Programm beim Ausführen zumindest einer Anweisung basierend auf zweiten codierten ein oder mehreren Zahlenwerten ermittelt worden sein, wobei die zweiten codierten ein oder mehreren Zahlenwerte ein oder mehreren Operanden der zumindest einen Anweisung entsprechen und mittels des arithmetischen Codes aufweisend einen zweiten Multiplikator codiert sein können.
  • In 204 kann in dem Überprüfungs-Schaltkreis ermittelt werden, ob bei der Ausführung des Programms ein Fehler aufgetreten ist, basierend auf den ersten codierten ein oder mehreren Ergebniswerten und dem ersten Multiplikator und/oder basierend auf den zweiten ein oder mehreren Ergebniswerten und dem zweiten Multiplikator.
  • In verschiedenen Ausführungsbeispielen kann der Überprüfungs-Schaltkreis außerhalb des Programms implementiert sein.
  • Anschaulich sendet ein Programm, dessen Anweisungen oder Berechnungen auf Fehler hin überprüft werden sollen, codierte Werte an den Überprüfungs-Schaltkreis oder speichert die codierten Werte in einem gemeinsamen Speicher. Der Überprüfungs-Schaltkreis überprüft die Werte, um zu ermitteln, ob bei einer Ausführung des Programms ein Fehler aufgetreten ist. Dabei sind die Parameter, mit denen die Werte codiert sind dem Überprüfungs-Schaltkreis bekannt oder werden alternativ ebenfalls an den Überprüfungs-Schaltkreis übertragen.
  • In verschiedenen Ausführungsbeispielen können erste ein oder mehrere Zahlenwerte aus dem Speicher an einer ersten Speicheradresse geladen werden und eine erste Speicheradressen-Signatur basierend auf der ersten Speicheradresse ermittelt werden. Die geladenen ersten ein oder mehreren Zahlenwerte können mit der ersten Speicheradressen-Signatur mittels der ausschließlichen oder (XOR)-Operation verknüpft werden. Weiterhin können zweite ein oder mehrere Zahlenwerte aus dem Speicher an einer zweiten Speicheradresse geladen werden, eine zweite Speicheradressen-Signatur basierend auf der zweiten Speicheradresse ermittelt werden und die geladenen zweiten ein oder mehreren Zahlenwerte können mit der zweiten Speicheradressen-Signatur mittels der ausschließlichen oder (XOR)-Operation verknüpft werden.
  • Die geladenen ersten ein oder mehreren Zahlenwerte können die ersten codierten ein oder mehreren Ergebniswerte und den ersten Multiplikator aufweisen und die zweiten ein oder mehreren Zahlenwerte können die zweiten codierten ein oder mehreren Ergebniswerte und den zweiten Multiplikator aufweisen.
  • Das Empfangen der ersten codierten ein oder mehreren Ergebniswerte, des ersten Multiplikators, der zweiten codierten ein oder mehreren Ergebniswerte und des zweiten Multiplikators können das Laden der ersten und zweiten Zahlenwerte aufweisen.
  • Ferner kann in dem Überprüfungs-Schaltkreis ermittelt werden, ob beim Empfangen der Werte in dem Überprüfungs-Schaltkreis ein Fehler aufgetreten ist, basierend auf den geladenen ersten und zweiten Zahlenwerten.
  • Der Überprüfung-Schaltkreis kann einen ersten bzw. zweiten akkumulierten Ergebniswert aufweisen, z. B. einen ersten bzw. zweiten Akkumulator, z. B. jeweils ein Register, und eingerichtet sein, die ersten bzw. die zweiten codierten ein oder mehreren Ergebniswerte mit dem ersten bzw. zweiten akkumulierten Ergebniswert zu verknüpfen, z. B. zu addieren. Weiterhin kann der Überprüfungs-Schaltkreis eingerichtet sein, das erste bzw. zweite akkumulierte Ergebnis zu initialisieren, z. B. nachdem ermittelt worden ist, ob ein Fehler aufgetreten ist und bevor weitere erste bzw. zweite codierte ein oder mehrere Ergebniswerte mit dem ersten bzw. zweiten akkumulierten Ergebniswert verknüpft werden.
  • In dem Überprüfungs-Schaltkreis kann ermittelt werden, ob bei der Ausführung des Programms ein Fehler aufgetreten ist, basierend auf dem ersten akkumulierten Ergebniswert und dem ersten Multiplikator und/oder basierend auf dem zweiten akkumulierten Ergebniswert und dem zweiten Multiplikator.
  • In einer Ausgestaltung können die ersten und zweiten codierten ein oder mehreren Ergebniswerte zu decodierten ein oder mehreren Ergebniswerten mittels einer Differenz der ersten und zweiten codierten ein oder mehreren Ergebniswerte decodiert werden. Der erste Multiplikator und der zweite Multiplikator können derart gewählt werden, dass ein Decodieren des codierten ersten und zweiten Ergebniswertes zu einem decodierten Ergebniswert mittels einer Differenz des codierten ersten und zweiten Ergebniswertes möglich ist.
  • Ferner können die ersten und/oder zweiten decodierten ein oder mehreren Ergebniswerte an eine Ausgabeeinheit übermittelt werden.
  • Es können fehlerhafte decodierte ein oder mehrere Ergebniswerte mittels erster und zweiter codierter ein oder mehrerer Ergebniswerte, die jeweils den decodierten ein oder mehreren Ergebniswerten entsprechen, korrigiert werden.
  • Weiterhin können die, den fehlerhaften decodierten ein oder mehreren Ergebniswerte entsprechenden, fehlerhaften ersten oder zweiten codierten ein oder mehreren Ergebniswerte korrigiert werden.
  • Die, den fehlerhaften decodierten ein oder mehreren Ergebniswerte entsprechenden, ersten bzw. zweiten codierten ein oder mehreren Ergebniswerte können mittels der zweiten bzw. der ersten codierten ein oder mehreren Ergebniswerte korrigiert werden.
  • Weiterhin können die korrigierten ersten oder zweiten codierten ein oder mehreren Ergebniswerte an das Programm oder eine Ausgabeeinheit übermittelt werden.
  • Das Übermitteln kann aufweisen, die ersten und/oder die zweiten codierten ein oder mehreren Ergebniswerte jeweils mit der ersten oder zweiten Speicheradressen-Signatur mittels einer ausschließlichen oder (XOR)-Operation zu verknüpfen und die ersten und/oder die zweiten codierten ein oder mehreren Ergebniswerte in einem Speicher an jeweils der ersten oder der zweiten Speicheradresse zu speichern.
  • Der arithmetische Code kann ein arithmetischer Code mit oder ohne Signaturen sein.
  • In verschiedenen Ausführungsbeispielen kann der arithmetische Code mindestens einen der folgenden Codes enthalten oder mindestens einer der folgenden Codes sein: ein AN-Code, ein ANB-Code, ein AND-Code, ein ANDmem-Code, ein ANBD-Code oder ein ANBDmem-Code. In vorteilhaften Ausführungsbeispielen weist der arithmetische Code den AN-Code auf.
  • In verschiedenen Ausführungsbeispielen kann der arithmetische Code jeder beliebige arithmetische Code sein, der das Decodieren der ersten und zweiten codierten ein oder mehreren Zahlenwerte mittels Subtraktion und Bit-Verschieben ermöglicht. In verschiedenen Ausführungsbeispielen kann der arithmetische Code jeder beliebige arithmetische Code sein, der das Decodieren der ersten und zweiten codierten ein oder mehreren Zahlenwerte ohne Division ermöglicht.
  • Der Überprüfungs-Schaltkreis kann in sicherer Hardware implementiert sein.
  • Ferner kann der Überprüfungs-Schaltkreis durch Redundanz abgesichert sein.
  • Auch kann der Überprüfungs-Schaltkreis durch arithmetische Codes abgesichert sein.
  • 3 zeigt ein Flussdiagramm 300, das ein Verfahren zum Erzeugen von Programm-Code, ob bei einer Ausführung eines Programms oder anders ausgedrückt in einer Ausführung eines Programms ein Fehler aufgetreten ist, gemäß einem Ausführungsbeispiel illustriert.
  • In 302 kann ein Programm-Code-Abschnitt zum Codieren von ein oder mehreren Operanden mindestens einer Anweisung des Programms in erste codierte ein oder mehrere Zahlenwerte mittels eines arithmetischen Codes aufweisend einen ersten Multiplikator erzeugt werden.
  • In 304 kann ein Programm-Code-Abschnitt zum Codieren der ein oder mehreren Operanden der mindestens einen Anweisung in zweite ein oder mehrere codierte Zahlenwerte mittels des arithmetischen Codes aufweisend einen zweiten Multiplikator erzeugt werden.
  • Während des Erzeugens des Programm-Code-Abschnittes können codierte Konstanten vollständig aus nicht kodierten konstanten Operanden berechnet werden, die ausschließlich konstante Werte (in anderen Worten Werte, die zum Zeitpunkt des Erzeugens bekannt sind) aufweisen.
  • Ferner können während des Erzeugens des Programm-Code-Abschnittes Terme, die Variablen aufweisen, deren Wert zum Zeitpunkt des Erzeugens nicht bekannt ist, in codierte Terme überführt werden.
  • In 306 kann ein Programm-Code-Abschnitt zum Ausführen der mindestens einen Anweisung auf den ersten codierten ein oder mehreren Zahlenwerten erzeugt werden.
  • In 308 kann ein Programm-Code-Abschnitt zum Ausführen der mindestens einen Anweisung auf den zweiten codierten ein oder mehreren Zahlenwerten erzeugt werden.
  • In 310 kann ein Programm-Code-Abschnitt zum Ermitteln erzeugt werden, ob bei einer Ausführung des Programm-Codes ein Fehler aufgetreten ist, basierend auf ersten ein oder mehreren Ergebniswerten des Ausführens der mindestens einen Anweisung auf den ersten codierten ein oder mehreren Zahlenwerten und dem ersten Multiplikator und/oder basierend auf zweiten ein oder mehreren Ergebniswerten des Ausführens der mindestens einen Anweisung auf den zweiten codierten ein oder mehreren Zahlenwerten und dem zweiten Multiplikator.
  • Anschaulich kann Programm-Code zum Ermitteln, ob ein Fehler auftritt, wenn dieser Programm-Code ausgeführt wird, automatisch erzeugt werden. Somit kann ein effizienter automatischer Schutz für Computer-Programme bereitgestellt werden, z. B. für ein ganzes Computerprogramm oder besonders sicherheitskritische Teilbereiche eines Programms, ohne dass Programm-Code manuell geändert oder eingefügt werden muss.
  • In verschiedenen Ausführungsbeispielen können beim Erzeugen eines Programm-Code-Abschnittes zum Ermitteln, ob bei der Ausführung des Programm-Codes ein Fehler aufgetreten ist, ein erster und ein zweiter akkumulierter Ergebniswert zum Ermitteln, ob bei der Ausführung des Programm-Codes ein Fehler aufgetreten ist, verwendet werden. Das Ermitteln, ob ein Fehler aufgetreten ist, kann auf dem ersten akkumulierten Ergebniswert und dem ersten Multiplikator und/oder basierend auf dem zweiten akkumulierten Ergebniswert und dem zweiten Multiplikator basieren.
  • In verschiedenen Ausführungsbeispielen kann ein Programm-Code-Abschnitt erzeugt werden, zum Verknüpfen, z. B. zum Addieren, der ersten bzw. zweiten codierten ein oder mehreren Ergebniswerten mit dem ersten bzw. zweiten akkumulierten Ergebnis. Ferner kann ein Programm-Code-Abschnitt erzeugt werden, zum Initialisieren des ersten bzw. zweiten akkumulierten Ergebnisses, z. B. zu Beginn der Programmausführung und/oder nach einem Ermitteln, ob ein Fehler aufgetreten ist, bevor nächste ein oder mehrere Ergebniswerte mit dem jeweiligen akkumulierten Ergebnis verknüpft werden.
  • Ferner können ein Programm-Code-Abschnitt zum Ermitteln einer ersten Speicheradressen-Signatur basierend auf einer ersten Speicheradresse, ein Programm-Code-Abschnitt zum Verknüpfen der ersten codierten ein oder mehreren Zahlenwerte mit der ersten Speicheradressen-Signatur mittels einer ausschließlichen oder (XOR)-Operation und ein Programm-Code-Abschnitt zum Speichern der ersten verknüpften codierten ein oder mehreren Zahlenwerte in einem Speicher an der ersten Speicheradresse erzeugt werden.
  • Es können ein Programm-Code-Abschnitt zum Ermitteln einer zweiten Speicheradressen-Signatur basierend auf einer zweiten Speicheradresse, ein Programm-Code-Abschnitt zum Verknüpfen der zweiten codierten ein oder mehreren Zahlenwerte mit der zweiten Speicheradressen-Signatur mittels einer ausschließlichen oder (XOR)-Operation und ein Programm-Code-Abschnitt zum Speichern der zweiten verknüpften codierten ein oder mehreren Zahlenwerte in einem Speicher an der zweiten Speicheradresse erzeugt werden.
  • Ferner können ein Programm-Code-Abschnitt zum Laden der ersten codierten ein oder mehreren Zahlenwerte aus dem Speicher an der ersten Speicheradresse und ein Programm-Code-Abschnitt zum Verknüpfen der geladenen ersten ein oder mehreren Zahlenwerte mit der ersten Speicheradressen-Signatur mittels der ausschließlichen oder (XOR)-Operation erzeugt werden.
  • Es können ein Programm-Code-Abschnitt zum Laden der zweiten codierten ein oder mehreren Zahlenwerte aus dem Speicher an der zweiten Speicheradresse und ein Programm-Code-Abschnitt zum Verknüpfen der geladenen zweiten ein oder mehreren Zahlenwerte mit der zweiten Speicheradressen-Signatur mittels der ausschließlichen oder (XOR)-Operation erzeugt werden.
  • In verschiedenen Ausführungsbeispielen kann beim Erzeugen eines Programm-Code-Abschnittes zum Ermitteln, ob bei der Ausführung des Programm-Codes ein Fehler aufgetreten ist, ferner ein Programm-Code-Abschnitt zum Ermitteln erzeugt werden, ob bei dem Laden der ersten oder zweiten codierten ein oder mehreren Zahlenwerte ein Fehler aufgetreten ist, basierend auf den geladenen ersten und zweiten codierten ein oder mehreren Zahlenwerten, dem ersten Multiplikator und dem zweiten Multiplikator. Ferner kann ein Programm-Code-Abschnitt erzeugt werden, zum Verknüpfen der geladenen ersten bzw. zweiten codierten ein oder mehreren Zahlenwerten mit dem ersten bzw. zweiten akkumulierten Ergebniswert.
  • In einer Ausgestaltung kann der Programm-Code-Abschnitt zum Ermitteln der ersten Speicheradressen-Signatur derart erzeugt werden, dass die erste Speicheradressen-Signatur auf einer ersten Basisspeicheradresse und/oder der ersten Speicheradresse basiert ist. Der Programm-Code-Abschnitt zum Ermitteln der zweiten Speicheradressen-Signatur kann derart erzeugt werden, dass die zweite Speicheradressen-Signatur auf einer zweiten Basisspeicheradresse und/oder der zweiten Speicheradresse basiert ist.
  • Ein Programm-Code-Abschnitt zum Decodieren eines ersten und zweiten codierten Zahlenwertes kann zu einem decodierten Zahlenwert mittels einer Differenz des codierten ersten und zweiten Zahlenwertes erzeugt werden. Der Programm-Code-Abschnitt zum Auswählen des ersten Multiplikators und des zweiten Multiplikators kann derart erzeugt werden, dass ein Decodieren des codierten ersten und zweiten Zahlenwertes zu einem decodierten Zahlenwert mittels einer Differenz des codierten ersten und zweiten Zahlenwertes möglich ist.
  • Ferner kann beim Erzeugen des Programm-Code-Abschnittes zum Decodieren des codierten ersten und zweiten Zahlenwertes zu einem decodierten Zahlenwert ferner ein Programm-Code-Abschnitt zum Verschieben der Ziffern des Ergebniswertes der Differenz des codierten ersten und zweiten Zahlenwertes in Richtung der Ziffernposition mit dem niedrigsten Wert erzeugt werden. Der Programm-Code-Abschnitt zum Auswählen des ersten Multiplikators und des zweiten Multiplikators kann derart erzeugt werden, dass der erste Multiplikator und der zweite Multiplikator derart ausgewählt werden, dass das Decodieren des ersten und zweiten codierten Zahlenwertes zu einem decodierten Zahlenwert mittels der Differenz des ersten und zweiten codierten Zahlenwertes gefolgt von dem Verschieben der Ziffern möglich ist.
  • Der Programm-Code-Abschnitt zum Auswählen des ersten Multiplikators und des zweiten Multiplikators kann derart erzeugt werden, dass der erste Multiplikator gleich dem zweiten Multiplikator subtrahiert um eine Basiszahl hoch einer Exponentenzahl ist.
  • In einer Ausgestaltung kann der Programm-Code-Abschnitt zum Auswählen des ersten Multiplikators und des zweiten Multiplikators derart erzeugt werden, dass die Basiszahl gleich der Zahl 2 ist und das Verschieben der Ziffern ein Bit-Verschieben der Ziffern um die Exponentenzahl ist.
  • Ferner kann ein Programm-Code-Abschnitt zum Korrigieren eines fehlerhaften decodierten Zahlenwertes mittels eines codierten ersten und zweiten Wertes erzeugt werden, die jeweils dem decodierten Zahlenwert entsprechen.
  • Der arithmetische Code kann ein arithmetischer Code mit oder ohne Signaturen sein.
  • In verschiedenen Ausführungsbeispielen kann der arithmetische Code mindestens einen der folgenden Codes enthalten oder mindestens einer der folgenden Codes sein: ein AN-Code, ein ANB-Code, ein AND-Code, ein ANDmem-Code, ein ANBD-Code oder ein ANBDmem-Code. In vorteilhaften Ausführungsbeispielen weist der arithmetische Code den AN-Code auf.
  • 4 zeigt eine Datenverarbeitungsanordnung 400 zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, die einen Schaltkreis 402 zum Ausführen von codiertem Programm-Code, einen ersten Anweisung-Ausführungs-Schaltkreis 404 zum Ausführen mindestens einer Anweisung des codierten Programm-Codes basierend auf ersten codierten ein oder mehreren Zahlenwerten, die mittels eines arithmetischen Codes aufweisend einen ersten Multiplikator codiert sind und ein oder mehreren Operanden der mindestens einen Anweisung entsprechen, und einen zweiten Anweisung-Ausführung-Schaltkreis 406 zum Ausführen der mindestens einen Anweisung basierend auf zweiten codierten ein oder mehreren Zahlenwerten, die mittels des arithmetischen Codes aufweisend einen zweiten Multiplikator codiert sind und den ein oder mehreren Operanden der mindestens einen Anweisung entsprechen, aufweist. Ferner weist die Datenverarbeitungsanordnung 400 einen Ermittlungs-Schaltkreis 408 auf zum Ermitteln, ob bei der Ausführung des Programms ein Fehler aufgetreten ist, basierend auf ersten ein oder mehreren Ergebniswerten des Ausführens der mindestens einen Anweisung auf den ersten codierten ein oder mehreren Zahlenwerten und dem ersten Multiplikator und/oder basierend auf zweiten ein oder mehreren Ergebniswerten des Ausführens der mindestens einen Anweisung auf den zweiten codierten ein oder mehreren Zahlenwerten und dem zweiten Multiplikator. Der Schaltkreis 402, der erste Anweisung-Ausführungs-Schaltkreis 404, der zweite Anweisung-Ausführungs-Schaltkreis 406 und der Ermittlungs-Schaltkreis 408 können über eine Verbindung 410, beispielsweise einer Leitung, einer Mehrzahl von separaten Leitungen, einem Bus, oder mittels einer drahtlosen Verbindung miteinander kommunizieren und Informationen austauschen.
  • Anschaulich kann die Datenverarbeitungsanordnung 400 eine Anordnung sein zum Ausführen eines Programms, das auf Fehler überprüft oder überwacht werden soll.
  • In verschiedenen Ausführungsbeispielen kann der arithmetische Code ein arithmetischer Code mit Signaturen sein. In verschiedenen Ausführungsbeispielen kann der arithmetische Code ein arithmetischer Code ohne Signaturen sein. In verschiedenen Ausführungsbeispielen kann der arithmetische Code jeder beliebige arithmetische Code sein, der das Decodieren der ersten und zweiten codierten ein oder mehreren Zahlenwerte mittels Subtraktion und Bit-Verschieben ermöglicht. In verschiedenen Ausführungsbeispielen kann der arithmetische Code jeder beliebige arithmetische Code sein, der das Decodieren der ersten und zweiten codierten ein oder mehreren Zahlenwerte ohne Division ermöglicht.
  • In verschiedenen Ausführungsbeispielen kann der arithmetische Code mindestens einen der folgenden Codes enthalten oder mindestens einer der folgenden Codes sein: ein AN-Code, ein ANB-Code, ein AND-Code, ein ANDmem-Code, ein ANBD-Code, oder ein ANBDmem-Code. In vorteilhaften Ausführungsbeispielen weist der arithmetische Code den AN-Code auf.
  • 5 zeigt eine Datenverarbeitungsanordnung 500 zum Ermitteln, ob bei (oder: ob in) einer Ausführung eines Programms ein Fehler aufgetreten ist, die einen Empfangs-Schaltkreis 502 aufweist zum Empfangen von ersten codierten ein oder mehreren Ergebniswerten, eines ersten Multiplikators, zweiten codierten ein oder mehreren Ergebniswerten und eines zweiten Multiplikators von dem Programm in einem Überprüfungs-Schaltkreis, wobei der erste codierte Ergebniswert in dem Programm beim Ausführen zumindest einer Anweisung basierend auf ersten codierten ein oder mehreren Zahlenwerten ermittelt worden ist, wobei die ersten codierten ein oder mehreren Zahlenwerte ein oder mehreren Operanden der zumindest einen Anweisung entsprechen und mittels eines arithmetischen Codes aufweisend einen ersten Multiplikator codiert sind, und wobei der zweite codierte Ergebniswert in dem Programm beim Ausführen zumindest einer Anweisung basierend auf zweiten codierten ein oder mehreren Zahlenwerten ermittelt worden ist, wobei die zweiten codierten ein oder mehreren Zahlenwerte ein oder mehreren Operanden der zumindest einen Anweisung entsprechen und mittels des arithmetischen Codes aufweisend einen zweiten Multiplikator codiert sind. Ferner weist die Datenverarbeitungsanordnung 500 einen Ermittlungs-Schaltkreis 504 auf zum Ermitteln in dem Überprüfungs-Schaltkreis, ob bei der Ausführung des Programms ein Fehler aufgetreten ist, basierend auf den ersten codierten ein oder mehreren Ergebniswerten und dem ersten Multiplikator und/oder basierend auf den zweiten ein oder mehreren Ergebniswerten und dem zweiten Multiplikator. Der Empfangs-Schaltkreis 502 und der Ermittlungs-Schaltkreis 504 können über eine Verbindung 506, beispielsweise einem Draht, einer Mehrzahl von separaten Drähten, einem Bus, oder mittels einer drahtlosen Verbindung miteinander kommunizieren und Informationen austauschen.
  • In verschiedenen Ausführungsformen kann der Überprüfungs-Schaltkreis außerhalb des Programms implementiert sein.
  • Anschaulich kann die Datenverarbeitungsanordnung 500 eine Anordnung sein zum Ausführen eines Programms, das auf Fehler überprüft oder überwacht werden soll.
  • In verschiedenen Ausführungsbeispielen kann der arithmetische Code ein arithmetischer Code mit Signaturen sein. In verschiedenen Ausführungsbeispielen kann der arithmetische Code ein arithmetischer Code ohne Signaturen sein. In verschiedenen Ausführungsbeispielen kann der arithmetische Code jeder beliebige arithmetische Code sein, der das Decodieren der ersten und zweiten codierten ein oder mehreren Zahlenwerte mittels Subtraktion und Bit-Verschieben ermöglicht. In verschiedenen Ausführungsbeispielen kann der arithmetische Code jeder beliebige arithmetische Code sein, der das Decodieren der ersten und zweiten codierten ein oder mehreren Zahlenwerte ohne Division ermöglicht.
  • In verschiedenen Ausführungsbeispielen kann der arithmetische Code mindestens einen der folgenden Codes enthalten oder mindestens einer der folgenden Codes sein: ein AN-Code, ein ANB-Code, ein AND-Code, ein ANDmem-Code, ein ANBD-Code, oder ein ANBDmem-Code. In vorteilhaften Ausführungsbeispielen weist der arithmetische Code den AN-Code auf.
  • 6 zeigt eine Datenverarbeitungsanordnung 600 zum Erzeugen von codierten Programm-Code zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, die einen ersten Codierung-Programm-Code-Abschnitt-Erzeugungs-Schaltkreis 602 zum Erzeugen eines Programm-Code-Abschnittes zum Codieren von ein oder mehreren Operanden mindestens einer Anweisung des Programms in erste codierte ein oder mehrere Zahlenwerte mittels eines arithmetischen Codes aufweisend einen ersten Multiplikator und einen zweiten Codierung-Programm-Code-Abschnitt-Erzeugungs-Schaltkreis 604 zum Erzeugen eines Programm-Code-Abschnittes zum Codieren der ein oder mehreren Operanden der mindestens einen Anweisung in zweite ein oder mehrere codierte Zahlenwerte mittels des arithmetischen Codes aufweisend einen zweiten Multiplikator aufweist. Ferner weist die Datenverarbeitungsanordnung 600 einen ersten Anweisung-Ausführung-Programm-Code-Abschnitt-Erzeugungs-Schaltkreis 606 zum Erzeugen eines Programm-Code-Abschnittes zum Ausführen der mindestens einen Anweisung auf den ersten codierten ein oder mehreren Zahlenwerten und einen zweiten Anweisung-Ausführung-Programm-Code-Abschnitt-Erzeugungs-Schaltkreis 608 zum Erzeugen eines Programm-Code-Abschnittes zum Ausführen der mindestens einen Anweisung auf den zweiten codierten ein oder mehreren Zahlenwerten und einen Ermittlung-Programm-Code-Abschnitt-Erzeugungs-Schaltkreis 610 auf zum Erzeugen eines Programm-Code-Abschnittes zum Ermitteln, ob bei einer Ausführung des Programm-Codes ein Fehler aufgetreten ist, basierend auf ersten ein oder mehreren Ergebniswerten des Ausführens der mindestens einen Anweisung auf den ersten codierten ein oder mehreren Zahlenwerten und dem ersten Multiplikator und/oder basierend auf zweiten ein oder mehreren Ergebniswerten des Ausführens der mindestens einen Anweisung auf den zweiten codierten ein oder mehreren Zahlenwerten und dem zweiten Multiplikator. Der erste Codierung-Programm-Code-Abschnitt-Erzeugungs-Schaltkreis 602, der zweite Codierung-Programm-Code-Abschnitt-Erzeugungs-Schaltkreis 604, der erste Anweisung-Ausführung-Programm-Code-Abschnitt-Erzeugungs-Schaltkreis 606, der zweite Anweisung-Ausführung-Programm-Code-Abschnitt-Erzeugungs-Schaltkreis 608 und der Ermittlung-Programm-Code-Abschnitt-Erzeugungs-Schaltkreis 610 können über eine Verbindung 612, beispielsweise einem Draht, einer Mehrzahl von separaten Drähten, einem Bus, oder mittels einer drahtlosen Verbindung miteinander kommunizieren und Informationen austauschen.
  • Anschaulich kann die Datenverarbeitungsanordnung 600 ein Compiler oder ein Interpreter zum Erzeugen eines Programm-Codes sein, der von einer Datenverarbeitung zur Ausführung eines Programms ausgeführt werden kann.
  • In verschiedenen Ausführungsbeispielen kann der arithmetische Code ein arithmetischer Code mit Signaturen sein. In verschiedenen Ausführungsbeispielen kann der arithmetische Code ein arithmetischer Code ohne Signaturen sein. In verschiedenen Ausführungsbeispielen kann der arithmetische Code jeder beliebige arithmetische Code sein, der das Decodieren der ersten und zweiten codierten ein oder mehreren Zahlenwerte mittels Subtraktion und Bit-Verschieben ermöglicht. In verschiedenen Ausführungsbeispielen kann der arithmetische Code jeder beliebige arithmetische Code sein, der das Decodieren der ersten und zweiten codierten ein oder mehreren Zahlenwerte ohne Division ermöglicht.
  • In verschiedenen Ausführungsbeispielen kann der arithmetische Code mindestens einen der folgenden Codes enthalten oder mindestens einer der folgenden Codes sein: ein AN-Code, ein ANB-Code, ein AND-Code, ein ANDmem-Code, ein ANBD-Code und ein ANBDmem-Code. In vorteilhaften Ausführungsbeispielen weist der arithmetische Code den AN-Code auf.
  • Es kann ein Computerprogrammelement bereitgestellt werden, das, wenn es von einem Prozessor ausgeführt wird, bewirkt, dass der Prozessor eines der oben genannten Verfahren 100, 200, 300 zur Datenverarbeitung ausführt.
  • Gemäß verschiedenen Ausführungsformen können Datenverarbeitungsanordnungen und Verfahren bereitgestellt werden für die automatische Überwachung eines Programmablaufs von durch arithmetische Codes mit oder ohne Signaturen geschützten Programmen zur frühzeitigen Erkennung von fehlerhaften Abweichungen im Datenfluss des Programms.
  • Gemäß verschiedenen Ausführungsformen können Datenverarbeitungsanordnungen und Verfahren bereitgestellt werden für arithmetische Codes, funktionale Sicherheit, Software-Fehlerdetektion, und Datenfluss-Überprüfung.
  • Gemäß verschiedenen Ausführungsformen können Datenverarbeitungsanordnungen und Verfahren bereitgestellt werden zum Verwenden von zur Laufzeit des Programms durch codierte Ausführung erzeugten codierten Zahlenwerten bzw. codierten Ergebniswerten. Die erzeugten codierten Ergebniswerte können dabei unauflösbar vom Kontroll- und Datenfluss der durch den arithmetischen Code mit oder ohne Signaturen geschützten Ausführung des Programms abhängen.
  • Gemäß verschiedenen Ausführungsformen kann die Frequenz des Überprüfens der codierten Zahlen- oder Ergebniswerte von „nach jeder Instruktion” bis „vor der Ausgabe” angepasst werden, so dass Fehler erkannt werden können ehe eine fehlerhafte Ausgabe extern sichtbar wird.
  • Die Werte, die zur codierten Ausführung benötigt werden, z. B. die Parameter der Codierungsfunktion bzw. des arithmetischen Codes, können statisch während des Transformationsprozesses erzeugt werden und vom Programm völlig unabhängige, zufällig wählbare Werte beliebiger Größe und/oder Anzahl sein, so dass eine zufällige Erzeugung dieser Werte trotz transienter oder permanenter Fehler während der Ausführung des Programms mit beliebiger Wahrscheinlichkeit ausgeschlossen werden kann.
  • Der zu schützende Quellcode des Programms kann vor der eigentlichen Ausführung in eine semantisch identische aber geschützte Version transformiert werden. Deren korrekte Abarbeitung kann dann zur Laufzeit beispielsweise durch einen sicheren Watchdog-Prozess, z. B. außerhalb des Programms, oder mittels spezieller sicherer Anweisungen, z. B. innerhalb des Programms, überprüft werden.
  • Gemäß verschiedenen Ausführungsformen kann der Transformationsprozess sicherstellen, dass nachdem dieser abgeschlossen ist, mittels des Watchdog-Prozesses oder mittels spezieller, sicherer Anweisungen erkannt werden kann, wenn die spätere Ausführung des Programms von der durch den Programmierer festgelegten Ablaufbeschreibung abweicht.
  • Gemäß verschiedenen Ausführungsformen können nur wenig zusätzliche CPU-Zyklen und Programmspeicher benötigt werden.
  • Gemäß verschiedenen Ausführungsformen kann das durch den Software-Codier-Compiler erzeugte, geschützte Programm direkt auf unsicherer Hardware ausgeführt werden.
  • Somit kann der Umfang des Schutzes durch den Anwender flexibel bestimmt werden.
  • Gemäß verschiedenen Ausführungsformen können Ausgaben an beliebigen Punkten im Programmablauf erlaubt werden.
  • Gemäß verschiedenen Ausführungsformen kann die Implementierung von „fail-fast” Verhalten in Programmen ermöglicht werden, das heißt Fehler können so schnell wie möglich erkannt werden, bereitgestellt werden, was eine frühzeitige Reaktion erlauben kann.
  • Gemäß verschiedenen Ausführungsformen kann flexibel der Datenfluss bei der Ausführung des Programms mit einer bestimmten mathematisch nachweisbaren Wahrscheinlichkeit geschützt werden.
  • Es können mehrere geschützte und ungeschützte Programme auf einem Rechner parallel laufen.
  • Ausführungsformen können in sicherheitsrelevanten Anwendungen, beispielsweise in der Automobiltechnik, der Flugzeugtechnik oder der Medizintechnik eingesetzt werden. Ausführungsformen können Datenintegrität und große sichere Verfügbarkeit von Daten gewährleisten, welches in verschiedenen Gebieten von größter Bedeutung ist, z. B. bei sicherheitsrelevanten oder -kritischen Anwendungen bis hin zu kommerziellen Web(Netz)-Diensten.
  • 7 zeigt eine Datenverarbeitungsanordnung 700 gemäß einem Ausführungsbeispiel. Die Datenverarbeitungsanordnung 700 kann eingesetzt werden als eine oder mehrere der oben genannten Datenverarbeitungsanordnungen (beispielsweise wie in 4 bis 6 beschrieben). Die Datenverarbeitungsanordnung 700 kann enthalten Speichermedien 702, die ein Programm 710 oder mehrere Programme sowie Eingabedaten 712 enthalten können. Das Programm 710 kann ein Programm sein, dass eines der oben genannten Verfahren ausführen kann, beispielsweise eine Compilierung, einen Programmablauf, der auf Fehler überwacht werden soll, oder einen Programmablauf, der Fehler bei einer Ausführung eines anderen Programms überwacht. Die Eingabedaten 712 können dabei im Falle des Compilierens den Quell-Code des zu compilierenden Programms enthalten. Ferner kann die Datenverarbeitungsanordnung 700 einen Arbeitsspeicher 704 enthalten, in dem Daten 714 enthalten sein können. Die Daten 714 können Daten eines momentan ausgeführten Programms beinhalten. Ferner kann die Datenverarbeitungsanordnung 700 eine zentrale Verarbeitungseinheit 706 (engl.: „Central Processing Unit”, CPU) enthalten, die die Verarbeitung steuert und ausführt. Ferner kann die Datenverarbeitungsanordnung 700 gesicherte Spezialhardware 708 enthalten. Beispielsweise können der Überprüfungs-Schaltkreis oder die sicheren speziellen Anweisungen zur Überprüfung in der gesicherten Spezialhardware 708 bereitgestellt werden, die gesichert fehlerfrei arbeitet. Die beschriebenen Komponenten der Datenverarbeitungsanordnung 700 können mit einer Verbindung 716, beispielsweise einem Draht, einer Mehrzahl von separaten Drähten, einem Bus, oder mittels einer drahtlosen Verbindung miteinander kommunizieren und Informationen austauschen.
  • Gemäß verschiedenen Ausführungsformen wird ein Codier-Compiler (englisch: „Encoding Compiler”) bereitgestellt, der automatisch mindestens zweifach AN-, ANB- und/oder ANBD-Code auf eine Anwendung anwendet, um mindestens zwei codierte Anweisungen zu erhalten.
  • Gemäß verschiedenen Ausführungsformen werden Datenverarbeitungsanordnungen und Verfahren zum zweifachen oder mehrfachen AN-, ANB-, ANBDmem-Codieren, um mindestens zwei codierte Anweisungen zu erhalten bzw. auszuführen, und zum Ermitteln von Hardware-Fehlern in Software bereitgestellt.
  • Gemäß Ausführungsformen wird die Möglichkeit zur Überwachung des Programmablaufs von mit arithmetischen Codes mit oder ohne Signaturen geschützten Programmen geschaffen, um zu erkennen, wenn die Ausführung des Programms von der durch den Programmierer festgelegten Ablaufbeschreibung abweicht.
  • Gemäß verschiedenen Ausführungsformen können Abweichungen im Datenfluss des Programms frühzeitig während der Ausführung des Programms mit einer bestimmten Wahrscheinlichkeit erkannt werden.
  • Gemäß Ausführungsformen wird die Möglichkeit geschaffen, Daten verknüpft mit einer Speicheradressen-Signatur redundant zu speichern, um ein unerlaubtes Lesen und Auswerten dieser Daten zu verhindern. Gemäß Ausführungsformen wird die Möglichkeit zur Überwachung von aus einem Speicher gelesenen Daten geschaffen, um zu erkennen, wenn die Ausführung des Programms von der durch den Programmierer festgelegten Ablaufbeschreibung abweicht.
  • Durch Erkennen dieser Fehler können andernfalls willkürlich ausfallende Systeme in einen sicheren Zustand (englisch: fail-safe) überführt und entsprechende Fehlerbehandlungsmaßnahmen angestoßen werden, z. B. der Versuch einer Fehlerkorrektur oder einer erneuten Ausführung. Gemäß Ausführungsformen werden neue Konzepte optimistischer Programmausführung (englisch: Trial and Error) und Sicherheitsmaßnahmen bereitgestellt.
  • Gemäß verschiedenen Ausführungsformen kann ein Fehler-Erkennungs-Ansatz bereitgestellt werden basierend auf redundant eingesetzten arithmetischen Codes, die Ende-zu-Ende-Software-implementierte Hardware-Fehler-Erkennung unterstützt, d. h. er kann Daten schützen vor unerkannten Fehlern während des Speicherns, des Transports und Berechnungen. Seine Fehler-Erkennungs-Möglichkeiten können entkoppelt sein von der eingesetzten Hardware.
  • Gemäß verschiedenen Ausführungsformen kann ein Fehler-Erkennungs-Ansatz bereitgestellt werden basierend auf redundant eingesetzten arithmetischen Codes, der ein effizientes Decodieren und ein effizientes Überprüfen ermöglicht, ob ein Fehler aufgetreten ist.
  • Gemäß verschiedenen Ausführungsbeispielen kann die Anzahl von SDCs für zweifach (oder mehrfach) AN-codierte Programme verglichen mit AN-codierten Programmen reduziert werden. Gemäß Ausführungsbeispielen können mittels Verknüpfens von AN-codierten Daten mit einer Speicheradressen-Signatur zusätzlich Fehler von ausgetauschten Operanden detektiert werden.
  • Gemäß Ausführungsbeispielen können arithmetische Codes eine Technik zum Erkennen von Hardware-Fehlern zur Laufzeit sein. Das Codieren kann Redundanz zu allen Daten-Wörtern hinzufügen. Gültige Code-Wörter können nur eine kleine Teilmenge aller möglichen Daten-Wörter sein. Dabei kann die Menge aller möglichen Datenwörter die Menge aller darstellbaren Daten einer bestimmten Größe sein, und die Menge der Code-Wörter kann die Untermenge aller möglichen Datenwörter erzeugt durch einen Code sein.
  • Korrekt ausgeführte arithmetische Operationen können den Code erhalten, d. h. mit einem gültigen Code-Wort als Eingabe kann die Ausgabe auch ein gültiges Code-Wort sein. Eine fehlerhafte arithmetische Operation oder eine mit nicht-codierten Wörtern aufgerufene Operation kann mit hoher Wahrscheinlichkeit ein Ergebnis produzieren, welches ein ungültiges Code-Wort ist.
  • Gemäß verschiedenen Ausführungsformen kann, wenn eine Anwendung unter Verwendung arithmetischer Codes codiert ist, sie nur codierte Daten verarbeiten, d. h. es kann gewünscht sein, dass alle Eingaben codiert werden, und alle Berechnungen können codierte Daten verwenden und produzieren. Daher kann es gewünscht sein, nur Operationen zu verwenden, die den Code im fehlerfreien Fall erhalten.
  • Für einen AN-Code kann die codierte Version von xc einer Variable x erhalten werden durch Multiplizieren ihres ursprünglichen Funktionswertes xf mit einem konstanten Multiplikator A. Um den Code zu überprüfen, kann der Rest von xc bei Teilung durch A (welcher „xc Modulus A” genannt werden kann) berechnet werden, welcher Null für ein gültiges Code-Wort sein sollte.
  • Ein AN-Code kann fehlerhafte Operationen detektieren, d. h. unkorrekt ausgeführte Operationen, und modifizierte Operanden, also beispielsweise Daten, die von einem Bit-Fehler, beispielsweise einem Bit-Flip (also ein falscher Wert in einem Bit) getroffen wurden. Diese Fehler können detektiert werden, weil sie zu Daten führen, die mit hoher Wahrscheinlichkeit nicht ein Vielfaches von A sind. Die Wahrscheinlichkeit, dass solch ein Fehler zu einem gültigen Code führt, kann in etwa 1/A sein. Trotzdem kann, wenn ein Bit Flip auf dem (uncodierten) Adress-Bus passiert, auf ein falsches Speicher-Wort zugegriffen werden, das mit hoher Wahrscheinlichkeit auch ein Vielfaches von A enthält. Daher kann der so-genannte „ausgetauschte Operand” nicht mit einem AN-Code detektiert werden, weil der Fehler auch ein Vielfaches von A ist. Ein Bit-Flip in der Instruktions-Einheit einer CPU kann das Ausführen einer falschen Operation (sogenannte „ausgetauschte Operation”) zu Folge haben, was auch nicht erkannt werden kann von einem AN-Code, weil viele Operatoren den AN-Code beibehalten.
  • Ein ANB-Code kann zusätzlich Fehler von ausgetauschten Operatoren und ausgetauschten Operanden detektieren. Das Codieren einer Variable x in ANB-Code ist definiert als xc = A·xf + Bx, wobei die statische Signatur Bx für jede Eingangsvariable mit 0 < Bx < A gewählt werden kann.
  • Tritt ein Bit Flip auf dem Adress-Bus auf, wenn die Variable yc gespeichert wird, kann eine verlorene Aktualisierung von yc auftreten, weil yc an eine falsche Speicher-Stelle gespeichert wird. Wenn yc das nächste Mal gelesen wird, kann die alte Version von yc gelesen werden, welche korrekt AN- oder ANB-codiert aber veraltet sein kann.
  • Zum Ermitteln der Verwendung von veralteten Operanden, d. h. verlorener Aktualisierung, kann eine als solches bekannte Version D verwendet werden, die die Variablen-Aktualisierungen zählt. Im resultierenden AND-Code kann die codierte Version von x wie folgt sein: xc = A·xf + D. Im resultierenden ANBD-Code kann eine Variable x als xc = A·xf + Bx + D codiert werden. Der Code-Überprüfer muss das erwartete D wissen zum Überprüfen der Validität von Code-Wörtern. Gemäß Ausführungsformen kann eine AND- oder ANBD-Code-Implementierung verwendet werden, die Versionen nur auf den Speicher, auf den während Lade- und Speicher-Instruktionen zugegriffen wird, aber nicht auf Register anwendet. Dieser Code kann daher als ANDmem- bzw. ANBDmem-Code bezeichnet werden.
  • Zur Veranschaulichung sei folgender uncodierter C-Code der Funktion f betrachtet:
    Figure DE102014114157A1_0002
  • Die codierte Version dieser Funktion f kann nur codierte Daten verwenden, z. B. AN-, ANB-, AND- oder ANBD-codierte Daten:
    Figure DE102014114157A1_0003
  • Der oben angegebene Pseudo-Code ist der Übersichtlichkeit halber vereinfacht und ignoriert Über- und Unterlauf-Problematiken. Die angegebenen Kommentare im Quellcode geben den Variablen-Inhalt im fehlerfreien Fall bei Verwendung eines ANB-Codes an.
  • Bei einem AN-Code können die Verlangsamungen im Bereich von einem Faktor 2 (z. B. für das Sieb des Eratosthenes) bis zu einem Faktor 75 (z. B. für eine Implementierung eines Verkehrs-Warn- und Kollisions-Vermeidungs-System für Flugzeuge) liegen, je nachdem, ob die Anwendungen teure codierte Operationen wie Multiplikationen oder Fließkomma-Operationen verwenden.
  • Der ANB-Code kann im Durchschnitt 1,9 mal langsamer sein als der AN-Code, weil er codierten Kontroll- und Daten-Fluss bereitstellt und die verwendeten codierten Operationen ebenfalls die Signaturen berücksichtigen müssen.
  • Es ist daher wünschenswert, eine Codierung zu finden, die ähnlich sicher wie der AN-Code oder der ANB-Code ist und gleichzeitig schneller in Hinblick auf die Laufzeit ist. Eine Ursache für die Verlangsamungen eines AN- oder ANB-codierten Programms sind teure Divisionen, die beim Decodieren verwendet werden müssen.
  • Gemäß Ausführungsformen können die Daten mindestens zweimal mittels der AN-, ANB-, AND-, ANBD-Codierung codiert werden und jede Operation kann auf jeweils jeder codierten Kopie der Daten ausgeführt werden.
  • Gemäß Ausführungsformen können die Daten mindestens zweimal mittels der AN-Codierung codiert werden, z. B. kann die Variable x zu xc1 = A1·xf und xc2 = A2·xf codiert werden.
  • Jede Operation kann auf jeweils jeder codierten Kopie der Daten ausgeführt werden. Beispielsweise kann die Funktion f als f(xc1, yc1, zc1) und als f(xc2, yc2, zc2) ausgeführt werden, wobei die Variablen xc1, yc1 und zc1 jeweils mit dem ersten Multiplikator A1 codiert sind und die Variablen xc2, yc2 und zc2 jeweils mit dem zweiten Multiplikator A2 codiert sind. Für die Multiplikatoren A1 und A2, bzw. für die Multiplikatoren A1 bis An im Fall von n-fachen Codieren und Ausführen mit n gleich oder größer als die Zahl 2, können beliebige Zahlenwerte gewählt werden, solange sich das Multiplikatoren-Paar oder die Multiplikatoren-Paare um genau eine Potenz mit Basis 2 unterscheidet oder unterscheiden. Diese Art der Kodierung wird im Folgenden delta-Kodierung genannt.
  • Gemäß Ausführungsformen kann sich jedes Multiplikatoren-Paar, das aus den zwei oder mehreren verschiedenen Multiplikatoren gebildet werden kann, um eine Potenz mit Basis 2 unterscheiden.
  • Gemäß Ausführungsformen können sich lediglich diejenigen Multiplikatoren-Paare, denen Ergebniswerte einer ausgeführten Operation zugeordnet sind, die miteinander verglichen werden, z. B. decodiert, verifiziert oder überprüft werden, um eine Potenz mit Basis 2 unterscheiden.
  • Gemäß Ausführungsformen kann jeder Multiplikator größer als die Zahl 1 sein. Gemäß Ausführungsformen kann jeder Multiplikator eine ganze Zahl sein. Gemäß Ausführungsformen kann jeder Multiplikator ein oder mehrere Nachkommastellen aufweisen.
  • Gemäß Ausführungsformen können die Daten drei- oder viermal mittels der AN-Codierung codiert werden und jede Operation kann auf jeweils allen codierten Kopien der Daten ausgeführt werden.
  • Gemäß vorteilhaften Ausführungsformen können die Daten zweimal oder sogar öfter mittels der AN-Codierung codiert werden und jede Operation kann auf jeweils beiden codierten Kopien der Daten ausgeführt werden.
  • Gemäß Ausführungsformen können jeweils zwei codierte Kopien eines Zahlenwerts aus den mindestens zwei codierten Kopien des Zahlenwerts zu einem decodierten Zahlenwert decodiert werden mittels eines Verschiebens der Ziffern des Ergebnisses der Differenz der codierten ersten und der zweiten codierten Kopie in Richtung der Ziffernposition mit dem niedrigsten Wert.
  • Zur Veranschaulichung sei folgendes Beispiel betrachtet: xc1 = A1·xf xc2 = A2·xf mit A1 = A2 – 2i.
  • Zum Decodieren kann xd = (A1 – A2) >> i ermittelt werden. Im Fall von A1 = A2 – 1 kann xd als die Differenz A1 – A2 der Multiplikatoren A1 und A2 ermittelt werden.
  • Gemäß Ausführungsformen können die mindestens zwei codierten Kopien eines Zahlenwerts (oder anschaulich einer Variablen) auf eine gültige Codierung hin überprüft werden, indem jeweils zwei Kopien des Zahlenwerts aus den mindestens zwei codierten Kopien des Zahlenwerts wie oben beschrieben decodiert werden. Danach kann der Ergebniswert des Decodierens dieser beiden Kopien erneut mittels des zugeordneten ersten und/oder zweiten Multiplikators codiert werden. Der mit dem ersten Multiplikator erneut codierte Wert kann mit der ersten Kopie verglichen werden und der mit dem zweiten Multiplikator erneut codierte Wert kann mit der zweiten Kopie verglichen werden.
  • Im Fall des obigen Beispiels wird die Variable x zunächst zu xd decodiert. Danach wird mindestens ein decodierter Wert xd erneut codiert: x'c1 = A1·xd x'c2 = A2·xd.
  • Es können die Ergebniswerte ferner mittels der Modulus-Operation überprüft werden.
  • Gemäß verschiedenen Ausführungsformen kann nach einem redundanten Ausführen einer Anweisung oder erst nach einem redundanten Ausführen mehrerer Anweisungen ermittelt werden, ob bei der Ausführung des Programms ein Fehler aufgetreten ist. Dabei können mindestens zwei spezielle Register, z. B. Akkumulatoren, verwendet werden, die nach jedem redundanten Ausführen einer Anweisung mit dem Ergebnis der Anweisung inkrementiert werden. Beispielsweise wird ein erstes Register (oder ein erster Akkumulator) mit dem ersten Ergebnis des ersten Ausführens einer Anweisung inkrementiert und ein zweites Register (oder ein zweiter Akkumulator) wird mit dem zweiten Ergebnis des zweiten Ausführens einer Anweisung inkrementiert.
  • Beispielsweise kann für den folgenden Code-Abschnitt z = x + y; z = z – 3; der codierte Code-Abschnitt
    z1 = x1 + y1; z2 = x2 + y2;
    accu1 = accu1 + z1; accu2 = accu2 + z2;
    z1 = z1 – 3·A1; z2 = z2 – 3·A2;
    accu1 = accu1 + z1; accu2 = accu2 + z2;
    erzeugt und ausgeführt werden.
  • Für die speziellen Register accu1 und accu2 kann jeweils mittels z. B. der Modulus-Operation überprüft werden, ob sie ein gültiges Codewort aufweisen. Ferner können die speziellen Register accu1 und accu2 gemeinsam auf eine gültige Codierung hin überprüft werden, indem sie jeweils wie oben beschrieben decodiert werden, das jeweilige Ergebnis des Decodierens erneut mittels des zugeordneten ersten und/oder zweiten Multiplikators codiert wird und die erneut codierten Werte jeweils mit dem entsprechenden Register accu1,2 verglichen werden.
  • Indem nicht nach jedem redundanten Ausführen einer Anweisung ermittelt wird, ob ein Fehler aufgetreten ist, kann die Ausführung des codierten Programms beschleunigt werden.
  • Gemäß verschiedenen Ausführungsformen können die Multiplikatoren als ein Vielfaches der Zahl 2 gewählt werden, um eine effiziente Implementierung der Modulus-Operation nutzen zu können.
  • Gemäß verschiedenen Ausführungsformen können die Multiplikatoren nicht als ein Vielfaches der Zahl 2 gewählt werden, um eine bessere Sicherheit gegenüber Fehlern zu gewährleisten, z. B. gegenüber Bit-Flips.
  • Gemäß verschiedenen Ausführungsformen können fehlerhafte codierte Zahlenwerte, also Zahlenwerte die beim Überprüfen keinem gültigen Codewort entsprechen, mittels mindestens eines anderen codierten Wertes korrigiert werden, wobei der fehlerhafte codierte Zahlenwert und der mindestens eine andere codierte Wert dem gesuchten Zahlenwert entsprechen. Gemäß Ausführungsformen kann der mindestens eine andere codierte Wert, der zum Korrigieren verwendet werden kann, einem Überprüfen standhalten.
  • Gemäß verschiedenen Ausführungsformen können sowohl Operanden einer Funktion oder Operation als auch Ergebnisse korrigiert werden, sofern diese codiert sind.
  • Gemäß verschiedenen Ausführungsformen kann wegen der Redundanz eine höhere Erkennungsrate von Fehlern erzielt werden als bei einem herkömmlichen AN-Codieren.
  • Gemäß verschiedenen Ausführungsformen können wegen der Redundanz Fehler korrigiert werden.
  • Gemäß verschiedenen Ausführungsformen kann wegen des Vermeidens teurer Rechenoperationen trotz redundanter Ausführung, z. B. zweifacher Ausführung, gegenüber der herkömmlichen AN-Codierung Rechenzeit gespart werden. Gemäß verschiedenen Ausführungsformen kann gerade wegen der redundanten Ausführung Rechenzeit gespart werden, weil die Parameter der Codierung so gewählt werden können, dass die zum Codieren, Decodieren und/oder Überprüfen benötigten Rechenoperationen effizient implementiert werden können.
  • Gemäß Ausführungsformen können wegen der Redundanz geringere Anforderungen bezüglich der Multiplikatoren gestellt werden als bei einer einfach durchgeführten arithmetischen Codierung, z. B. Potenzen mit Basis 2 gewählt werden, Zahlen gewählt werden, die keine Primzahlen sind, oder Zahlen mit weniger Stellen als bei dem einfachen AN-Codieren gewählt werden.
  • Gemäß Ausführungsformen können wegen der Redundanz einfachere, effizienter zu verarbeitende und/oder weniger sichere Multiplikatoren als bei dem einfach durchgeführten AN-Codieren gewählt werden. Dadurch kann weitere Rechenzeit gespart werden.
  • 8 zeigt eine Darstellung 800 gemäß einer Ausführungsform, welche das delta-Codieren und Ausführen eines Programms 802 sowie das Decodieren und Überprüfen des codierten Ergebnisses illustriert.
  • Das nicht codierte Originalprogramm 802 kann mittels des Parameterpaares 804 zu einem codierten Programm 806 codiert werden, dargestellt mittels des Pfeils 808. Das Parameterpaar 804 kann die Bedingung 810 erfüllen, z. B. dass der erste Multiplikator A1 gleich dem zweiten Multiplikator A2 plus der Zahl 1 ist. Das Parameterpaar 804 kann aber auch eine andere Bedingung (nicht dargestellt) erfüllen, z. B. dass der erste Multiplikator A1 gleich dem zweiten Multiplikator A2 plus eine Potenz mit Basis 2 ist.
  • Jeder Multiplikator des Parameterpaares 804 kann einem arithmetischen Code zugeordnet sein, z. B. demselben arithmetischen Code, z. B. einem AN-Code. Der erste Multiplikator kann auch einem anderen arithmetischen Code zugeordnet sein als der zweite Multiplikator, z. B. können die beiden Multiplikatoren jeweils einem AN-Code und einem AND-Code zugeordnet sein.
  • Das Programm 802 kann die Variablen x und y aufweisen. Als Ergebnis z kann x plus y berechnet werden. Der verständlichen Erklärung halber können die Variablen x und y Konstanten sein.
  • Bei dem Codieren 808 kann zum Erzeugen des codierten Programms 806 die Konstante x dupliziert werden und es können die codierten Kopien x1 und x2 der Konstanten ermittelt werden. Auch die Konstante y kann dupliziert werden und es können die codierten Kopien y1 und y2 der Konstanten ermittelt werden. Die ersten Kopien x1, y1 der Konstanten x und y werden addiert und die zweiten Kopien x2, y2 der Konstanten x und y werden addiert. Als Optimierung (nicht dargestellt) können die codierten Kopien der Konstanten bereits vor dem Ausführen addiert werden, sofern die Parameter für die arithmetischen Codierungen zum Zeitpunkt der Optimierung bekannt sind.
  • Das codierte Programm 806 kann codiert ausgeführt werden, dargestellt mittels des Pfeils 812. In dem ausgeführten Programm 814 können die erste und die zweite Kopie z1 und z2 des Ergebnisses z ermittelt werden. Die codierten Variablen und die daraus resultierenden codierten Terme können bereits vor dem Ausführen, also vor der codierten Verarbeitung, in Abhängigkeit von den Variablen und Parametern optimiert werden, z. B. zu Termen umgeformt werden, deren Auswertung während des Ausführens des codierten Programms effizienter ist. Wenn die Parameter des arithmetischen Codes bereits vor der codierten Verarbeitung bekannt sind, können die in diesem Fall konstanten Werte z1,2 vorab ermittelt werden, z. B. als A1,2 multipliziert mit der Konstanten 3. Im Fall einer redundant durchgeführten AN-Codierung können die Multiplikatoren A1, A2 zum Zeitpunkt des Codierens 808 ermittelt werden und somit zum Zeitpunkt des codierten Ausführens 812 bekannt sein. Im Fall einer z. B. redundant durchgeführten ANB-Codierung können die Signaturen (nicht dargestellt) bei einer dynamischen Speicherverwaltung erst zum Zeitpunkt des codierten Ausführens 812 zugeordnet werden.
  • Das ausgeführte codierte Programm 814 kann decodiert werden, dargestellt mittels des Pfeils 816. Nach dem Decodieren 816 kann ein decodiertes Ergebnis 818, 820, 822 erhalten werden. Das decodierte Ergebnis 818, 820, 822 kann überprüft werden, dargestellt mittels der Pfeile 824, 826, 828. Beispielsweise kann überprüft werden 824, 826, 828, ob ein erneut codierter Ergebniswert gleich dem entsprechenden codierten Ergebniswert ist. Das erneute Codieren und Vergleichen kann für das Parameterpaar 804 durchgeführt werden oder für ein oder mehrere Parameterpaare (nicht dargestellt) in dem Fall, dass das Programm 802 mit mehr als zwei Parametersätzen, z. B. mehr als zwei Multiplikatoren, codiert und ausgeführt wurde.
  • Beim Überprüfen 824, 826, 828 kann ein Überprüfungs-Ergebnis 830, 832, 834 ermittelt werden. Wenn die erneut codierten redundanten Ergebniswerte z'1, z'2 gleich den codierten redundanten Ergebniswerten z1, z2 sind, kann das codierte Verarbeiten 808 erfolgreich sein. Wenn mindestens ein erneut codierter Ergebniswert z'1,2 ungleich dem entsprechenden codierten Ergebniswert z1,2 ist, kann das codierte Verarbeiten 808 fehlgeschlagen, fehlerhaft oder fehlerbehaftet sein. In diesem Fall kann versucht werden, einen korrekt codierten Ergebniswert zu detektieren, dargestellt mittels der Pfeile 836 und 838. Beim Detektieren 836, 838 eines korrekt codierten Ergebniswerts kann ein Korrektur-Ergebnis 840, 842 ermittelt werden.
  • Für die Parameter 804 können der Wert 6 für den ersten Multiplikator A1 und der Wert 5 für den zweiten Multiplikator A2 gewählt sein. Bei einem codierten Ausführen 812 kann beispielsweise mittels dieser Parameter A1, A2 für das erste codierte Ergebnis z1 der Wert 18 und für das zweite codierte Ergebnis z2 der Wert 15 ermittelt werden. Als decodiertes Ergebnis 818 kann der Wert 3 ermittelt werden. Beim Überprüfen 824 kann das decodierte Ergebnis erneut mittels der Parameter codiert werden, wobei ebenfalls die Werte 15 und 18 ermittelt werden können, Daher kann als Überprüfungs-Ergebnis 830 ermittelt werden, dass das decodierte Ergebnis 818 korrekt ist.
  • Bei dem codierten Ausführen 812 können aber auch im Fall eines Fehlers andere, falsche Ergebniswerte ermittelt werden. Beispielsweise kann für den ersten codierten Ergebniswert der richtige Wert 18 und für den zweiten codierten Ergebniswert der falsche Wert 11 ermittelt werden. Das decodierte Ergebnis 820 kann sich aus der Differenz dieser beiden codierten Ergebniswerte ergeben, weil die Differenz zwischen dem ersten und dem zweiten Multiplikator gemäß der Bedingung 810 den Wert 1 betragen kann, welcher der Zahl 2 hoch der Zahl 0 entspricht. Als decodiertes Ergebnis 820 kann der falsche Wert 7 ermittelt werden. Beim Überprüfen 826 kann ermittelt werden, dass weder der erneut codierte erste Ergebniswert, z. B. der Wert 42, noch der erneut codierte zweite Ergebniswert, der der Wert 35, mit dem beim codierten Verarbeiten 812 ermittelten ersten bzw. zweiten codierten Ergebniswert übereinstimmen. Daher kann als Überprüfungsergebnis 832 ein Fehler detektiert werden. Ferner kann überprüft werden, ob der beim codierten Verarbeiten 812 ermittelte erste bzw. zweite codierte Ergebniswert die Bedingung oder die Bedingungen des beim Codieren 808 verwendeten arithmetischen Codes erfüllen, also ob sie einem gültigen Codewort entsprechen. Im Fall eines AN-Codes kann dies mittels der Modulus-Operation, anders ausgedrückt mittels des Restwerts bei Teilung durch den beim Codieren 808 verwendeten Multiplikator, detektiert werden. Es kann als Korrektur-Ergebnis 840 ermittelt werden, dass der erste codierte Ergebniswert z1 korrekt ist, also ein gültiges Codewort ist, und dass der zweite codierte Ergebniswert z2 falsch oder fehlerhaft ist, also kein gültiges Codewort ist. Der korrekt codierte Ergebniswert, in diesem Beispiel der erste codierte Ergebniswert, kann zum Korrigieren (nicht dargestellt) des Fehlers verwendet werden. Gemäß Ausführungsformen kann nur ein korrekter codierter Ergebniswert decodiert werden zum Ermitteln des decodierten Ergebnisses. Bei einem mehr als zweimaligen Codieren und/oder Ausführen, kann ferner ermittelt werden, welcher decodierte Ergebniswert am häufigsten ermittelt wurde und dieser kann als decodiertes Ergebnis gewählt werden.
  • Als ein anderes Beispiel kann für den ersten codierten Ergebniswert der falsche Wert 24 und für den zweiten codierten Ergebniswert der falsche Wert 15 ermittelt werden. Als decodiertes Ergebnis 822 kann der falsche Wert 9 ermittelt werden. Bei einem ersten Überprüfen 828 kann ermittelt werden, dass keiner der erneut codierten Ergebniswerte mit den entsprechenden beim codierten Verarbeiten 812 ermittelten codierten Ergebniswerten übereinstimmt. Daher kann als Überprüfungs-Ergebnis 834 ein Fehler detektiert werden. Bei einem zweiten Überprüfen 838, ob die beim codierten Verarbeiten 812 ermittelten codierten Ergebniswerte jeweils die Bedingungen des beim Codieren 808 verwendeten arithmetischen Codes erfüllen, kann ermittelt werden, dass die codierten Ergebniswerte alle gültige Codeworte sind, obwohl sie, wie bereits beim ersten Überprüfen festgestellt, fehlerhaft sind. Daher kann als Korrektur-Ergebnis 842 festgestellt werden, dass keiner der codierten Ergebniswerte zum Fehlerkorrigieren verwendet werden kann.
  • Gemäß Ausführungsformen können der erste und der zweite Multiplikator derart gewählt werden, z. B. hinreichend groß gewählt werden, dass bei Auftreten eines Fehlers, z. B. eines Bit-Flips, mit einer hohen Wahrscheinlichkeit kein gültiges Code-Wort resultiert. Selbst wenn sich aufgrund von Fehlern zwei gültige Code-Worte ergeben sollten, kann ein Fehler detektiert werden, weil keiner der erneut codierten Ergebniswerte mit den entsprechenden beim codierten Verarbeiten 812 ermittelten codierten Ergebniswerten übereinstimmt.
  • Gemäß Ausführungsformen kann das Programm 802 mehrfach (nicht dargestellt) mit verschiedenen Parameterpaaren 804 codiert werden 808, jedes codierte Programm 806 kann codiert verarbeitet werden 812 und jedes codierte Ergebnis des ausgeführten codierten Programms 814 kann decodiert 816 und überprüft werden 824, 826, 828 und/oder es kann versucht werden das decodierte Ergebnis 818, 820, 822 zu korrigieren 836, 838.
  • Gemäß Ausführungsformen, kann das codierte Programm 806 im Fall eines Fehlers erneut codiert 812 verarbeitet werden, beispielsweise ohne es erneut zu codieren.
  • Gemäß Ausführungsformen kann das codierte Programm 806 im Fall eines Fehlers erneut codiert 812 verarbeitet werden, wobei häufiger, also öfters, auf potentielle Fehler geprüft werden kann.
  • Gemäß Ausführungsformen kann der decodierte Ergebniswert als korrigiertes decodiertes Ergebnis ermittelt werden, der am häufigsten ermittelt wurde.
  • Gemäß Ausführungsformen kann ein Fehler detektiert werden, wenn mindestens einer der erneut codierten Ergebniswerte nicht mit dem entsprechenden beim codierten Verarbeiten 812 ermittelten codierten Ergebniswerten übereinstimmt.
  • Gemäß Ausführungsformen kann überprüft werden, ob ein oder mehrere codierte Ergebniswerte gültige Codewort sind, nachdem ein Fehler detektiert worden ist.
  • 9 zeigt eine Darstellung 900 gemäß einer Ausführungsform, welche einen Speicher 902 mit zwei Puffern 904, 906 illustriert.
  • Jeder Puffer 904, 906 kann eine Basisadresse 908, 910, z. B. die Startadresse, aufweisen. An einer Adresse 912, 914, 916 kann ein Wert 918, 920, 922 gespeichert werden, z. B. ein codierter Zahlenwert. Der codierte Zahlenwert kann mit einer Signatur, die auf seine Speicheradresse 912, 914, 916 basiert sein kann, mittels einer ausschließlichen oder (XOR)-Operation verknüpft werden. Wenn der Wert 918, 920, 922 aus dem Speicher geladen wird, kann er erneut mit dieser Signatur mittels einer ausschließlichen oder (XOR)-Operation verknüpft werden, um wieder den codierten Zahlenwert zu erhalten.
  • Die Speicheradresse 912, 914, 916, an der der Wert 918, 920, 922 gespeichert oder von der der Wert 918, 920, 922 geladen werden soll, kann codiert werden, z. B. mittels eine AN-Codes codiert werden. Eine erste Kopie der Speicheradresse 912, 914, 916 kann mittels eines arithmetischen Codes aufweisend einen ersten Multiplikator codiert werden und eine zweite Kopie der Speicheradresse 912, 914, 916 kann mittels eines arithmetischen Codes aufweisend einen zweiten Multiplikator codiert werden.
  • Auch jede Variable, die in dem Speicher 902 gespeichert werden soll, z. B. einem ungeschützten Speicher, kann mittels jeweils eines ersten und eines zweiten Multiplikators codiert werden. Eine erste codierte Kopie der Variablen kann als erster codierter Wert 918 an einer ersten Speicheradresse 912 gespeichert werden. Eine zweite codierte Kopie der Variablen kann als zweiter codierter Wert 920 an einer zweiten Speicheradresse 914 gespeichert werden. Zum Beispiel können der erste codierte Wert 918 und der zweite codierte Wert 920 innerhalb des ersten Puffers 904 gespeichert werden.
  • Die ersten und zweiten Multiplikatoren zum Codieren von Variablenwerten können sich von den ersten und zweiten Multiplikatoren zum Codieren von Speicheradressen 910, 912, 914 unterscheiden. Es können aber auch jeweils dieselben ersten bzw. zweiten Multiplikatoren zum Codieren der Variablen und zum Codieren der Speicheradresse 912, 914, 916 verwendet werden.
  • Gemäß Ausführungsformen können zwei oder mehr codierte Kopien einer Variablen gespeichert werden, z. B. zwei oder mehr AN-codierte Kopien, die jeweils mit einer Speicheradressen-Signatur mittels einer ausschließlichen oder (XOR)-Operation verknüpft sind.
  • Gemäß Ausführungsformen können zwei oder mehr Kopien einer Speicheradresse 912, 914, 916 codiert werden. In anderen Worten können einer Speicheradresse 912, 914, 916 zwei oder mehr Speicheradressen-Signaturen zugeordnet werden, z. B. AN-codierte Speicheradressen.
  • Eine Speicheradresse 912, 914, 916 kann mittels eines arithmetischen Codes aufweisend einen ersten Multiplikator codiert werden, z. B. zu einer ersten codierten Speicheradresse pA1. Die Speicheradresse 912, 914, 916 kann ferner mittels des arithmetischen Codes aufweisend einen zweiten Multiplikator codiert werden, z. B. zu einer zweiten codierten Speicheradresse pA2. Bei einem Zugriff auf eine Speicheradresse kann die Speicheradresse mittels der ersten und der zweiten codierten Speicheradresse decodiert werden, beispielsweise mittels der Differenz der ersten und der zweiten codierten Speicheradresse, beispielsweise mittels der Differenz gefolgt von einem Verschieben, beispielsweise mittels der Differenz gefolgt von einem Bit-Verschieben.
  • Die erste codierte Kopie einer Variablen, z. B. eine AN-codierte Kopie, kann an der ersten Speicheradresse 912 gespeichert werden, indem sie mit der ersten codierten Speicheradresse p1 A1 der ersten Speicheradresse und/oder mit der zweiten codierten Speicheradresse p1 A2 der ersten Speicheradresse verknüpft wird, z. B. mittels der ausschließlichen oder (XOR)-Operation.
  • Die zweite codierte Kopie einer Variablen, z. B. eine AN-codierte Kopie, kann an der zweiten Speicheradresse 914 gespeichert werden, indem sie mit der ersten codierten Speicheradresse p2 A1 der zweiten Speicheradresse und/oder mit der zweiten codierten Speicheradresse p2 A2 der zweiten Speicheradresse verknüpft wird, z. B. mittels der ausschließlichen oder (XOR)-Operation.
  • Die erste codierte Kopie einer Variablen, z. B. eine AN-codierte Kopie, kann von der ersten Speicheradresse 912 geladen werden, indem sie mit der ersten codierten Speicheradresse p1 A1 der ersten Speicheradresse und/oder mit der zweiten codierten Speicheradresse p1 A2 der ersten Speicheradresse verknüpft wird, z. B. mittels der ausschließlichen oder (XOR)-Operation.
  • Die zweite codierte Kopie einer Variablen, z. B. eine AN-codierte Kopie, kann von der zweiten Speicheradresse 914 geladen werden, indem sie mit der ersten codierten Speicheradresse p2 A1 der zweiten Speicheradresse und/oder mit der zweiten codierten Speicheradresse p2 A2 der zweiten Speicheradresse verknüpft wird, z. B. mittels der ausschließlichen oder (XOR)-Operation.
  • Gemäß verschiedenen Ausführungsformen kann eine Speicheradressen-Signatur, mit welcher ein Wert 918, 920, 922 verknüpft wird, die erste codierte Speicheradresse pA1, die zweite codierte Speicheradresse pA2 oder beide codierten Speicheradressen aufweisen, beispielsweise können beide codierten Speicheradressen mittels einer ausschließlichen oder (XOR)-Operation miteinander verknüpft werden. Gemäß Ausführungsformen kann eine Speicheradressen-Signatur eine oder mehrere der ihr entsprechenden codierten Speicheradressen aufweisen.
  • Gemäß verschiedenen Ausführungsformen kann detektiert werden, ob eine falsche Variable aus dem Speicher geladen wird, weil das Verknüpfen mit einer Speicheradressen-Signatur, welche nicht der geladenen Variablen zugeordnet ist, mittels der ausschließlichen oder (XOR)-Operation mit hoher Wahrscheinlichkeit in ein ungültiges Code-Wort resultiert. Eine Variable kann zum Beispiel an einer falschen Speicheradresse gespeichert werden oder von einer falschen Speicheradresse geladen werden, wenn im Adress-Bus ein transienter Fehler auftritt.
  • Gemäß Ausführungsformen können Fehler von ausgetauschten Operanden detektiert werden. Gemäß Ausführungsformen können ähnliche Garantien wie beim ANB-Codieren bereitgestellt werden, wenn ein AN-codierter Wert 918, 920, 922 mit seiner Speicheradressen-Signatur mittels der ausschließlichen oder (XOR)-Operation verknüpft wird.
  • Gemäß verschiedenen Ausführungsformen kann so die Verlangsamung beim Ausführen des codierten Programmes verringert werden. Beispielsweise können ein delta-codiertes Programm oder ein delta-codiertes Programm inklusive Speicheradressen-Signaturen schneller ausgeführt werden als ein ANB-codiertes Programm.
  • Gemäß verschiedenen Ausführungsformen kann eine Speicheradressen-Signatur, mit welcher ein Wert 918, 920, 922 verknüpft wird, eine Basisadressen-Signatur aufweisen, wobei die Basisadresse 908, 910 dem Puffer 904, 906 zugeordnet ist, in dem der Wert 918, 920, 922 gespeichert werden soll.
  • Eine codierte Kopie einer Variablen, z. B. eine AN-codierte Kopie, kann an der Speicheradresse 912, 914, 916 gespeichert werden, indem sie vor dem Speichern in dem Speicher 902 mit einer Basisadressen-Signatur verknüpft wird, wobei jeder Puffer 904, 905 eine eigene Basisadressen-Signatur aufweist. Anders ausgedrückt kann jedem Puffer 904, 906 eine Speicheradresse, die sogenannte Basisadresse, eindeutig zugeordnet werden, anhand welcher die Basisadressen-Signatur ermittelt wird. Zum Beispiel kann die codierte Kopie jeweils mit einer oder mehreren codierten Basisadressen, und zusätzlich mit jeweils einer oder mehreren codierten Speicheradressen verknüpft werden.
  • Eine codierte Kopie einer Variablen, z. B. eine AN-codierte Kopie, kann von der Speicheradresse 912, 914, 916 geladen werden, indem sie nach dem Laden aus dem Speicher 902 mit einer Basisadressen-Signatur verknüpft wird, z. B. mit einer oder mehreren codierten Basisadressen, und zusätzlich mit einer oder mehreren codierten Speicheradressen verknüpft wird.
  • Wenn beispielsweise ein gespeicherter Wert 918, 920 in dem ersten Puffer 904 durch einen Wert 922 des zweiten Puffers überschrieben wird, egal ob ausversehen oder absichtlich durch einen Überlauf des zweiten Puffers 906 verursacht, kann dies mittels der Basisadressen-Signatur leicht detektiert werden. Denn der Wert 922 des zweiten Puffers 906 wäre nicht mit der ersten Basisadressen-Signatur verknüpft, sondern z. B. mit der zweiten Basisadressen-Signatur im Fall eines Pufferüberlaufs oder mit z. B. irgendeiner geratenen oder willkürlichen Signatur im Fall eines Angriffs.
  • Die Reihenfolge der Verknüpfungen und/oder die Reihenfolge des Auswertens der Verknüpfungen können beliebig sein. Wichtig ist, dass die codierte Kopie einer Variablen (in anderen Worten der Wert 918, 920, 922) beim Speichern und beim Laden mit denselben Signaturen verknüpft wird.
  • Gemäß Ausführungsformen werden zu speichernde und mittels eines arithmetischen Codes codierte Zahlenwerte mittels einer selbstinversen Operation verknüpft. Gemäß Ausführungsformen werden zu ladende und mittels des arithmetischen Codes codierte Zahlenwerte mittels derselben Operation und demselben Operanden, also derselben Speicheradressen-Signatur, wie beim Speichern verknüpft zum Detektieren, ob beim Speichern oder Laden ein Fehler aufgetreten ist.
  • Gemäß Ausführungsformen können verschiedene Teilbereiche oder Abschnitte eines Systems, z. B. eines Computersystems, z. B. verschiedene Programme oder Anwendungen, mit verschiedenen Multiplikatoren codiert werden. Falls ein Teilbereich des Systems die Daten eines anderen Teilbereichs überschreibt bzw. verändert kann dies detektiert werden, weil die Daten mit verschiedenen, dem anderen Teilbereich nicht bekannten Multiplikatoren codiert sind.
  • Gemäß Ausführungsformen kann das Codieren einer Anwendung oder eines Programms, d. h. das ihr oder ihm Ermöglichen, codierte Daten zu verarbeiten, zu verschiedenen Abschnitten der Lebensdauer der Anwendung oder des Programms erfolgen: vor dem Compilieren durch Codieren des Quell-Codes, während des Compilierens durch Codieren einer Zwischen-Repräsentation des Programms, oder zur Laufzeit durch Codieren des Binär-Programms (englisch: Binary) während der Ausführung.
  • Zum Codieren eines Programms mit einem arithmetischen Code, z. B. einem AN-Code, kann es erwünscht sein, dass jede Instruktion und jede Variable durch ihre passend codierte Version ersetzt wird und dass jede Instruktion und jede Variable mindestens verdoppelt werden, codiert jeweils mit zumindest einem unterschiedlichen Multiplikator. Gemäß Ausführungsformen kann folgendes bereitgestellt werden, wie weiter unten näher beschrieben wird:
    • 1. Jeweils mindestens zwei codierte Kopien aller Instruktionen,
    • 2. Mindestens zweifaches Codieren aller Konstanten und Initialisierungs-Werte,
    • 3. Verarbeitung von Aufrufen zu externen Bibliotheken, und
    • 4. Encodieren von Daten-Fluss, beispielsweise durch Überprüfen, dass Instruktionen mit den richtigen Operanden aufgerufen und korrekt codierte Ergebnisse berechnet werden.
  • Grundlegende arithmetische und boolesche Operationen können codiert werden, wie es als solches bekannt ist, z. B. mit dem AN-Code. Codieren komplexerer Operationen wie bitweise logische Operationen, Typ-Umwandlung, Schiebe-Operationen, oder Fließkomma-Operationen können ebenfalls codiert werden, wie es als solches bekannt ist. Gemäß Ausführungsformen wird ein Codieren von Daten bereitgestellt.
  • 10 zeigt eine Datenverarbeitungsanordnung 1000 gemäß einem Ausführungsbeispiel. Quellcode 1002 kann einem Compiler 1004 (beispielsweise einem Software-Codier-Compiler) zugeführt werden. Der Compiler 1004 kann dann eine sichere Programmvariante 1006 erzeugen. Durch Übersetzen, beispielsweise einschließlich Linken, wird die Sichere Programmvariante 1006 in ein ausführbares codiertes Programm 1008 überführt, das beispielsweise auf Standard-Hardware und einem Standard-Betriebssystem 1012 ausgeführt werden kann. Es kann eine codierte Ausführung 1010 des ausführbaren codierten Programms 1008 stattfinden. Ausgabewerte 1014 des ausführbaren codierten Programms 1008 können durch einen sicheren Watchdog (anders ausgedrückt einem sicheren Überprüfungs-Schaltkreis 1018) verifiziert werden, dargestellt durch Pfeil und Kreis 1022. Die Verifikation kann dadurch ausgeführt werden, dass die codierte Ausführung 1010 codierte Zahlenwerte an den sicheren Watchdog 1018 sendet, der diese Werte überprüft. Zum Beispiel können codierte Ergebniswerte oder codierte Ausgabewerte 1016 sowie die zugehörigen Multiplikatoren an den Watchdog 1018 gesendet werden.
  • Im Fall, dass beim Überprüfen ermittelt wird, dass ein Fehler aufgetreten ist, kann der Watchdog die Ausführung des gesicherten Programms abbrechen.
  • Ausgaben können auch direkt durch den Watchdog laufen. Dazu können die beiden codierten ein oder mehreren Ausgabewerte mit den beiden Multiplikatoren an den Überprüfungs-Schaltkreis gesendet werden. Der Überprüfungs-Schaltkreis prüft nun die codierten Ausgaben. Wenn diese die Prüfung bestanden haben, decodiert der Überprüfungs-Schaltkreis die Ausgaben und gibt diese decodierten Ausgaben aus.
  • Gemäß Ausführungsformen kann ein Überprüfungs-Schaltkreis (Watchdog) verwendet werden zum Überprüfen der korrekten Ausführung des codierten Programms während seiner Laufzeit. Der Überprüfungs-Schaltkreis kann außerhalb des codierten Programms angeordnet sein, also beispielsweise kein Teil des codierten Programms sein. Gemäß Ausführungsformen kann der Überprüfungs-Schaltkreis zuverlässig außerhalb des codierten Programms ausgeführt werden.
  • Gemäß Ausführungsformen können sichere spezielle Anweisungen verwendet werden zum Überprüfen der korrekten Ausführung des codierten Programms während seiner Laufzeit. Die sicheren speziellen Anweisungen können von innerhalb des codierten Programms aufgerufen werden, also beispielsweise ein Teil des codierten Programms sein. Gemäß Ausführungsformen können die sicheren speziellen Anweisungen zuverlässig von innerhalb des codierten Programms ausgeführt werden.
  • Anstelle von oder zusätzlich zu einer reinen Duplikation werden alle duplizierte Daten mittels arithmetischer Codes codiert und duplizierte Anweisungen auf den codierten Daten ausgeführt, um Fehler zu erkennen. Das Programm und die verarbeiteten Daten werden verändert. Bei einer Kombination von einem redundanten arithmetischen Codieren und redundanter Ausführung der codierten Instruktionen kann das Decodieren besonders effizient ohne teure Division durchgeführt werden. Aufgrund der redundanten Ausführung kann detektiert werden, wenn in einer Ausführung ein falscher Operator verwendet wird. Bei einer Verknüpfung von codierten Worten mit Speicheradressen-Signaturen mittels einer selbstinversen Funktion können überschriebene oder auf unzulässige Weise veränderte Speicherbereiche detektiert werden.
  • Bei einer Kombination von dem redundanten arithmetischen Codieren, dem Verknüpfen mit Speicheradressen-Signaturen und redundanter Ausführung der codierten Instruktionen können beliebige Fehler mit hoher Trefferquote sowohl in der Zentralen-Verarbeitungs-Einheit (central processing unit, CPU) als auch in dem Speicher, z. B. dem Arbeitsspeicher, z. B. dem Zufalls-Zugriffs-Speicher (random access memory, RAM) detektiert werden. Eine Korruption der Daten kann effizient auf Software-Ebene verhindert werden.
  • Mittels einer Kombination von dem redundanten arithmetischen Codieren, dem Verknüpfen mit Speicheradressen-Signaturen und redundanter Ausführung der codierten Instruktionen können kleine Anwendungen geschützt werden, z. B. vollständig geschützt werden, bei denen Datenintegrität von großer Bedeutung ist, z. B. im Automobilbereich, bei Schaltkreisen zur Steuerung von Fabriken oder Fabrikationsabläufen und bei wolken(cloud)-basierten Diensten.
  • Hardware- und Software-Systeme, die mit dem redundanten arithmetischen Codieren, dem Verknüpfen mit Speicheradressen-Signaturen und redundanter Ausführung der codierten Instruktionen ausgestattet sind, sind Fehler-tolerant gegenüber beiden transienten und permanenten Hardware-Fehlern und bieten gleichzeitig Sicherheitsgarantien, wie z. B. Schutz gegenüber Puffer- oder Speicherüberläufen.

Claims (33)

  1. Verfahren zur Datenverarbeitung zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, das Verfahren aufweisend: • Ausführen von codiertem Programm-Code; • Ausführen mindestens einer Anweisung des codierten Programm-Codes basierend auf ersten codierten ein oder mehreren Zahlenwerten, die mittels eines arithmetischen Codes aufweisend einen ersten Multiplikator codiert sind und ein oder mehreren Operanden der mindestens einen Anweisung entsprechen; • Ausführen der mindestens einen Anweisung basierend auf zweiten codierten ein oder mehreren Zahlenwerten, die mittels des arithmetischen Codes aufweisend einen zweiten Multiplikator codiert sind und den ein oder mehreren Operanden der mindestens einen Anweisung entsprechen; und • Ermitteln, ob bei der Ausführung des Programms ein Fehler aufgetreten ist, basierend auf ersten ein oder mehreren Ergebniswerten des Ausführens der mindestens einen Anweisung auf den ersten codierten ein oder mehreren Zahlenwerten und dem ersten Multiplikator und/oder basierend auf zweiten ein oder mehreren Ergebniswerten des Ausführens der mindestens einen Anweisung auf den zweiten codierten ein oder mehreren Zahlenwerten und dem zweiten Multiplikator.
  2. Verfahren gemäß Anspruch 1, aufweisend • Ermitteln einer ersten Speicheradressen-Signatur basierend auf einer ersten Speicheradresse; • Verknüpfen der ersten codierten ein oder mehreren Zahlenwerte mit der ersten Speicheradressen-Signatur mittels einer ausschließlichen oder -Operation; • Speichern der ersten verknüpften codierten ein oder mehreren Zahlenwerte in einem Speicher an der ersten Speicheradresse; • Ermitteln einer zweiten Speicheradressen-Signatur basierend auf einer zweiten Speicheradresse; • Verknüpfen der zweiten codierten ein oder mehreren Zahlenwerte mit der zweiten Speicheradressen-Signatur mittels einer ausschließlichen oder -Operation; und • Speichern der zweiten verknüpften codierten ein oder mehreren Zahlenwerte in einem Speicher an der zweiten Speicheradresse.
  3. Verfahren gemäß Anspruch 2, ferner aufweisend • Laden der ersten codierten ein oder mehreren Zahlenwerte aus dem Speicher an der ersten Speicheradresse; • Verknüpfen der geladenen ersten ein oder mehreren Zahlenwerte mit der ersten Speicheradressen-Signatur mittels der ausschließlichen oder -Operation; • Laden der zweiten codierten ein oder mehreren Zahlenwerte aus dem Speicher an der zweiten Speicheradresse; und • Verknüpfen der geladenen zweiten ein oder mehreren Zahlenwerte mit der zweiten Speicheradressen-Signatur mittels der ausschließlichen oder -Operation.
  4. Verfahren gemäß Anspruch 3, wobei das Ermitteln, ob bei der Ausführung des Programms ein Fehler aufgetreten ist, ferner aufweist: Ermitteln, ob bei dem Laden der ersten oder zweiten codierten ein oder mehreren Zahlenwerte ein Fehler aufgetreten ist, basierend auf den geladenen ersten und zweiten codierten ein oder mehreren Zahlenwerten, dem ersten Multiplikator und dem zweiten Multiplikator.
  5. Verfahren gemäß einem der Ansprüche 2 bis 4, wobei die erste Speicheradressen-Signatur auf einer ersten Basisspeicheradresse und/oder der ersten Speicheradresse basiert ist und wobei die zweite Speicheradressen-Signatur auf einer zweiten Basisspeicheradresse und/oder der zweiten Speicheradresse basiert ist.
  6. Verfahren gemäß einem der Ansprüche 1 bis 5, ferner aufweisend • Decodieren eines ersten und zweiten codierten Zahlenwertes zu einem decodierten Zahlenwert mittels einer Differenz des codierten ersten und zweiten Zahlenwertes; und • Auswählen des ersten Multiplikators und des zweiten Multiplikators derart, dass ein Decodieren des codierten ersten und zweiten Zahlenwertes zu einem decodierten Zahlenwert mittels einer Differenz des codierten ersten und zweiten Zahlenwertes möglich ist.
  7. Verfahren gemäß Anspruch 6, • wobei das Decodieren des codierten ersten und zweiten Zahlenwertes zu einem decodierten Zahlenwert ferner ein Verschieben der Ziffern des Ergebniswertes der Differenz des codierten ersten und zweiten Zahlenwertes in Richtung der Ziffernposition mit dem niedrigsten Wert aufweist; und • wobei der erste Multiplikator und der zweite Multiplikator derart ausgewählt werden, dass das Decodieren des ersten und zweiten codierten Zahlenwertes zu einem decodierten Zahlenwert mittels der Differenz des ersten und zweiten codierten Zahlenwertes gefolgt von dem Verschieben der Ziffern möglich ist.
  8. Verfahren gemäß Anspruch 7, wobei der erste Multiplikator gleich dem zweiten Multiplikator subtrahiert um eine Basiszahl hoch einer Exponentenzahl ist.
  9. Verfahren gemäß Anspruch 8, wobei die Basiszahl gleich zwei ist und das Verschieben der Ziffern ein Bit-Verschieben der Ziffern um die Exponentenzahl ist.
  10. Verfahren gemäß einem der Ansprüche 1 bis 9, ferner aufweisend Korrigieren eines fehlerhaften decodierten Zahlenwertes mittels eines codierten ersten und zweiten Zahlenwertes, die jeweils dem decodierten Zahlenwert entsprechen.
  11. Verfahren gemäß einem der Ansprüche 1 bis 10, wobei der arithmetische Code ein arithmetischer Code mit Signaturen ist.
  12. Verfahren gemäß einem der Ansprüche 1 bis 11, wobei der arithmetische Code aufweist mindestens einen Code aus einer Gruppe von Codes bestehend aus: • einem AN-Code; • einem ANB-Code; • einem AND-Code; • einem ANDmem-Code; • einem ANBD-Code; und • einem ANBDmem-Code.
  13. Verfahren gemäß einem der Ansprüche 1 bis 12, wobei das Ermitteln, ob bei der Ausführung des Programms ein Fehler aufgetreten ist, mittels eines Überprüfungs-Schaltkreises durchgeführt wird.
  14. Verfahren gemäß Ansprüche 13, ferner aufweisend Übermitteln der ersten codierten ein oder mehreren Ergebniswerte, des ersten Multiplikators, der zweiten codierten ein oder mehreren Ergebniswerte und des zweiten Multiplikators von dem Programm an den Überprüfungs-Schaltkreis.
  15. Verfahren gemäß einem der Ansprüche 1 bis 12, wobei das Verfahren mittels eines Überprüfungs-Schaltkreises ausgeführt wird.
  16. Verfahren gemäß einem der Ansprüche 13 bis 15, wobei der Überprüfungs-Schaltkreis außerhalb des Programms implementiert ist.
  17. Verfahren gemäß einem der Ansprüche 13 bis 16, wobei der Überprüfungs-Schaltkreis in sicherer Hardware implementiert ist.
  18. Verfahren gemäß einem der Ansprüche 13 bis 17, wobei der Überprüfungs-Schaltkreis durch Redundanz abgesichert ist.
  19. Verfahren gemäß einem der Ansprüche 12 bis 18, wobei der Überprüfungs-Schaltkreis durch arithmetische Codes abgesichert ist.
  20. Verfahren zum Erzeugen von Programm-Code zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, das Verfahren aufweisend: • Erzeugen eines Programm-Code-Abschnittes zum Codieren von ein oder mehreren Operanden mindestens einer Anweisung des Programms in erste codierte ein oder mehrere Zahlenwerte mittels eines arithmetischen Codes aufweisend einen ersten Multiplikator; • Erzeugen eines Programm-Code-Abschnittes zum Codieren der ein oder mehreren Operanden der mindestens einen Anweisung in zweite ein oder mehrere codierte Zahlenwerte mittels des arithmetischen Codes aufweisend einen zweiten Multiplikator; • Erzeugen eines Programm-Code-Abschnittes zum Ausführen der mindestens einen Anweisung auf den ersten codierten ein oder mehreren Zahlenwerten; • Erzeugen eines Programm-Code-Abschnittes zum Ausführen der mindestens einen Anweisung auf den zweiten codierten ein oder mehreren Zahlenwerten; und • Erzeugen eines Programm-Code-Abschnittes zum Ermitteln, ob bei einer Ausführung des Programm-Codes ein Fehler aufgetreten ist, basierend auf ersten ein oder mehreren Ergebniswerten des Ausführens der mindestens einen Anweisung auf den ersten codierten ein oder mehreren Zahlenwerten und dem ersten Multiplikator und/oder basierend auf zweiten ein oder mehreren Ergebniswerten des Ausführens der mindestens einen Anweisung auf den zweiten codierten ein oder mehreren Zahlenwerten und dem zweiten Multiplikator.
  21. Verfahren gemäß Anspruch 20, aufweisend • Erzeugen eines Programm-Code-Abschnittes zum Ermitteln einer ersten Speicheradressen-Signatur basierend auf einer ersten Speicheradresse; • Erzeugen eines Programm-Code-Abschnittes zum Verknüpfen der ersten codierten ein oder mehreren Zahlenwerte mit der ersten Speicheradressen-Signatur mittels einer ausschließlichen oder -Operation; • Erzeugen eines Programm-Code-Abschnittes zum Speichern der ersten verknüpften codierten ein oder mehreren Zahlenwerte in einem Speicher an der ersten Speicheradresse; • Erzeugen eines Programm-Code-Abschnittes zum Ermitteln einer zweiten Speicheradressen-Signatur basierend auf einer zweiten Speicheradresse; • Erzeugen eines Programm-Code-Abschnittes zum Verknüpfen der zweiten codierten ein oder mehreren Zahlenwerte mit der zweiten Speicheradressen-Signatur mittels einer ausschließlichen oder -Operation; und • Erzeugen eines Programm-Code-Abschnittes zum Speichern der zweiten verknüpften codierten ein oder mehreren Zahlenwerte in einem Speicher an der zweiten Speicheradresse
  22. Verfahren gemäß Anspruch 21, aufweisend • Erzeugen eines Programm-Code-Abschnittes zum Laden der ersten codierten ein oder mehreren Zahlenwerte aus dem Speicher an der ersten Speicheradresse; • Erzeugen eines Programm-Code-Abschnittes zum Verknüpfen der geladenen ersten ein oder mehreren Zahlenwerte mit der ersten Speicheradressen-Signatur mittels der ausschließlichen oder -Operation; • Erzeugen eines Programm-Code-Abschnittes zum Laden der zweiten codierten ein oder mehreren Zahlenwerte aus dem Speicher an der zweiten Speicheradresse; und • Erzeugen eines Programm-Code-Abschnittes zum Verknüpfen der geladenen zweiten ein oder mehreren Zahlenwerte mit der zweiten Speicheradressen-Signatur mittels der ausschließlichen oder -Operation.
  23. Verfahren gemäß Anspruch 22, wobei beim Erzeugen eines Programm-Code-Abschnittes zum Ermitteln, ob bei der Ausführung des Programm-Codes ein Fehler aufgetreten ist, ferner ein Programm-Code-Abschnitt zum Ermitteln erzeugt wird, ob bei dem Laden der ersten oder zweiten codierten ein oder mehreren Zahlenwerte ein Fehler aufgetreten ist, basierend auf den geladenen ersten und zweiten codierten ein oder mehreren Zahlenwerten, dem ersten Multiplikator und dem zweiten Multiplikator.
  24. Verfahren gemäß einem der Ansprüche 20 bis 23, • wobei der Programm-Code-Abschnitt zum Ermitteln der ersten Speicheradressen-Signatur derart erzeugt wird, dass die erste Speicheradressen-Signatur auf einer ersten Basisspeicheradresse und/oder der ersten Speicheradresse basiert ist; und • wobei der Programm-Code-Abschnitt zum Ermitteln der zweiten Speicheradressen-Signatur derart erzeugt wird, dass die zweite Speicheradressen-Signatur auf einer zweiten Basisspeicheradresse und/oder der zweiten Speicheradresse basiert ist.
  25. Verfahren gemäß einem der Ansprüche 20 bis 24, aufweisend • Erzeugen eines Programm-Code-Abschnittes zum Decodieren eines ersten und zweiten codierten Zahlenwertes zu einem decodierten Zahlenwert mittels einer Differenz des codierten ersten und zweiten Zahlenwertes; und • Erzeugen des Programm-Code-Abschnittes zum Auswählen des ersten Multiplikators und des zweiten Multiplikators derart, dass ein Decodieren des codierten ersten und zweiten Zahlenwertes zu einem decodierten Zahlenwert mittels einer Differenz des codierten ersten und zweiten Zahlenwertes möglich ist.
  26. Verfahren gemäß Anspruch 25, • wobei beim Erzeugen des Programm-Code-Abschnittes zum Decodieren des codierten ersten und zweiten Zahlenwertes zu einem decodierten Zahlenwert ferner ein Programm-Code-Abschnitt zum Verschieben der Ziffern des Ergebniswertes der Differenz des codierten ersten und zweiten Zahlenwertes in Richtung der Ziffernposition mit dem niedrigsten Wert erzeugt wird; und • wobei der Programm-Code-Abschnitt zum Auswählen des ersten Multiplikators und des zweiten Multiplikators derart erzeugt wird, dass der erste Multiplikator und der zweite Multiplikator derart ausgewählt werden, dass das Decodieren des ersten und zweiten codierten Zahlenwertes zu einem decodierten Zahlenwert mittels der Differenz des ersten und zweiten codierten Zahlenwertes gefolgt von dem Verschieben der Ziffern möglich ist.
  27. Verfahren gemäß einem der Ansprüche 20 bis 26, aufweisend Erzeugen eines Programm-Code-Abschnittes zum Korrigieren eines fehlerhaften decodierten Zahlenwertes mittels eines codierten ersten und zweiten Zahlenwertes, die jeweils dem decodierten Zahlenwert entsprechen.
  28. Verfahren gemäß einem der Ansprüche 20 bis 27, wobei der arithmetische Code ein arithmetischer Code mit Signaturen ist.
  29. Verfahren gemäß einem der Ansprüche 20 bis 28, wobei der arithmetische Code aufweist mindestens einen Code aus einer Gruppe von Codes bestehend aus: • einem AN-Code; • einem ANB-Code; • einem AND-Code; • einem ANDmem-Code; • einem ANBD-Code; und • einem ANBDmem-Code.
  30. Datenverarbeitungsanordnung zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, aufweisend: • einen Schaltkreis zum Ausführen von codiertem Programm-Code; • einen ersten Anweisung-Ausführungs-Schaltkreis zum Ausführen mindestens einer Anweisung des codierten Programm-Codes basierend auf ersten codierten ein oder mehreren Zahlenwerten, die mittels eines arithmetischen Codes aufweisend einen ersten Multiplikator codiert sind und ein oder mehreren Operanden der mindestens einen Anweisung entsprechen; • einen zweiten Anweisung-Ausführung-Schaltkreis zum Ausführen der mindestens einen Anweisung basierend auf zweiten codierten ein oder mehreren Zahlenwerten, die mittels des arithmetischen Codes aufweisend einen zweiten Multiplikator codiert sind und den ein oder mehreren Operanden der mindestens einen Anweisung entsprechen; und • einen Ermittlungs-Schaltkreis zum Ermitteln, ob bei der Ausführung des Programms ein Fehler aufgetreten ist, basierend auf ersten ein oder mehreren Ergebniswerten des Ausführens der mindestens einen Anweisung auf den ersten codierten ein oder mehreren Zahlenwerten und dem ersten Multiplikator und/oder basierend auf zweiten ein oder mehreren Ergebniswerten des Ausführens der mindestens einen Anweisung auf den zweiten codierten ein oder mehreren Zahlenwerten und dem zweiten Multiplikator.
  31. Datenverarbeitungsanordnung zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, aufweisend: • einen Empfangs-Schaltkreis zum Empfangen von ersten codierten ein oder mehreren Ergebniswerten, eines ersten Multiplikators, zweiten codierten ein oder mehreren Ergebniswerten und eines zweiten Multiplikators von dem Programm in einem Überprüfungs-Schaltkreis außerhalb des Programms; • wobei der erste codierte Ergebniswert in dem Programm beim Ausführen zumindest einer Anweisung basierend auf ersten codierten ein oder mehreren Zahlenwerten ermittelt worden ist, wobei die ersten codierten ein oder mehreren Zahlenwerte ein oder mehreren Operanden der zumindest einen Anweisung entsprechen und mittels eines arithmetischen Codes aufweisend einen ersten Multiplikator codiert sind; • wobei der zweite codierte Ergebniswert in dem Programm beim Ausführen zumindest einer Anweisung basierend auf zweiten codierten ein oder mehreren Zahlenwerten ermittelt worden ist, wobei die zweiten codierten ein oder mehreren Zahlenwerte ein oder mehreren Operanden der zumindest einen Anweisung entsprechen und mittels des arithmetischen Codes aufweisend einen zweiten Multiplikator codiert sind; und • einen Ermittlungs-Schaltkreis zum Ermitteln in dem Überprüfungs-Schaltkreis, ob bei der Ausführung des Programms ein Fehler aufgetreten ist, basierend auf den ersten codierten ein oder mehreren Ergebniswerten und dem ersten Multiplikator und/oder basierend auf den zweiten ein oder mehreren Ergebniswerten und dem zweiten Multiplikator.
  32. Datenverarbeitungsanordnung zum Erzeugen von codierten Programm-Code zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, aufweisend: • einen ersten Codierung-Programm-Code-Abschnitt-Erzeugungs-Schaltkreis zum Erzeugen eines Programm-Code-Abschnittes zum Codieren von ein oder mehreren Operanden mindestens einer Anweisung des Programms in erste codierte ein oder mehrere Zahlenwerte mittels eines arithmetischen Codes aufweisend einen ersten Multiplikator; • einen zweiten Codierung-Programm-Code-Abschnitt-Erzeugungs-Schaltkreis zum Erzeugen eines Programm-Code-Abschnittes zum Codieren der ein oder mehreren Operanden der mindestens einen Anweisung in zweite ein oder mehrere codierte Zahlenwerte mittels des arithmetischen Codes aufweisend einen zweiten Multiplikator; • einen ersten Anweisung-Ausführung-Programm-Code-Abschnitt-Erzeugungs-Schaltkreis zum Erzeugen eines Programm-Code-Abschnittes zum Ausführen der mindestens einen Anweisung auf den ersten codierten ein oder mehreren Zahlenwerten; • einen zweiten Anweisung-Ausführung-Programm-Code-Abschnitt-Erzeugungs-Schaltkreis zum Erzeugen eines Programm-Code-Abschnittes zum Ausführen der mindestens einen Anweisung auf den zweiten codierten ein oder mehreren Zahlenwerten; und • einen Ermittlung-Programm-Code-Abschnitt-Erzeugungs-Schaltkreis zum Erzeugen eines Programm-Code-Abschnittes zum Ermitteln, ob bei einer Ausführung des Programm-Codes ein Fehler aufgetreten ist, basierend auf ersten ein oder mehreren Ergebniswerten des Ausführens der mindestens einen Anweisung auf den ersten codierten ein oder mehreren Zahlenwerten und dem ersten Multiplikator und/oder basierend auf zweiten ein oder mehreren Ergebniswerten des Ausführens der mindestens einen Anweisung auf den zweiten codierten ein oder mehreren Zahlenwerten und dem zweiten Multiplikator.
  33. Computerprogrammelement, das, wenn es von einem Prozessor ausgeführt wird, bewirkt, dass der Prozessor ein Verfahren zur Datenverarbeitung gemäß einem der Ansprüche 1 bis 29 ausführt.
DE102014114157.1A 2014-09-30 2014-09-30 Verfahren zur Datenverarbeitung zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist und Datenverarbeitungsanordnungen zum Erzeugen von Programm-Code Active DE102014114157B4 (de)

Priority Applications (2)

Application Number Priority Date Filing Date Title
DE102014114157.1A DE102014114157B4 (de) 2014-09-30 2014-09-30 Verfahren zur Datenverarbeitung zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist und Datenverarbeitungsanordnungen zum Erzeugen von Programm-Code
PCT/EP2015/072585 WO2016050857A1 (de) 2014-09-30 2015-09-30 Verfahren zur datenverarbeitung zum ermitteln, ob bei einer ausführung eines programms ein fehler aufgetreten ist und datenverarbeitungsanordnungen zum erzeugen von programm-code

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
DE102014114157.1A DE102014114157B4 (de) 2014-09-30 2014-09-30 Verfahren zur Datenverarbeitung zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist und Datenverarbeitungsanordnungen zum Erzeugen von Programm-Code

Publications (2)

Publication Number Publication Date
DE102014114157A1 true DE102014114157A1 (de) 2016-03-31
DE102014114157B4 DE102014114157B4 (de) 2016-11-03

Family

ID=54291264

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102014114157.1A Active DE102014114157B4 (de) 2014-09-30 2014-09-30 Verfahren zur Datenverarbeitung zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist und Datenverarbeitungsanordnungen zum Erzeugen von Programm-Code

Country Status (2)

Country Link
DE (1) DE102014114157B4 (de)
WO (1) WO2016050857A1 (de)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP4266176A1 (de) * 2022-04-22 2023-10-25 Siemens Mobility GmbH Verfahren zum rechnergestützten betreiben einer speichereinheit und ausführen von applikationsprogrammen mit redundanter datenspeicherung
EP4266175A1 (de) * 2022-04-22 2023-10-25 Siemens Mobility GmbH Verfahren zum rechnergestützten betreiben einer speichereinheit und ausführen von applikationsprogrammen mit speicherüberprüfung auf speicherfehler

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE10219501B4 (de) * 2002-04-30 2010-04-01 Siemens Ag System und Verfahren zur Verbesserung von Fehlerbeherrschungsmassnahmen, insbesondere in Automatisierungssystemen
DE102007040721B4 (de) * 2006-12-08 2012-06-21 Technische Universität Dresden Datenverarbeitungsanordnung, Verfahren zur Datenverarbeitung, Computerprogrammelement und Überprüfungsanordnung für einen Speicher

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
SCHIFFEL, U.: Hardware Error Detection Using AN-Codes. PhD thesis, Technische Universität Dresden, 2011 *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP4266176A1 (de) * 2022-04-22 2023-10-25 Siemens Mobility GmbH Verfahren zum rechnergestützten betreiben einer speichereinheit und ausführen von applikationsprogrammen mit redundanter datenspeicherung
EP4266175A1 (de) * 2022-04-22 2023-10-25 Siemens Mobility GmbH Verfahren zum rechnergestützten betreiben einer speichereinheit und ausführen von applikationsprogrammen mit speicherüberprüfung auf speicherfehler
US11876533B2 (en) 2022-04-22 2024-01-16 Siemens Mobility GmbH Method for computer-assisted operation of a memory unit and execution of application programs with memory checking for memory errors

Also Published As

Publication number Publication date
DE102014114157B4 (de) 2016-11-03
WO2016050857A1 (de) 2016-04-07

Similar Documents

Publication Publication Date Title
DE102010037457B4 (de) Verfahren zur Datenverarbeitung zum Bereitstellen eines Wertes zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, Verfahren zur Datenverarbeitung zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, Verfahren zum Erzeugen von Programm-Code, Datenverarbeitungsanordnungen zum Bereitstellen eines Wertes zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, Datenverarbeitungsanordnungen zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, und Datenverarbeitungsanordnungen zum Erzeugen von Programm-Code
DE69619372T2 (de) Fehlererkennungs- und fehlerkorrekturverfahren
DE2942998C2 (de) Fehler-Korrektur- und Erkennungs-Anordnung
DE102014117971B4 (de) Verfahren zur Datenverarbeitung zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, und Datenverarbeitungsanordnungen zum Erzeugen von Programm-Code
DE102015210651B4 (de) Schaltung und Verfahren zum Testen einer Fehlerkorrektur-Fähigkeit
EP2441003B1 (de) Gleitkommaarithmetik mit fehlererkennung
DE102014112865A1 (de) Elektronische Schaltung und Verfahren zum Überwachen einer Datenverarbeitung
DE102016107718A1 (de) Auslesen von Fehlervektoren aus einer Speichereinheit
DE102006005817A1 (de) Fehlererkennungsvorrichtung für einen Adressdecoder und Vorrichtung zur Fehlererkennung für einen Adressdecoder
DE102004011450A1 (de) Anvisierte Fehlertoleranz durch spezielle CPU-Befehle
DE102011119585A1 (de) Verbesserte skalierbare CPU für die codierte Ausführung von Software in hochabhängigen sicherheitsrelevanten Anwendungen
DE102011011333B4 (de) Lesen in Peripheriegeräte und schreiben aus Peripheriegeräten mit zeitlich getrennter, redundanter Prozessorausführung
DE102014114157B4 (de) Verfahren zur Datenverarbeitung zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist und Datenverarbeitungsanordnungen zum Erzeugen von Programm-Code
DE102005054587A1 (de) Programmgesteuerte Einheit und Verfahren zum Betreiben derselbigen
DE102016223341A1 (de) Integrierte Schaltung mit Hardwareprüfeinheit zum Überprüfen von ausgewählten Speicherzugriffen
DE102007040721B4 (de) Datenverarbeitungsanordnung, Verfahren zur Datenverarbeitung, Computerprogrammelement und Überprüfungsanordnung für einen Speicher
DE102010041680B9 (de) Vorrichtung und Verfahren zum Bestimmen einer Position eines 1-Bit-Fehlers in einer codierten Bitsequenz, Vorrichtung und Verfahren zur Korrektur eines 1-Bit-Fehlers in einer codierten Bitsequenz und Decodierer und Verfahren zum Decodieren einer fehlerhaften, codierten Bitsequenz
DE102019118703A1 (de) System und Verfahren zum kontinuierlichen Verifizieren der Bauelementzustandsintegrität
DE102022111126A1 (de) Datenverarbeitungsvorrichtung und verfahren zum prüfen der integrität eines speichers
DE102005016051B4 (de) Speicherüberprüfungsvorrichtung und Verfahren zum Überprüfen eines Speichers
DE102015202049B3 (de) System und Verfahren zur Fehlerdetektion von ausgeführtem Programmcode unter Verwendung komprimierter Anweisungssignaturen
DE102013108073A1 (de) Datenverarbeitungsanordnung und verfahren zur datenverarbeitung
DE102004001651B4 (de) Verfahren und Prozessor zur automatischen Befehls-Betriebsartumschaltung zwischen N-Bit und 2N-Bit Befehlen unter Verwendung einer Paritätsüberprüfung
DE102013112020B4 (de) Verfahren und Vorrichtung zum Erkennen von Bitfehlern
AT513533B1 (de) Verfahren zum Überprüfen von Daten mittels wenigstens zweier Prüfsummen

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R016 Response to examination communication
R018 Grant decision by examination section/examining division
R020 Patent grant now final