DE102014118531B4 - Verfahren und Datenverarbeitungseinrichtung zum Ermitteln eines Fehlervektors in einem Datenwort - Google Patents

Verfahren und Datenverarbeitungseinrichtung zum Ermitteln eines Fehlervektors in einem Datenwort Download PDF

Info

Publication number
DE102014118531B4
DE102014118531B4 DE102014118531.5A DE102014118531A DE102014118531B4 DE 102014118531 B4 DE102014118531 B4 DE 102014118531B4 DE 102014118531 A DE102014118531 A DE 102014118531A DE 102014118531 B4 DE102014118531 B4 DE 102014118531B4
Authority
DE
Germany
Prior art keywords
syndrome
codeword
vector
sum
data word
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.)
Active
Application number
DE102014118531.5A
Other languages
English (en)
Other versions
DE102014118531A1 (de
Inventor
Rainer Göttfert
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Infineon Technologies AG
Original Assignee
Infineon Technologies AG
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Infineon Technologies AG filed Critical Infineon Technologies AG
Priority to DE102014118531.5A priority Critical patent/DE102014118531B4/de
Priority to US14/965,933 priority patent/US10193573B2/en
Publication of DE102014118531A1 publication Critical patent/DE102014118531A1/de
Application granted granted Critical
Publication of DE102014118531B4 publication Critical patent/DE102014118531B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/13Linear codes
    • H03M13/15Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
    • H03M13/151Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
    • H03M13/1575Direct decoding, e.g. by a direct determination of the error locator polynomial from syndromes and subsequent analysis or by matrix operations involving syndromes, e.g. for codes with a small minimum Hamming distance
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/13Linear codes
    • H03M13/15Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
    • H03M13/151Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
    • H03M13/1565Decoding beyond the bounded minimum distance [BMD]
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/61Aspects and characteristics of methods and arrangements for error correction or error detection, not provided for otherwise
    • H03M13/615Use of computational or mathematical techniques
    • H03M13/617Polynomial operations, e.g. operations related to generator polynomials or parity-check polynomials

Abstract

Gemäß einem Ausführungsbeispiel wird ein Verfahren zum Ermitteln eines Fehlervektors in einem Datenwort beschrieben, aufweisend: Ermitteln des Syndroms des Fehlervektors; sukzessives Erzeugen von Codewörtern durch zyklisches Vertauschen ein oder mehrerer vorgegebener Codewörter, Bilden, für jedes erzeugte Codewort, der Summe des mit Nullen auf Datenwortlänge ergänzten Syndroms mit dem Codewort und überprüfen, für das Codewort, ob die Summe des mit Nullen auf Datenwortlänge ergänzten Syndroms mit dem Codewort unter allen Codewörtern minimales Gewicht hat; und Ermitteln des Fehlervektors als die Summe des Syndroms mit dem Codewort, für das die Summe des mit Nullen auf Datenwortlänge ergänzten Syndroms mit dem Codewort unter allen Codewörtern minimales Gewicht hat.

Description

  • Ausführungsbeispiele betreffen allgemein Verfahren und Datenverarbeitungseinrichtungen zum Ermitteln eines Fehlervektors in einem Datenwort.
  • Um die Korrektur von Fehlern in Daten, die beispielsweise bei der Datenübertragung oder beim Speichern oder Auslesen entstanden sind, zu ermöglichen, werden Daten typischerweise mittels eines Codes codiert. So ein Code kann auch beispielsweise dazu verwendet werden, um die Rekonstruktion eines von einer PUF (Physical Unclonable Function) bereitgestellten Werts zu ermöglichen. In beiden Fällen ist es erforderlich, dass ein Fehlervektor in einem Datenwort (beispielsweise einer Nachricht oder einem PUF-Wert) ermittelt wird. Es ist wünschenswert, dass diese Ermittlung effizient durchgeführt wird.
  • Aus dem Dokument US 4 382 300 A ist ein Verfahren zum Ermitteln eines Fehlervektors in einem Datenwort bekannt, aufweisend ein Ermitteln des Syndroms des Fehlervektors und ein Ermitteln des Fehlervektors als die Summe des Syndroms mit dem Fehlervektor.
  • Aus dem Dokument US 2008/0 126 908 A1 ist ein Verfahren zum Ermitteln eines Fehlervektors in einem Datenwort bekannt, aufweisend sukzessives Erzeugen von Codewörtern durch zyklisches Vertauschen ein oder mehrerer vorgegebener Codewörter, Bilden, für jedes erzeugte Codewort, der Summe des Datenworts mit dem Codewort.
  • Gemäß einem Ausführungsbeispiel wird ein Verfahren zum Ermitteln eines Fehlervektors in einem Datenwort bereitgestellt, aufweisend: Ermitteln des Syndroms des Fehlervektors; sukzessives Erzeugen von Codewörtern durch zyklisches Vertauschen ein oder mehrerer vorgegebener Codewörter, Bilden, für jedes erzeugte Codewort, der Summe des mit Nullen auf Datenwortlänge ergänzten Syndroms mit dem Codewort und überprüfen, für das Codewort, ob die Summe des mit Nullen auf Datenwortlänge ergänzten Syndroms mit dem Codewort unter allen Codewörtern minimales Gewicht hat; und Ermitteln des Fehlervektors als die Summe des Syndroms mit dem Codewort, für das die Summe des mit Nullen auf Datenwortlänge ergänzten Syndroms mit dem Codewort unter allen Codewörtern minimales Gewicht hat.
  • Gemäß einer weiteren Ausführungsform wird eine Datenverarbeitungseinrichtung gemäß dem oben beschriebenen Verfahren bereitgestellt.
  • Die Figuren geben nicht die tatsächlichen Größenverhältnisse wieder sondern sollen dazu dienen, die Prinzipien der verschiedenen Ausführungsbeispiele zu illustrieren. Im Folgenden werden verschiedene Ausführungsbeispiele mit Bezug auf die folgenden Figuren beschrieben.
  • 1 zeigt ein Ablaufdiagramm, das ein Verfahren zum Ermitteln eines Fehlervektors in einem Datenwort veranschaulicht.
  • 2 zeigt eine Datenverarbeitungseinrichtung zum Ermitteln eines Fehlervektors in einem Datenwort gemäß einer Ausführungsform.
  • 3 zeigt zwei Darstellungen einer Hammingkugel.
  • 4 zeigt einen Vergleich von Hammingkugeln mit Super-Hammingkugeln.
  • 5 zeigt eine Schaltung zur Syndromberechnung.
  • 6 zeigt ein Beispiel für einen Decoder für den Simplex-Code.
  • 7 zeigt eine Schaltung zur Berechnung eines Syndroms zur PUF-Rekonstruktion.
  • 8 zeigt eine Schaltung zur Syndromberechnung.
  • 9 zeigt eine Schaltung zur Syndromberechnung zur PUF-Rekonstruktion.
  • 10 zeigt einen Decoder zur PUF-Rekonstruktion für den (15, 4, 8) Simplex Code.
  • 11 zeigt eine Schaltung zur Syndromberechnung.
  • 12 zeigt ein lineares rückgekoppeltes Schieberegister.
  • 13 veranschaulicht die Syndromberechnung für einen Vektor.
  • 14 veranschaulicht die Syndromberechnung für einen PUF-Wert.
  • 15 zeigt einen Decoder zur PUF-Rekonstruktion für den (31, 5, 16) Simplex Code.
  • Die folgende detaillierte Beschreibung bezieht sich auf die beiliegenden Figuren, die Details und Ausführungsbeispiele zeigen. Diese Ausführungsbeispiele sind so detailliert beschrieben, dass der Fachmann die Erfindung ausführen kann. Andere Ausführungsformen sind auch möglich und die Ausführungsbeispiele können in struktureller, logischer und elektrischer Hinsicht geändert werden, ohne vom Gegenstand der Erfindung abzuweichen. Die verschiedenen Ausführungsbeispiele schließen sich nicht notwendig gegenseitig aus sondern es können verschiedene Ausführungsformen miteinander kombiniert werden, so dass neue Ausführungsformen entstehen. Im Rahmen dieser Beschreibung werden die Begriffe ”verbunden”, ”angeschlossen” sowie ”gekoppelt” verwendet zum Beschreiben sowohl einer direkten als auch einer indirekten Verbindung, eines direkten oder indirekten Anschlusses sowie einer direkten oder indirekten Kopplung.
  • Im Folgenden werden Ausführungsformen beschrieben, bei denen mittels eines Schaltkreises (z. B. gemäß einem Algorithmus) Fehler korrigiert werden, die bei der Übertragung oder der Speicherung von Daten auftreten. Gemäß weiteren Ausführungsbeispielen wird ein Schaltkreis bereitgestellt, der als mit einem solchen Schaltkreis verwandt angesehen werden kann und die Rekonstruktion von PUF-Werten ermöglicht. Gemäß verschiedenen Ausführungsformen werden dabei hohe Fehlerraten (ca. 10%) korrigierbar gemacht.
  • Die Abkürzung PUF steht für „Physical unclonable function” oder Physikalische Hashfunktion. Die Idee dabei ist, physikalische Eigenschaften eines Objektes zu digitalisieren und so eine dem Objekt zugeordnete Bitfolge (Nummer) zu erhalten. Dabei ist es wünschenswert, dass die Bitfolgen zweier verschiedener physikalischer Objekte zueinander unkorreliert sind. Ein einfaches Beispiel zur Veranschaulichung ist ein Blatt Papier. Unter einem Mikroskop betrachtet erkennt man eine spezielle Feinstruktur der Holzspäne oder Zellstoffteile. Die Struktur kann mit Hilfe eines geeigneten Verfahrens vermessen werden und das Ergebnis als Bitfolge dargestellt werden. Diese Bitfolge ist die PUF oder der PUF-Wert für das Blatt. Ein anderes Blatt Papier ergibt bei diesem Vorgehen im Allgemeinen eine Bitfolge, die unkorreliert ist zur Bitfolge des ersten Blatts.
  • Den Prozess der Erzeugung einer Bitfolge (des PUF-Werts) aus den Eigenschaften des physikalischen Objektes wir als PUF-Generierung bezeichnet. Es ist wünschenswert, dass die PUF-Generierung auf effiziente Weise möglich ist.
  • Eine wünschenswerte Eigenschaft eines PUF-Generierungs-Mechanismus ist, dass dasselbe physikalische Objekt bei jeder PUF-Generierung jedes Mal dieselbe Bitfolge ergibt (z. B. bei jeder PUF-Anforderung). Dies ist jedoch typischerweise nicht der Fall. Eine wiederholte PUF-Generierung für dasselbe physikalische Objekt liefert typischerweise Bitfolgen, die zwar untereinander sehr ähnlich, aber im Allgemeinen nicht miteinander identisch sind. Dieses Defizit kann mit Methoden der Codierungstheorie (Fehlerkorrektur) ausgeglichen werden.
  • Dabei wird beispielsweise wie folgt vorgegangen: Gegeben sei ein physikalisches Objekt. Man erzeugt die dem Objekt zugeordnete erste PUF-Bitfolge A, und bezeichnet A als den wahren PUF-Wert. Aus dem wahren PUF-Wert A wird ein zugehöriger Hilfsvektor (auch bezeichnet als Hilfsinformation) b berechnet. Der Hilfsvektor b wird als öffentlich zugängliche Information betrachtet. Z. B. wird b in einer nicht sicheren Umgebung abgespeichert. Der wahre PUF-Wert A selbst ist geheim und wird gar nicht abgespeichert und steht daher auch nicht direkt zur Verfügung. Bei einer späteren erneuten PUF-Generierung erhält man einen neuen PUF-Wert A'. Der Wert A' ist im Allgemeinen nicht identisch mit A, unterscheidet sich aber von A nur geringfügig. Ziel ist, den wahren PUF-Wert A wiederzugewinnen, ihn aus dem vorhandenen aktuellen PUF-Wert A' zu rekonstruieren. Dabei verwendet man die abgespeicherten Hilfsdaten b.
  • 1 zeigt ein Ablaufdiagramm 100.
  • Das Ablaufdiagramm 100 veranschaulicht ein Verfahren zum Ermitteln eines Fehlervektors in einem Datenwort.
  • In 101 wird das Syndrom des Fehlervektors ermittelt.
  • In 102 werden sukzessive Codewörter durch zyklisches Vertauschen ein oder mehrerer vorgegebener Codewörter erzeugt.
  • In 103 wird für jedes erzeugte Codewort die Summe des mit Nullen auf Datenwortlänge ergänzten Syndroms mit dem Codewort gebildet und für das Codewort überprüft, ob die Summe des mit Nullen auf Datenwortlänge ergänzten Syndroms mit dem Codewort unter allen Codewörtern minimales Gewicht hat.
  • In 104 wird der Fehlervektor als die Summe des Syndroms mit dem Codewort, für das die Summe des mit Nullen auf Datenwortlänge ergänzten Syndroms mit dem Codewort unter allen Codewörtern minimales Gewicht hat, ermittelt.
  • In anderen Worten werden die zyklischen Vertauschungen eines Codeworts durchlaufen, jede zyklische Vertauschung zu dem Syndrom addiert (das geeignet mit Nullen auf Codewortlänge ergänzt ist) und für jede zyklische Vertauschung ermittelt, ob ihre Summe mit dem Syndrom minimales Gewicht hat. Ist dies der Fall, wird die Summe als Fehlervektor verwendet.
  • Wenn das Nullwort ein Codewort ist, beispielsweise im Fall eines linearen Codes, kann das Minimum auch für das Syndrom selbst (d. h. für Summe aus Nullwort und Syndrom) angenommen werden. In diesem Fall wird also der Fehlervektor durch Ergänzen des Syndroms mit Nullen auf Datenwortlänge ermittelt. Beispielsweise kann vorab überprüft werden, ob das Hamminggewicht des Syndroms geringer ist als die halbe Hammingdistanz des Codes und in diesem Fall der Fehlervektor als ergänztes Syndrom ermittelt werden, bevor weitere Codewörter (durch zyklische Vertauschung eines Codeworts) erzeugt werden.
  • Unter der zyklischen Vertauschung eines Codeworts ist die zyklische Permutation eines Codeworts zu verstehen. Beispielsweise wird das Codewort in ein Schieberegister eingespeichert, dessen letztes Speicherelement (z. B. Flip-Flop) mit dem ersten Speicherelement verbunden ist, so dass ein an einem Ende herausgeschobenes Bit am anderen Ende in das Schieberegister hineingeschoben wird.
  • Gemäß einer Ausführungsform weist das ferner Verfahren ferner das Korrigieren des Datenworts mittels des Fehlervektors auf.
  • Gemäß einer Ausführungsform weist das Verfahren ferner das Ausgeben des korrigierten Datenworts an eine Verarbeitungseinrichtung auf.
  • Das Datenwort ist beispielsweise ein mit dem Code codiertes Nachrichtenwort.
  • Das Verfahren kann ferner das Empfangen des Datenworts von einem Sender aufweisen.
  • Das Syndrom des Fehlervektors ist beispielsweise das Syndrom des Datenworts.
  • Das Datenwort kann auch ein PUF-Wort sein.
  • Das Verfahren kann beispielsweise ferner das Empfangen des Datenworts von einer Schaltung, die eine PUF implementiert, aufweisen.
  • Das Syndrom des Fehlervektors ist beispielsweise die Summe aus dem Syndroms des Datenvektors und eines Hilfsvektors.
  • Der Hilfsvektor ist beispielsweise das Syndrom eines bei einer Initialisierung ermittelten PUF-Worts, das sich von dem Datenwort um den Fehlervektor unterscheidet.
  • Gemäß einer Ausführungsform weist das Prüfen, ob die Summe des auf Datenwortlänge ergänzten Syndroms mit dem Codewort minimales Gewicht hat, das Prüfen auf, ob das Gewicht der Summe kleiner als die halbe Hammingdistanz des Codes ist.
  • Gemäß einer Ausführungsform weist das Verfahren das Abbrechen des sukzessiven Erzeugens von Wörtern der Menge auf, wenn ein Codewort gefunden wurde, für das das Gewicht der Summe kleiner als die halbe Hammingdistanz des Codes ist.
  • Gemäß einer Ausführungsform weist das Prüfen, ob die Summe des auf Datenwortlänge ergänzten Syndroms mit dem Wort minimales Gewicht hat, das Ermitteln, für alle erzeugten Codewörter, der Summe des auf Datenwortlänge ergänzten Syndroms mit dem Codewort und den Vergleich der ermittelten Summen auf.
  • Gemäß einer Ausführungsform weist das Verfahren ferner das Ermitteln des Datenworts als nicht korrigierbar auf, wenn für kein Codewort die Summe des mit Nullen auf Datenwortlänge ergänzten Syndroms mit dem Codewort unter allen Codewörtern minimales Gewicht hat.
  • Das Ergänzen des Syndroms mit Nullen auf Datenwortlänge erfolgt beispielsweise gemäß einer Kontrollmatrix, die ebenso viele Einheitsvektoren aufweist, wie das Syndrom Komponenten hat.
  • Beispielsweise erfolgt das Ergänzen des Syndroms mit Nullen auf Datenwortlänge gemäß einer Kontrollmatrix, die eine Einheitsmatrix mit der Zeilenanzahl gleich der Anzahl von Komponenten des Syndroms aufweist.
  • Das Ergänzen des Syndroms mit Nullen auf Datenwortlänge weist beispielsweise das Einfügen von Nullen in das Syndrom an Stellen auf, die Spalten der Kontrollmatrix entsprechen, die keine Einheitsvektoren sind.
  • Gemäß einer Ausführungsform ist der Code ein zyklischer Code.
  • Gemäß einer Ausführungsform besteht der Code aus dem Nullwort und allen zyklischen Vertauschungen eines Codeworts ungleich dem Nullwort.
  • Die Codewörter werden beispielsweise durch zyklisches Vertauschen eines einzigen Codeworts erzeugt.
  • Beispielsweise ist der Code ein Simplex-Code.
  • Das in 1 dargestellte Verfahren wird beispielsweise von einer Vorrichtung, wie sie in 2 dargestellt ist, durchgeführt.
  • 2 zeigt eine Datenverarbeitungseinrichtung 200 zum Ermitteln eines Fehlervektors in einem Datenwort gemäß einer Ausführungsform.
  • Die Datenverarbeitungseinrichtung 200 weist eine Syndromermittlungsschaltung 201, die eingerichtet ist, das Syndroms des Fehlervektors zu ermitteln auf.
  • Die Datenverarbeitungseinrichtung 200 weist ferner eine Decodierschaltung 202 auf, die eingerichtet ist, sukzessiv Codewörter durch zyklisches Vertauschen ein oder mehrerer vorgegebener Codewörter zu erzeugen, für jedes erzeugte Codewort, die Summe des mit Nullen auf Datenwortlänge ergänzten Syndroms mit dem Codewort zu bilden und für das Codewort zu überprüfen, ob die Summe des mit Nullen auf Datenwortlänge ergänzten Syndroms mit dem Codewort unter allen Codewörtern minimales Gewicht hat.
  • Ferner weist die Datenverarbeitungseinrichtung 200 eine Ausgabeschaltung 203 auf, die eingerichtet ist, die Summe des Syndroms mit dem Codewort, für das die Summe des mit Nullen auf Datenwortlänge ergänzten Syndroms mit dem Codewort unter allen Codewörtern minimales Gewicht hat, als Fehlervektor auszugeben.
  • Die Datenverarbeitungseinrichtung empfängt den Datenvektor, beispielsweise einen PUF-Wert oder einen Nachrichtenvektor, beispielsweise von einer Datenquelle 204. Der Fehlervektor wird beispielsweise von einer Korrekturschaltung 205 zur Korrektur des Datenvektors empfangen, die das Datenwort nach Korrektur an weitere Komponenten 206 (zur weiteren Verarbeitung) weitergibt.
  • Die Komponenten der Datenverarbeitungseinrichtung (z. B. die Syndromermittlungsschaltung, die Decodierschaltung und die Ausgabeschaltung) können durch ein oder mehrere Schaltkreise oder (Teil-)Schaltungen realisiert sein. In einer Ausführungsform ist ein ”Schaltkreis” oder eine „Schaltung” als jegliche Einheit zu verstehen, die eine Logik implementiert, und die sowohl Hardware, Software, Firmware oder eine Kombination daraus sein kann. Somit kann ein ”Schaltkreis” oder eine „Schaltung” in einer Ausführungsform ein hart-verdrahteter Logik-Schaltkreis oder ein programmierbarer Logik-Schaltkreis sein, wie beispielsweise ein programmierbarer Prozessor. Unter einem ”Schaltkreis” oder einer „Schaltung” kann auch ein Prozessor zu verstehen sein, der Software ausführt. Unter einem ”Schaltkreis” oder „Schaltung” kann in einer Ausführungsform jegliche Art der Implementierung der im Weiteren beschriebenen Funktionen zu verstehen sein.
  • Im Folgenden werden Ausführungsbeispiele genauer beschrieben.
  • Die im Folgenden beschriebenen Ausführungsbeispiele basieren auf einem binären linearen (n, k, d) Code. Die Parameter haben die folgende Bedeutung:
    n ist die Länge eine Codeworts in Bit.
    k ist die Dimension des Codes, d. h. der Code besteht aus 2k Codewörtern.
    d ist die Minimumdistanz des Codes.
  • Die Menge aller Codewörter wird mit dem Buchstaben C bezeichnet und heißt Code.
  • Ein binärer linearer (n, k, d) Code ist ein k-dimensionaler Unterraum des Vektorraums Vn = F2 n (auch bezeichnet als GF(2)n.
  • Der Vektorraum Vn besteht aus allen binären Vektoren der Länge n, auch bezeichnet als n-Bitwörter.
  • Sei v ∊ Vn. Die Vektorschreibweise für v ist v = (v0, v1, ..., vn-1). Die Wortschreibweise für v ist v = v0v1 ... vn-1.
  • Das Hamminggewicht w(v) eines Vektors aus Vn ist die Anzahl der Einsen in v. Die Hammingdistanz zweier Vektoren u und v aus Vn ist die Anzahl der Koordinatenstellen, in denen u und v unterschiedliche Einträge haben. Bei einem linearen Code ist die Hammingdistanz d(u, v) zweier Vektoren u, v ∊ Vn gleich dem Hamminggewicht des Summenvektors u + v.
  • Beispiel: Sei u = 1000 und v = 1010. Dann ist d(u, v) = 1. Das (Hamming-)Gewicht der Summe u + v = 0010 ist w(u + v) = 1. Ferner gilt w(u) = 1 und w(v) = 2.
  • Bei der Codierung einer Nachricht mittels eines binären linearen (n, k, d) Code können k Nachrichtenbits a0, a1, ..., ak-1 frei gewählt werden. Zu den k Nachrichtenbits werden dann (gemäß einer Rechenvorschrift entsprechend dem Code) r = n – k Kontrollbits bk, bk+1, ..., bn-1 berechnet. Die Kontrollbits werden an die Nachrichtenbits angehängt, wodurch ein Codewort c ∊ C entsteht: c = a0a1 ... ak-1bkbk+1 ... bn-1.
  • Es gibt 2k verschiedene Codewörter, entsprechend den 2k Möglichkeiten, die k Nachrichtenbits zu wählen.
  • Sei C = {c1, c2, ..., cM} ein binärer linearer (n, k, d) Code, wobei M = 2k. Die Minimumdistanz d des Codes C ist die kleinstmögliche Hammingdistanz, die zwei verschiedende Codewörter aus C zueinander haben können. Es gilt also d(ci, cj) ≥ d für 1 ≤ i < j ≤ M.
  • Für lineare Codes kann die Minimumdistanz d des Codes auch durch die Hamminggewichte der Codewörter von C beschrieben werden: Die Minimumdistanz d ist das kleinste Hamminggewicht unter allen von 0 verschiedenen Codewörtern von C. Das heißt, w(ci) ≥ d für alle c ∊ C mit c ≠ 0.
  • Eine Hammingkugel B(c, r) um ein Codewort c ∊ C ⊆ Vn mit Radius r ≥ 0 ist die Menge aller Vektoren aus Vn, deren Hammingdistanz zu c kleiner oder gleich r ist. Das heißt, B(c, r) = {x ∊ Vn:d(x, c) ≤ r}.
  • Beispiel: Sei C ein Code der Länge n = 5. Das heißt, C ⊆ V5 = F2 5. Sei c = 11000 ein Codewort. Dann gibt es einen Vektor x ∊ V5 mit d(x, c) = 0, nämlich x = c. Es gibt fünf Vektoren x ∊ V5 mit d(x, c) = 1; nämlich x1 = 01000, x2 = 10000, x3 = 11100, x4 = 11010, x5 = 11001.
  • Es gibt ( 5 / 2) = 10 Vektoren x ∊ V5 mit d(x, c) = 2. Das sind die zehn Vektoren x1,2 = 00000, x1,3 = 01100; x1,4 = 01010, x1,5 = 01001, x2,3 = 10100, x2,4 = 10010, x2,5 = 10001; x3,4 = 11110, x3,5 = 11101, x4,5 = 11011.
  • Die Hammingkugel B(c, 2) enthält also ( 5 / 0) + ( 5 / 1) + ( 5 / 2) = 1 + 5 + 10 = 16 Vektoren.
  • 3 zeigt zwei Darstellungen 301, 302 der Hammingkugel 300 in V5 mit Radius 2.
  • Die erste Darstellung 301 zeigt ein Codewort 303, das von Datenwörtern mit Hammingdistanz 1 auf einem ersten Ring 304 und Datenwörtern mit Hammingdistanz 2 auf einem zweiten Ring 305 umgeben ist.
  • Die zweite Darstellung 302 ist eine vereinfachte Darstellung, die im Folgenden verwendet wird.
  • Über die zweite Darstellung 302 darf aber nicht vergessen werden, dass eine Hammingkugel kein kontinuierliches Gebilde ist, sondern eine Ansammlung diskreter Punkte. (Da es sich nicht um Punkte in der Ebene, sondern einen n-dimensionalen Raum handelt, sind Hammingkugeln auch im Allgemeinen nicht rund. Die erste Darstellung 301 stellt somit ebenfalls eine Vereinfachung dar.)
  • Die Hammingkugel B(c; r) mit Mittelpunkt c ∊ C ⊆ Vn und Radius r bei einem einen binären linearen (n, k, d) Code enthält 1 + ( n / 1) + ( n / 2) + ... + ( n / r) Vektoren des Vektorraums Vn.
  • Zur Erläuterung der Fehlerkorrektur sei C ein linearer (n, k, d) Code und t eine ganze Zahl mit der Eigenschaft d = 2t + 1, falls d ungerade ist, und d = 2t + 2, wenn d gerade ist, d. h. t ist die größte ganze Zahl mit t < d/2.
  • Beispiel: Für d = 9 ist t = 4. Für d = 8 ist t = 3. Für d = 10 ist t = 4.
  • Sei c ein Codewort. Die Hammingkugel B(c; t) enthält
    Figure DE102014118531B4_0002
  • Vektoren, einschließlich dem Codewort c, das den Mittelpunkt der Hammingkugel darstellt. Jeder Vektor (d. h., jedes empfangene Nachrichtenwort), das in der Kugel liegt, wird durch die Dekodierung auf c zurückgesetzt. Das heißt, für alle y ∊ B(c, t) geschieht die Fehlerkorrektur durch y
    Figure DE102014118531B4_0003
    c. Der betrachtete (n, k, d) Code hat die Dimension k. Das heißt, es gibt 2k Codewörter. Daher gibt es 2k verschiedene (sich nicht überschneidende) Hammingkugeln (in deren Mittelpunkt sich jeweils ein Codewort befindet.)
  • Die Vektoren in diesen 2k Hammingkugeln sind genau die korrigierbaren Nachrichtenvektoren. Es gibt somit
    Figure DE102014118531B4_0004
    korrigierbare Nachrichtenvektoren in dem Raum aller möglichen Nachrichtenvektoren, der 2n Vektoren umfasst. Der relative Anteil der korrigierbaren Vektoren ist daher gegeben durch
    Figure DE102014118531B4_0005
  • Beispiel: Für den (31, 5, 16) Simplex Code gilt t = 7. Es gibt 231 mögliche Nachrichtenvektoren. Die Anzahl der korrigierbaren Nachrichtenvektoren beträgt daher
    Figure DE102014118531B4_0006
    d. h. nur 5,3% aller Nachrichten sind gemäß der obigen Vorgehensweise korrigierbar.
  • Im Unterschied zu der obigen Vorgehensweise, die als klassische Dekodierung angesehen werden kann, wird gemäß einer Ausführungsform eine Superdekodierung durchgeführt, wie sie im Folgenden beschrieben wird und in 4 veranschaulicht ist.
  • 4 zeigt einen Vergleich von 15 Hammingkugeln 401 mit 15 Super-Hammingkugeln 402.
  • Ein gemäß der obigen Vorgehensweise dekodierbarer Nachrichtenvektor wird im Folgenden als klassisch dekodierbar bezeichnet, d. h. ein Vektor y heißt klassisch decodierbar, wenn es ein Codewort c ∊ C gibt mit d(y, c) ≤ t.
  • Entsprechend ist ein Nachrichtenvektor, der sich innerhalb einer Hammingkugel 401 befindet, klassisch decodierbar (d. h. korrigierbar): Decodierbar heißt, dass der Nachrichtenvektor bei der Dekodierung ersetzt wird durch das Codewort im Mittelpunkt der Kugel. Punkte außerhalb der Kugeln 401, sind nicht klassisch korrigierbar.
  • Für den Simplex Code können beispielsweise einfache Schaltkreise zur Kodierung und Dekodierung für die klassische Fehlerkorrektur verwendet werden, d. h. die Korrektur von Fehlern, die sich innerhalb einer Kugel mit Radius d/2 um das Codewort befinden, wobei der Parameter d die Minimumdistanz des Codes bezeichnet. Damit können nur moderate Fehlerraten bedient werden.
  • Im Unterschied dazu wird ein Vektor y als superdecodierbar bezeichnet, wenn es ein eindeutig bestimmtes Codewort c ∊ C gibt mit d(y, c) = d(y, C), d. h. y heißt superdecodierbar, wenn es ein eindeutiges c ∊ C gibt mit d(y, c) < d(y, c') für alle c' ∊ C mit c' ≠ c. Die Super-Hammingkugeln 402 stellen die entsprechenden Bereiche dar, innerhalb derer Vektoren superdecodierbar sind.
  • Entsprechend wird gemäß einer Ausführungsform eine Schaltung bereitgestellt, die zusätzlich zu den Nachrichten innerhalb der Hammingkugeln 401 auch zahlreiche Nachrichten korrigieren kann, die sich bereits außerhalb der Hammingkugel (aber innerhalb der entsprechenden Super-Hammingkugel) befinden, und zwar alle Nachrichten, für die gilt, dass sie zu dem Codewort, das den Kugelmittelpunkt darstellt, einen kleineren Abstand haben als zu allen anderen Codewörtern. Diese Nachrichten werden durch den Schaltkreis ebenfalls auf den Kugelmittelpunkt hin abgebildet. Zur Abgrenzung zu einem klassischen Decoder (d. h. einem Decoder, der eine klassische Fehlerkorrektur durchführt) wird ein solcher Decoder als Super-Decoder bezeichnet. Beim (31, 5, 16) Simplex Code können mit einem klassischen Decoder beispielsweise ca. 5,3% aller möglichen Nachrichten decodiert werden. Mit dem Super-Decoder sind es ca. 30%.
  • Als Anwendungsbeispiel wird zunächst im Folgenden der (7, 3, 4) Simplex Code betrachtet. Dieser kann mit dem primitiven Polynom f(x) = x3 + x + 1 realisiert werden. Mit dem primitiven Polynom f(x) wird die lineare Rekursionsformel un+3 = un+1 + un für n ≥ 0 assoziiert.
  • Die ersten drei Folgenglieder u0, u1, u2 können frei aus dem binären Zahlenkörper F2 = {0, 1} gewählt werden. Es gibt 23 = 8 Möglichkeiten, die Anfangswerte (u0, u1, u2) zu wählen. Mit Hilfe der linearen Rekursion werden zu jedem Anfangswert (u0, u1, u2) die nächsten vier Folgenglieder u3, u4, u5, u6 berechnet (so dass insgesamt 7 = 23 – 1 Folgeglieder vorliegen). Der Vektor der Länge 7 gegeben durch (u0, u1, u2, u3, u4, u5, u6) ist dann ein Codewort des (7, 3, 4) Simplex Codes. Auf diese Weise können alle acht Codewörter ermittelt werden: c0 = 0 0 0 0 0 0 0; c1 = 1 0 0 1 0 1 1; c2 = 0 1 0 1 1 1 0; c3 = 0 0 1 0 1 1 1; c4 = 1 1 0 0 1 0 1; c5 = 1 0 1 1 1 0 0; c6 = 0 1 1 1 0 0 1; c7 = 1 1 1 0 0 1 0.
  • Eine 4×7 Kontrollmatrix H des Simplex Codes ist gegeben durch
    Figure DE102014118531B4_0007
  • Die ersten 4 Spalten der Matrix H bilden die 4×4 Einheitsmatrix. Die letzten drei Spalten der Matrix H sind die 4 Bit langen Endstücke der Codewörter c1, c2, c3, d. h. die letzten drei Spalten der Matrix H können erzeugt werden, indem die drei Einheitsvektoren (1, 0, 0), (0, 1, 0), (0, 0, 1) jeweils mit Hilfe der obigen linearen Rekursion verlängert werden.
  • Die Kontrollmatrix H hat die Eigenschaft: HcT = 0 genau dann, wenn c ein Codewort ist.
  • Wenn y = (y0, y1, y2, y3, y4, y5, y6) ein beliebiger 7 Bit langer (binärer) Zeilenvektor ist, dann heißt der 4 Bit lange Spaltenvektor
    Figure DE102014118531B4_0008
    gegeben durch s = S(y) = HyT das Symdrom von y.
  • Es gilt also: Das Syndrom von einem Codewort ist stets Null. Und das Syndrom von einem Nicht-Codewort ist stets ungleich Null.
  • Aus Gründen der einfacheren Darstellung werden im Folgenden Spaltenvektoren waagrecht dargestellt, d. h. es wird im Folgenden nicht zwischen Spaltenvektoren und Zeilenvektoren unterschieden. Beispielsweise ist für y = (1, 1, 0, 0, 0, 0, 1) das Syndrom s = S(y) der Spaltenvektor
    Figure DE102014118531B4_0009
    der im Folgenden aber s = S(y) = (1, 0, 1, 1) geschrieben wird.
  • Im Folgenden wird die Syndromberechnung für den Simplex Code erläutert.
  • Jeder lineare (n, k, d) Code besitzt eine (n – k)×n Kontrollmatrix H (d. h. die Matrix enthält n – k Zeilen und n Spalten). Sei y ein Zeilenvektor der Länge n. Dann ist das Syndrom von y definiert durch eine Matrix-Vektor-Multiplikation: S(y) = HyT
  • Die Kontrollmatrix H ist nicht eindeutig bestimmt. Mehrere unterschiedliche Kontrollmatrizen können denselben linearen Code beschreiben (in dem Sinn, dass ein Vektor c genau dann ein Codewort ist, wenn HcT = 0).
  • Es ist jedoch für jeden linearen Code möglich, die Kontrollmatrix H so zu wählen, dass sie die Form H = (In-k, A) hat, wobei In-k die (n – k)×(n – k) Einheitsmatrix ist. Für den hier betrachteten (7, 3, 4) Simplex Code wird im Folgenden für die Kontrollmatrix H eben diese Form gewählt:
    Figure DE102014118531B4_0010
  • Sei y = (y0, y1, y2, y3, y4, y5, y6). Dann ist
    Figure DE102014118531B4_0011
    bzw. S(y) = (y0 + y4 + y5, y1 + y5 + y6, y2 + y4 + y5 + y6, y3 + y4 + y6), wenn das Syndrom als Zeilenvektor dargestellt wird.
  • Für den Simplex Code kann das Syndrom durch einen einfachen Algorithmus berechnet werden: Gegeben sei der Zeilenvektor y = (y0, y1, ..., yn-1) der Länge n mit n = 2k – 1. Schreibe die ersten 2k – 1 – k Folgenglieder von y in eine Zeile. Berechne mit der linearen Rekursionsformel, die mit dem Polynom f(x) assoziiert ist, weitere 2k – 1 – k Folgenglieder, wobei die letzten k Koordinaten von y, also yn-k, ..., yn-2, yn-1 als Anfangswerte dienen (die der Folge aber nicht zugerechnet werden). Dann addiere die beiden Zeilen (durch bitweises XOR). Das Ergebnis ist das Syndrom S(y).
  • Für den hier betrachteten Simplex Code ist die Rechnung wie folgt: Sei y = (y0, y1, y2, y3, y4, y5, y6) gegeben. Die erste Zeile ist: y0, y1, y2, y3. Die lineare Rekursion yn+3 = yn+1 + yn mit den Anfangswerten (y4, y5, y6) liefert die zweite Zeile: y4 + y5, y5 + y6, y4 + y5 + y6, y4 + y6. Die bitweise Addition der beiden Zeilen liefert schließlich das Syndrom: y0 + y4 + y5, y1 + y5 + y6, y2 + y4 + y5 + y6, y3 + y4 + y6. Die Syndromberechnung lässt sich beispielsweise mit der in 5 dargestellten Schaltung ausführen.
  • 5 zeigt eine Schaltung 500 zur Syndromberechnung.
  • Die Schaltung 500 weist insgesamt 7 = 23 – 1 Flip-Flops 501 (allgemein für den (2k – 1, k, 2k–1) Simplex Code 2k–1 Flip-Flops) auf. Die Initialisierung erfolgt mit dem Zeilenvektor y wie in den Flip-Flops 501 angegeben. Die Flip-Flops 501 sind in einem linken Schaltkreis 502 und einem rechten Schaltkreis angeordnet. Der linke Schaltkreis 502 der Schaltung 500 ist ein zirkulierendes Schieberegister der Länge 4 = 23 – 1 – 3 (allgemein der Länge 2k – 1 – k). Der rechte Schaltkreis 503 der Schaltung ist ein LFSR (engl. linear feedback shift register, d. h. linear rückgekoppeltes Schieberegister) gemäß einem charakteristischem Polynom f(x) der Länge 3 (allgemein der Länge k = deg(f), d. h. dem Grad des Polynoms f).
  • Der Inhalt des rechten Schaltkreises 503 kann mittels eines Addierers 504 bitweise zu dem Inhalt des linken Schaltkreises 502 addiert werden.
  • Nach 4 = 23 – 1 – 3 (allgemein 2k – 1 – k) Takten enthält das Register auf der linken Seite (d. h. die Flip-Flops 501 des linken Schaltkreises 502) die Einträge y0 + y4 + y5, y1 + y5 + y6, y2 + y4 + y5 + y6, y3 + y4 + y6, welche die vier Koordinaten des Syndroms darstellen (allgemein die 2k – 1 – k Koordinaten).
  • 6 zeigt ein Beispiel für einen Decoder 600 für den Simplex-Code.
  • Der Decoder 600 weist drei Register 601, 602, 603 auf. Das obere Register 601 ist ein zirkulierendes Schieberegister der Länge 23 – 1 = 7 (allgemein der Länge 2k – 1) mit einem fest eingeprägten Anfangszustand.
  • Die Angangsbelegung entspricht einem Codewort des Simplex Codes. Hier dem Codewort c5. Das mittlere Register 602 hat die Länge 23 – 1 – 3 = 4. Es enthält das Syndrom s = S(y) des zu korrigierenden Nachrichtenvektors y. Das mittlere Register 602 kann also beschrieben werden, so dass das vorab berechnete Syndrom s in das Register eingelesen werden kann. (Das Syndrom s kann beispielsweise mit dem in 5 dargestellten Schaltkreis berechnet werden.)
  • Das untere Register 603 hat die Länge 7. In diesem Register steht am Ende der Ausführung des Fehlerdetektionsalgorithmus der Fehlervektor e. Für das untere Register 603 kann die Anzahl der Einsen (in den 7 Zellen) gezählt werden, d. h. das Hamminggewicht w = w(v) des aktuellen im unteren Register 603 gespeicherten 7-Bit Vektors v kann bestimmt werden. Das untere Register 603 kann auch zurückgesetzt werden. Bei Zurücksetzen werden alle Registerinhalte gelöscht. Der Inhalt des unteren Registers 603 kann ausgelesen werden.
  • Die linken vier Bits des Inhalts des ersten Registers 601 können mit dem Inhalt des zweiten Registers 602 mittels Addierern 604 kombiniert werden.
  • Im Folgenden wird der Algorithmus für die Fehlerdetektion bzw. Fehlerkorrektur gemäß einer Ausführungsform beschrieben.
  • Hinsichtlich der Fehlerkorrekturfähigkeit ist zu beachten, dass für den betrachteten (7, 3, 4) Simplex Code die Minimumdistanz d = 4 ist. Daher kann jeder Einbitfehler korrigiert werden (da 1 < d/2 = 2). Die Superdecodierfähigkeit kommt in diesem Beispiel nicht zum Tragen.
  • Der Decoder 600 arbeitet beispielsweise gemäß dem folgenden Algorithmus.
  • Sei y die empfangene (potentiell fehlerhafte) Nachricht.
    • 1. Berechne das Syndrom s = S(y). Wenn s = 0, wird y als fehlerfrei betrachtet. Fertig.
    • 2. Sei s ≠ 0. Berechne das Hamminggewicht w = w(s). Wenn w < d/2 = 2, dann werden an den Vektor s genau k = 3 Nullen angehängt. Das auf diese Weise verlängerte Syndrom ist der Fehlervektor e. Es ist c = y + e die korrigierte Nachricht. Fertig.
    • 3. Sei w(s) ≥ d/2 = 2. Lese das Syndrom s in das mittlere Register 602 ein. Kombiniere die Inhalte des oberen Registers 601 und des mittleren Registers 602 mittels der Addierer 604. Dabei werden die ersten (d. h. linken) vier Bits des oberen Registers 601 bitweise zum Inhalt des mittleren Registers 602 addiert und die letzten (rechten) drei Bits des oberen Registers 601 unverändert in das untere Register 603 übernommen. Das Ergebnis dieser Addition wird mit E0 bezeichnet. Der 7-Bit Vektor E0 steht im unteren Register 603. Bestimme w(E0), das Hamminggewicht des Vektors E0. Wenn w(E0) < d/2, dann setze e = E0. Der Vektor e ist der gesuchte Fehlervektor. Fertig.
    • 4. Sei w(E0) ≥ d/2. Takte das obere Register 601 einmal, d. h. der Inhalt des oberen Registers 601 wird um eine Position zyklisch nach links verschoben. Kombiniere den (verschobenen) Inhalt des oberen Registers 601 mit dem gleichgebliebenen Inhalt des mittleren Registers 602 wie in 3. Hierdurch wird ein neuer Vektor w(E1) im unteren Register 603 erhalten. Berechne w(E1). Wenn w(E1) < d/2, dann setze e = E1. Fertig. Andernfalls wiederhole 4. solange bis ein Vektor Ej mit w(Ej) < d/2 im unteren Register 603 auftritt. Das ist der Fehlervektor e = Ej. Fertig.
    • 5. Das obere Register 601 kann sieben Mal getaktet werden, dann befindet es sich wieder in seinem Ausgangszustand. Wenn sich bei diesen sieben Versuchen im unteren Register 603 niemals ein Vektor Ej ergibt mit Hamminggewicht kleiner als d/2, dann ist y nicht korrigierbar. Fertig.
  • Beispiel: Die empfangene Nachricht sei y = 1110101. Berechne das Syndrom: s = S(y) = 0010. Berechne das Hamminggewicht: w(s) = 1 < d/2 = 2. Der Fehlervektor ist e = (s; 000) = 0010000. Die korrigierte Nachricht ist daher c = y + e = 1100101.
  • Beispiel: Die empfangene Nachricht sei y = 0111011. s = 1110, w(s) = 3. E0 = 0101100, w(E0) = 3, wiederhole. E1 = 1001001, w(E1) = 3, wiederhole. E2 = 0000010, w(E2) = 1 < d/2, fertig. Der Fehlervektor ist e = E2 = 0000010. Die korrigierte Nachricht c ist gegeben durch c = y + e = 0111001.
  • Der Decoder 600 kann wie folgt zu einem PUF-Decoder erweitert werden.
  • Sei a der wahre PUF-Wert. Die Hilfsinformation zu a sei mit b bezeichnet, wobei b das Syndrom von a ist: b = S(a) = HaT.
  • Sei a' der aktuelle vorliegende PUF-Wert. Das Ziel ist, den wahren PUF-Wert a aus a' und b zu rekonstruieren.
  • Dazu kann der Decoder 600 mit den folgenden Anpassungen verwendet werden:
    Sei a' der aktuelle (potentiell fehlerhafte) PUF-Wert und sei b die zum wahren PUF-Wert a gehörige abgespeicherte Hilfsinformation.
  • 1'. Berechne das Syndrom s' = S(a'). Berechne s = s' + b. Wenn s = 0, wird a' als fehlerfrei betrachtet. Setze a = a'. Fertig. Alle anderen Schritte des oben für den Decoder 600 beschriebenen Algorithmus bleiben gleich. Im unteren Register 603 wird am Ende des Algorithmus der Fehlervektor e erhalten. Der wahre PUF-Wert a ist dann gegeben durch a = a' + e.
  • Beispiel 1: Sei der aktuelle PUF-Wert a' = 1010011 und die Hilfsinformation sei b = 1000. Das Syndrom s' von a' ist s' = S(a') = Ha'T = 0011.
  • Dann wird s = s' + b = 1011 berechnet. Das Hamminggewicht ist w(s) = 3, daher wird Schritt 3. durchgeführt. Dies liefert E0 = 0000100. Da w(E0) = 1 < d/2 ist, ist E0 bereits der gesuchte Fehlervektor: e = E0 = 0000100. Der wahre PUF-Wert a ist a = a' + e = 1010111.
  • Der Vektor s kann direkt mit der in 7 gezeigten Schaltung berechnet werden.
  • 7 zeigt eine Schaltung 700 zur Berechnung eines Syndroms zur PUF-Rekonstruktion.
  • Die Verwendung der Schaltung 700 ist effizienter als eine Multiplikation mit der der Kontrollmatrix H zu implementieren.
  • Die Schaltung 700 weist einen linken Schaltkreis 701 und einen rechten Schaltkreis 702 entsprechend den Schaltkreisen 502, 503 der Schaltung 500 auf. Lediglich weist der Addierer 703 des linken Schaltkreises 701 einen zusätzlichen Eingang auf, über dem die in einem Register 704 gespeicherte Hilfsinformation dem linken Schaltkreis 702 zugeführt (d. h. bitweise in den linken Schaltkreis 702 eingeschoben) werden kann.
  • Initialisiert wird die Schaltung 700 wie dargestellt mit dem Vektor a'. 7 zeigt den Zustand der Schaltung 700 zum Zeitpunkt t = 0, d. h. unmittelbar nach der Initialisierung. Nach vier Takten, also zum Zeitpunkt t = 4 enthält das Register des linken Schaltkreises 701 den benötigten Vektor s.
  • Als weiteres Beispiel wird der (15, 4, 8) Simplex Code betrachtet.
  • Das primitive Polynom f(x) = x4 + x + 1 kann zur Konstruktion des (15, 4, 8) Simplex Codes benutzt werden. Dieser Code besteht aus 24 = 16 Codewörtern, die jeweils 15 Bit lang sind.
  • Der Code hat die Minimumdistanz d = 8. Klassisch korrigierbar (gemäß der obigen Definition) sind alle 1, 2, und 3-Bitfehler. Darüber hinaus sind 31% aller 4-Bitfehler gemäß Superdecodierung korrigierbar.
  • Die 11×15 Matrix
    Figure DE102014118531B4_0012
    ist eine Kontrollmatrix diese Codes. Mit Hilfe der Matrix H wird das Syndrom S(y) für einen 15-Bit Vektor y berechnet: S(y) = HyT
  • Die ersten n – k = 15 – 4 = 11 Spalten der Matrix H bilden die 11×11 Einheitsmatrix I11. Die letzten k = 4 Spalten der Matrix H können mittels der (mit f(x) = x4 + x + 1 assoziierten) Rekursionsformel un+4 = un+1 + un und den Anfangswerten (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0, 1) erzeugt werden. Zum Beispiel ergibt die Rekursionsformel mit dem Anfangsvektor (0, 0, 0, 1), d. h. mit u0 = u1 = u2 = 0 und u3 = 1 die Folgenglieder
    u4 = 0, u5 = 0, u6 = 1, u7 = 1, u8 = 0, u9 = 1, u10 = 0, u11 = 1, u12 = 1, u13 = 1,
    und u14 = 1, d. h. die letzte Spalte der Matrix H.
  • Anstatt die Matrixmultiplikation auszuführen bzw. in Hardware zu implementieren, kann das Syndrom mit der in 8 gezeigten Schaltung berechnet werden.
  • 8 zeigt eine Schaltung 800 zur Syndromberechnung.
  • Die Schaltung 800 weist analog zur Schaltung 500 einen linken Schaltkreis 801 und einen rechten Schaltkreis 802 auf, die dem linken Schaltkreis 501 und dem rechten Schaltkreis 502 entsprechend bis auf die Anpassung der jeweiligen Registerlängen an den in diesem Beispiel verwendeten Code.
  • Es sei angenommen, dass y = (y0, y1, ..., y14) die empfangene Nachricht ist. Gesucht ist S(y), das Syndrom von y. Dann wird die Schaltung 800 mit dem Vektor y initialisiert. Die ersten 11 Komponenten y0, y1, ..., y10 werden in den linken Schaltkreis 801, d. h. das linke zirkulierende Schieberegister gespeichert. Die letzten vier Koordinaten y11, y12, y13, y14 werden in dem rechten Schaltkreis 802, d. h. dem linear rückgekoppelten Schieberegister gespeichert.
  • Dann wird der Schaltkreis 800 elf Mal getaktet. Danach befindet sich das 11 Bit lange Syndrom im Register des linken Schaltkreises 801. Der Inhalt des 4 Bit langen Registers des rechten Schaltkreises 802 kann ignoriert werden.
  • 9 zeigt eine Schaltung 900 zur Syndromberechnung zur PUF-Rekonstruktion.
  • Die Schaltung 900 weist einen linken Schaltkreis 901 und einen rechten Schaltkreis 902 entsprechend den Schaltkreisen 801, 802 der Schaltung 800 auf. Lediglich weist der Addierer 903 des linken Schaltkreises 901 einen zusätzlichen Eingang auf, über dem die in einem Register 904 gespeicherte Hilfsinformation dem linken Schaltkreis 902 zugeführt (d. h. bitweise in den linken Schaltkreis 902 eingeschoben) werden kann.
  • Für den ursprünglichen, den sogenannten wahren, PUF-Wert a (der ein 15 Bit langer Zeilenvektor ist) wird ein 11 Bit langer Hilfsvektor b berechnet und abgespeichert. Dieser Hilfsvektor b ist genau das Syndrom von a. Das heißt b = S(a). Der Hilfsvektor b wird bereitgehalten, um in der Folge den wahren PUF-Wert a rekonstruieren zu können. (Der wahre PUF-Wert a wird beispielsweise aus Sicherheitsgründen nicht gespeichert.) Bei einer neuen PUF-Anforderung liefert die PUF einen aktuellen 15 Bit langer Vektor a'. Der Vektor a' ist im Allgemeinen eine fehlerhafte Version des wahren PUF-Werts a. Aus a' und b wird der wahre PUF-Wert a rekonstruiert.
  • Dabei ist es erforderlich, einen elf Bit langen Vektor s = (s0, s1, ..., s10) zu berechnen. Der Vektor s wird berechnet durch s = S(a') + b.
  • Die Berechnung von s kann mit der Schaltung 900 durchgeführt werden. Der linke Schaltkreis 901 und der rechte Schaltkreis 902 (Schieberegister) werden mit dem angefallenen PUF-Vektor a' initialisiert. Der Hilfsvektor b wird im Register 904 bereitgehalten.
  • Der Schaltkreis 900 wird elfmal getaktet. Danach befindet sich der gesuchte Vektor s in dem 11 Bit langen Schieberegister des linken Schaltkreises 901. Der Inhalt des linear rückgekoppelten Schieberegisters des rechten Schaltkreises kann ignoriert werden. Die Daten des Registers 904 wurden vollständig herausgeschoben.
  • Alternativ kann das Register 904, das den Hilfsvektor b enthält, als zirkulierendes, 11 Bit langes Schieberegister ausgeprägt werden. Wenn dieses Register mit dem Hilfsvektor b initialisiert ist, dann wäre es nach elf Takten nicht leer, sondern würde wiederum den Hilfsvektor b enthalten.
  • 10 zeigt einen Decoder 1000 zur PUF-Rekonstruktion für den (15, 4, 8) Simplex Code.
  • Analog zu dem Decoder 600 weist der Decoder drei Register 1001, 1002, 1003 und Addierer 1004 auf, deren Länge bzw. Anzahl an den in diesem Beispiel verwendeten Code angepasst sind.
  • Beispiel (PUF-Rekonstruktion):
    • a' = 110111010011111;
    • b = 11101011011;
    • s' = 11001110011 = S(a');
    • s = 00100101000 = s' + b.
  • Das Hamminggewicht w(s) = 3 < d/2 = 4. Der um k = 4 Nullen verlängerte Vektor s ergibt daher bereits den gesuchten Fehlervektor: e = (s, 0000) = 001001010000000.
  • Der wahre PUF-Wert a ist a = a' + e = 111110000011111.
  • Beispiel (PUF-Rekonstruktion):
    • a' = 011101001101111;
    • b = 11110001000;
    • s' = 01100111100 = S(a');
    • s = 10010110100 = s' + b.
  • Das Hamminggewicht w(s) = 5 ≥ d/2 = 4. Der Decoder 100 wird zur Berechnung der Vektoren E0, E1, ... verwendet. E0 = 000011000111000; w(E0) = 5 ≥ d/2, weiter. E1 = 101000110110001; w(E1) = 7 ≥ d/2, weiter. E2 = 111111010100010; w(E2) = 9 ≥ d/2, weiter. E3 = 010000010000100; w(E3) = 3 < d = 2, stopp.
  • Der Fehlervektor ist e = E3. Der wahre PUF-Wert a ist gleich a = a' + e = 001101011101011.
  • In den vorhergehenden Beispielen wurden Nachrichten korrigiert bzw. PUF-Werte rekonstruiert, bei denen weniger als d/2 Fehler auftraten.
  • Wenn d/2 oder mehr Fehler auftreten, ist in manchen Fällen ebenfalls die Korrektur mittels möglich. Dazu wird der Decoder 600 gemäß einer Ausführungsform wie folgt zur Superdecodierung benutzt. Das Vorgehen wird für den allgemeinen n = 2k – 1, k, d = 2k–1 Simplex Code beschrieben.
  • Das Gewicht w(s) des Syndroms ist im Falle der Superdecodierung größer als d/2. 1 bis 4 im oben im Zusammenhang mit dem Decoder 600 beschrieben Algorithmus werden so ausgeführt wie oben beschrieben. In 3 und 4 des Algorithmus werden der Reihe nach die Vektoren E0, E1, ..., En-1 mit n = 2k – 1 berechnet. Für jeden dieser Vektoren wird nun das Hamminggewicht ermittelt und die Hamminggewichte werden abgespeichert. Sei wj = w(Ej) für j = 0, 1, ..., n – 1. Dann wird die kleinste Zahl m aus der Menge {w0, w1, ...,wn-1; w(s)} bestimmt. Wenn das Minimum m der Menge unter den 2k Elementen der Menge nur einmal auftritt, dann ist der Nachrichtenvektor y bzw. der PUF-Wert a' korrigierbar.
  • Angenommen, für das Minimum m gilt m = wj für ein eindeutig bestimmtes j ∊ {0, 1, ..., n – 1}, dann ist der gesuchte Fehlervektor e = Ej. Wenn das eindeutig bestimmte Minimum m der Menge identisch ist mit w(s), dann ist der Fehlervektor e = (s; 0 0 ... 0), wobei k Nullen an s angehängt werden.
  • Beispiel (PUF-Rekonstruktion):
    • a' = 001000010010000;
    • b = 01000101110;
    • s' = 00100001001 = S(a');
    • s = 01100100111= s' + b.
  • Das Hamminggewicht w(s) = 6 ≥ d/2 = 4. Der Decoder (in diesem Beispiel mit der Dimensionierung gemäß 10) berechnet die Vektoren E0, E1, ..., E14. E0 = 111111100001000; E1 = 010100010000001; E2 = 000011110010010; ... E14 = 001010011001100.
  • Für jeden Vektor wird das Hamminggewicht bestimmt und abgespeichert. (Die Vektoren Ej selbst müssen nicht abgespeichert werden.) Die Gewichte der Ej sind w0 = 8; w1 = 4; w2 = 6; w3 = 8; w4 = 10; w5 = 8; w6 = 8; wn = 8; w8 = 8; w9 = 6; w10 = 6; w11 = 10; w12 = 12; w13 = 6; w14 = 6.
  • Zu diesen 15 Hamminggewichten wird noch der Wert w(s) = 6 hinzugefügt. Das Minimum aus der Menge dieser 16 Hamminggewichte ist 4 und das Minimum tritt ein einziges Mal auf, nämlich w1 = 4. Daher ist der gesuchte Fehlervektor e = E1 = 010100010000001.
  • Der wahre PUF-Wert a ist somit gegeben durch a = a' + e = 011100000010001.
  • Beispiel (PUF-Rekonstruktion):
    • a' = 011000011101100;
    • b = 10001000001;
    • s' = 00101100101 = S(a');
    • s = 10100100100 = s' + b.
    • w(s) = 4 ≥ d/2.
  • Es werden die 15 Vektoren E0, E1, ..., E14 berechnet und ihre Hamminggewichte bestimmt.
  • Dann wird das Minimum m wie folgt bestimmt: m = min(w0; w1; w2; ...; w13; w14; w(s)) = min(8; 6; 8; 6; 6; 10; 6; 8; 8; 8; 6; 8; 12; 6; 10; 4) = 4.
  • Das Minimum m = 4 wird nur einmal angenommen, nämlich für w(s) = 4. Daher ist der Fehlervektor e gegeben durch e = (s; 0000) = 101001001000000.
  • Der wahre PUF-Wert a ist a = a' + e = 110001010101100.
  • Beispiel (PUF-Rekonstruktion):
    • a' = 000010001111111;
    • b = 11111011100;
    • s' = 00011011101 = S(a');
    • s = 11100000001 = s' + b.
    • w(s) = 4 ≥ d/2.
  • Es werden wieder die Vektoren E0, E1, ..., E14 berechnet und ihre Hamminggewichte w0, w1, ..., w14 gespeichert. m = min(w0; w1; w2; ...; w13; w14; w(s)) = min(8; 8; 8; 8; 8; 8; 8; 8; 4; 4; 8; 8; 12; 8; 8; 4) = 4; wobei das Minimum m = 4 dreimal angenommen wird: w8 = 4, w9 = 4, w(s) = 4.
  • Der Fehlervektor e ist nicht eindeutig bestimmt. Stattdessen gibt es drei mögliche Fehlervektoren: e1 = E8, e2 = E9, e3 = (s, 0000).
  • Daher gibt es auch drei verschiedene Kandidaten für den wahren PUF-Wert a: a1 = a' + 'e1 = a' + E8 = 000110011110101; a2 = a' + e2 = a' + E9 = 000010101011010; a3 = a' + e3 = a' + (s, 0) = 111010001101111.
  • Gemäß einer Ausführungsform werden die Vektoren E0, E1, ..., E14 nicht gespeichert, um den dafür nötigen Speicherbedarf (und entsprechende Kosten) zu vermeiden. Zum Beispiel kann aus der Information w8 = 4 aber E8 berechnet werden: Takte den Decoder 1000 in Bild 6 achtmal, addiere s, und erhalte E8 im unteren Register 1003. Da w9 = 4, takte das obere Register 1001 ein weiteres Mal, addiere s, und erhalte E9. e1 = E8 = 000100010001010; e2 = E9 = 000000100100101; e3 = (s; 0) = 111000000010000.
  • Als weiteres Beispiel wird der (31, 5, 16) Simplex Code betrachtet.
  • Um den (31, 5, 16) Simplex Code zu konstruieren wird ein primitives binäres Polynom f(x) vom Grad k = 5 verwendet. Es gibt sechs solche Polynome. Das Polynom f(x) = x5 + x2 + 1 ist eines davon. Der betrachtete Simplex Code besteht aus 2k = 25 = 32 verschiedenen Codewörtern. Jedes dieser Codewörter ist 2k – 1 = 25 – 1 = 31 Bit lang.
  • Sei u = u0u1u2 ... u29u30 ein Codewort. Die ersten k = 5 Koordinaten u0, u1, u2, u3, u4 sind frei wählbar. (Es gibt 25 = 32 Möglichkeiten, diese ersten fünf Koordinaten zu wählen.) Die restlichen 2k – 1 – k = 25 – 1 – 5 = 26 Koordinaten u5, u6, ..., u29, u30 werden aus den Anfangswerten u0, u1, u2, u3, u4 mit Hilfe der (mit f(x) assoziierten) Rekursionsformel uj+5 = uj+2 + uj für j = 0, 1, ..., 25 berechnet. Diese 26 Koordinaten sind also durch die fünf Anfangswerte determiniert.
  • Es gibt 32 verschiedene Codewörter, weil es 32 Möglichkeiten gibt für das 5-Tupel (u0, u1, u2, u3, u4) der Anfangswerte.
  • Die Minimumdistanz d des betrachteten (31, 5, 16) Simplex Codes ist d = 16. Mit einem klassischen Decoder kann daher jeder t-Bitfehler mit t ≤ 7 korrigiert werden. Eine genaue Analyse zeigt, dass mit einem Superdecoder ca. 95% aller 8-Bitfehler, 67% aller 9-Bitfehler und 30% aller 10-Bitfehler eindeutig korrigierbar sind.
  • Angenommen ein Nachrichtenwort c = c0c1 ... c30 wurde abgeschickt und das Nachrichtenwort y = y0y1 ... y30 wird empfangen. Bestimmte Bits sind bei der Übertragung umgekippt (d. h. haben ihren Wert von 0 auf 1 oder von 1 auf 0 geändert). Diese sollen korrigiert werden. Dazu wird das Syndrom S(y) verwendet, das in diesem Beispiel ein 26 Bit langer Vektor ist. Das Syndrom S(y) kann effizient mit der in 11 gezeigten Schaltung berechnet werden.
  • 11 zeigt eine Schaltung 1100 zur Syndromberechnung.
  • Analog zur Schaltung 900 weist die Schaltung 1100 einen linken Schaltkreis 1101 und einen rechten Schaltkreis 1102 auf und der Addierer 1103 des linken Schaltkreises 1101 weist einen zusätzlichen Eingang auf, über dem in einem Register 1104 gespeicherte Hilfsinformation dem linken Schaltkreis 1102 zugeführt (d. h. bitweise in den linken Schaltkreis 1102 eingeschoben) werden kann.
  • Das Register 1104 hat die Länge 26 Bit und kann für die Syndromberechnung zur PUF-Rekonstruktion verwendet werden. In diesem Beispiel, bei der das Wort y dekodiert werden soll, wird es nicht verwendet und beispielsweise durch Öffnen eines Schalters 1105 abgekoppelt.
  • Die Schaltung 1100 wird mit den 31 Bit von y initialisiert. Die ersten 26 Bits von y kommen in das linke Schieberegister (d. h. das Register des linken Schaltkreises 1101) und die letzten 5 Bits in das rechte Schieberegister (d. h. das Register des rechten Schaltkreises 1102). Das rechte Register ist ein linear rückgekoppeltes Schieberegister, das die lineare Rekursion uj+5 = uj+2 + uj implementiert. Nachdem sie initialisiert wurde, wird sie Schaltung 1100 2k – 1 – k = 25 – 1 – 5 = 26 Mal getaktet. Danach befindet sich das Syndrom S(y) im 26 Bit langen linken Register.
  • Nun wird das Hamminggewicht des Syndroms bestimmt. Wenn das Hamminggewicht kleiner als d/2 = 16/2 = 8 ist, dann werden an das Syndrom k = 5 Nullen angehängt. Der so gebildete 31 Bit lange Vektor e ist der gesuchte Fehlervektor. Die korrigierte Nachricht c ist dann gegeben durch c = y + e.
  • Wenn das Hamminggewicht des Syndroms größer oder gleich d/2 = 8 ist, dann wird das Syndrom in das mittlere Register 1002 des (entsprechend dimensionierten) Decoders 1000 gespeichert. Der Decoder 1000 liefert dann den Fehlervektor e unter Verwendung eines der oben beschriebenen Algorithmen.
  • Die PUF-Rekonstruktion ist eng verwandt, aber nicht identisch, mit dem Problem der Fehlerkorrektur bei der Nachrichtenübertragung. Bei der Nachrichtenübertragung ist die zu übertragende Nachricht immer ein Codewort. Bei der PUF-Thematik ist der ursprüngliche, der sogenannte wahre PUF-Wert a grundsätzlich ein beliebiger n Bit langer Vektor (hier n = 31.) Die PUF-Wert-Erzeugung ist unabhängig von der Verwendung des (31; 5; 16) Simplex Codes für seine Korrektur.
  • Nach erstmaliger Erzeugung des PUF-Werts Für die PUF-Rekonstruktion wird zunächst die Hilfsinformation b = S(a) berechnet. Da die Hilfsinformation das Syndrom von a ist, kann die Schaltung 1100 verwendet werden: Initialisiere mit a, takte 26-mal. Entnehme den Hilfsvektor b dem linken Register.
  • Zur Beschreibung der PUF-Rekonstruktion sei nun a' ein neu ausgelesener PUF-Wert. Der 31 Bit lange Vektor a' ist im Allgemeinen ebenso wenig ein Codewort wie a.
  • Zunächst wird das Syndrom von a' berechnet und zu dem Hilfsvektor b addiert. Es gilt S(a') + b = S(a') + S(a) = S(a' + a) = S(e), d. h. auf diese Weise kann das Syndrom des Fehlervektors e bestimmt werden. Damit ist die Verbindung zur Fehlerkorrektur hergestellt, denn bei der Fehlerkorrektur bei der Nachrichtenübertragung wird ein Codewort c gesendet, ein potentiell fehlerhaftes Nachrichtenwort y = c + e empfangen und zunächst das Syndrom von y berechnet: S(y) = S(c + e) = S(c) + S(e) = 0 + S(e) = S(e).
  • Die Aufgabe des Decodierungsalgorithmus besteht darin, den Fehlervektor e aus dem Syndrom S(e) zu bestimmen.
  • Bei der PUF-Rekonstruktion wird also zunächst aus dem aktuellen PUF-Wert a' und dem Hilfsvektor b der 26 Bit lange Vektor s = S(a') + b = S(e) berechnet. Dazu kann die Schaltung 1100 verwendet werden: Initialisiere die beiden unteren Register, d. h. die Register des linken Schaltkreises 1101 und des rechten Schaltkreises 1102 wie oben beschrieben mit a' und das obere Register 1104 mit b. Schließe den Schalter 1104 und takte den Schaltkreis 26-mal. Danach befindet sich s im linken Register.
  • Beispiel (PUF: Berechnung des Hilfsvektors b.):
    Sei der wahre PUF-Wert a gegeben durch: a = 01001 00010 00011 10101 01010 10101 1
  • Der Hilfsvektor b ist das Syndrom von a, also b = S(a). S(a) kann berechnet werden, indem die folgenden zwei 26-Bit langen Vektoren bitweise addiert werden:
    • 1. Die ersten 26 Bit von a, also 01001 00010 00011 10101 01010 1.
    • 2. Die ersten 26 Ausgabebits eines linearen rückgekoppelten Schieberegisters gemäß dem charakteristischem Polynom f(x) = x5 + x2 + 1, wobei die letzten 5 Bits von a für die Initialisierung des Schieberegisters benutzt werden, wie es in 12 dargestellt ist.
  • 12 zeigt ein lineares rückgekoppeltes Schieberegister 1200.
  • Das Schieberegister 1200 weist fünf Flip-Flops 1201 auf sowie einen Addierer 1202 auf, der die Inhalte des linkesten Flip-Flops und des mittleren Flip-Flops addiert und das Ergebnis ausgibt und dem rechtesten Flip-Flop zuführt, so dass das Schieberegister 1200 die Rekursionsformel un+5 = un+2 + un implementiert.
  • Das Schieberegister 1200 liefert in diesem Beispiel den Vektor 00111 11000 11011 10101 00001 0. Der Hilfsvektor b = 01110 11010 11000 00000 01011 1 ist die Summe dieser beiden Vektoren. Dies ist in 13 dargestellt.
  • 13 veranschaulicht die Syndromberechnung für den Vektor a.
  • Das Syndrom 1303, d. h. der Vektor b, ist gegeben durch die Summe aus einem ersten Vektor 1301, gegeben durch die ersten 26 Bis von a und einem zweiten Vektor 1302, der sich aus den rechten fünf Bits 1304 von a durch Anwendung der Rekursionsformel un+5 = un+2 + un ergibt.
  • Beispiel (PUF-Rekonstruktion):
    • a' = 01111 01010 00111 10111 01111 00011 1;
    • b = 01110 11010 11000 00000 01011 1;
  • Berechnung von s' = S(a'): Nehme die letzten 5 Bits von a', also 00111, als Anfangswerte. Berechne mit der linearen Rekursion uj+5 = uj+2 + uj die nächsten 26 Folgenglieder. Addiere zu diesem 26-Bit Vektor den 26-Bit Vektor, der aus den ersten 26 Gliedern von a' besteht. Der Summenvektor ist s' = 10111 10001 10010 10110 01001 1.
  • Berechnung von s: Es gilt s = s' + b. Daher ist s = 11001 01011 01010 10110 00001 0.
  • 14 veranschaulicht die Syndromberechnung für den Vektor a'.
  • Das Syndrom 1404, d. h. der Vektor s, ist gegeben durch die Summe aus einem ersten Vektor 1401, gegeben durch die ersten 26 Bis von a', einem zweiten Vektor 1402 und einem dritten Vektor 1403. Der zweite Vektor ergibt sich aus den rechten fünf Bits 1405 von a' durch Anwendung der Rekursionsformel un+5 = un+2 + un, d. h. die letzten 5 Bits von a' sind die fünf Anfangswerte einer 31 Bit langen Schieberegisterfolge mit charakteristischem Polynom f(x) = x5 + x2 + 1 und der zweite Vektor 1402 sind die letzten 26 Bit der Schieberegisterfolge. Der dritte Vektor 1403 ist der Hilfsvektor b.
  • Der Vektor s kann effizient mit der Schaltung 1100 berechnet werden: Initialisiere die beiden unteren Register, d. h. die Register des linken Schaltkreises 1101 und des rechten Schaltkreises 1102 wie oben beschrieben mit a' und das obere Register 1104 mit b. Schließe den Schalter 1104 und takte den Schaltkreis 26-mal. Danach befindet sich s im linken Register.
  • Anschließend wird das Hamminggewicht von s berechnet: w(s) = 12 ≥ d/2 = 8
  • 15 zeigt einen Decoder 1500 zur PUF-Rekonstruktion für den (31, 5, 16) Simplex Code.
  • Analog zu dem Decoder 600 weist der Decoder drei Register 1501, 1502, 1503 und Addierer 1504 auf, deren Länge bzw. Anzahl an den in diesem Beispiel verwendeten Code angepasst sind.
  • Der Decoder 1500 liefert die Hamminggewichte wj = w(Ej) für j = 0, 1, ..., 30. min(w0, w1, ..., w30, w(s)) = min(16, 12, 18, 12, 14, 14, 12, 16, 14, 18, 10, 18, 14, 16, 12, 20, 22, 14, 16, 14, 18, 14, 20, 18, 16, 18, 12, 16, 16, 16, 18, 12) = 10.
  • Das Minimum 10 wird nur einmal angenommen: w10 = 10. Daher ist der eindeutig bestimmte Fehlervektor e = E10.
  • Um E10 zu berechnen (beispielsweise wurden um Speicherplatz zu sparen die schon berechneten Vektoren E0, E1, ..., E30 nicht abgespeichert) wird das obere Register 1501 des Decoders 1501 (mit dem in 15 angegebenen Initialisierungswert) zehnmal getaktet. Danach enthält das obere Register 1501 den Vektor 11111 00011 01110 10100 00100 10110 0.
  • Der Vektor in den oberen Register 1 wird auf den im mittleren Register 1502 enthaltenen Vektor s addiert und die Summe in das untere Register 1503 geschrieben (genau genommen werden die ersten 26 Koordinaten addiert, die letzten 5 Koordinaten werden übernommen). Im unteren Register 1503 befindet sich dann der Fehlervektor e = E0 = 00110 01000 00100 00010 00101 10110 0.
  • Der wahre PUF-Wert a ist a = a0 + e = 01001 00010 00011 10101 01010 10101 1.
  • Obwohl die Erfindung vor allem unter Bezugnahme auf bestimmte Ausführungsformen gezeigt und beschrieben wurde, sollte es von denjenigen, die mit dem Fachgebiet vertraut sind, verstanden werden, dass zahlreiche Änderungen bezüglich Ausgestaltung und Details daran vorgenommen werden können, ohne vom Wesen und Bereich der Erfindung, wie er durch die nachfolgenden Ansprüche definiert wird, abzuweichen. Der Bereich der Erfindung wird daher durch die angefügten Ansprüche bestimmt, und es ist beabsichtigt, dass sämtliche Änderungen, welche unter den Wortsinn oder den Äquivalenzbereich der Ansprüche fallen, umfasst werden.

Claims (22)

  1. Verfahren zum Ermitteln eines Fehlervektors in einem Datenwort aufweisend: Ermitteln des Syndroms des Fehlervektors; sukzessives Erzeugen von Codewörtern durch zyklisches Vertauschen ein oder mehrerer vorgegebener Codewörter, Bilden, für jedes erzeugte Codewort, der Summe des mit Nullen auf Datenwortlänge ergänzten Syndroms mit dem Codewort und überprüfen, für das Codewort, ob die Summe des mit Nullen auf Datenwortlänge ergänzten Syndroms mit dem Codewort unter allen Codewörtern minimales Gewicht hat; und Ermitteln des Fehlervektors als die Summe des Syndroms mit dem Codewort, für das die Summe des mit Nullen auf Datenwortlänge ergänzten Syndroms mit dem Codewort unter allen Codewörtern minimales Gewicht hat.
  2. Verfahren gemäß Anspruch 1, ferner aufweisend Korrigieren des Datenworts mittels des Fehlervektors.
  3. Verfahren gemäß Anspruch 1 oder 2, ferner aufweisend Ausgeben des korrigierten Datenworts an eine Verarbeitungseinrichtung.
  4. Verfahren gemäß einem der Ansprüche 1 bis 3, wobei das Datenwort ein mit dem Code codiertes Nachrichtenwort ist.
  5. Verfahren gemäß Anspruch 4, ferner aufweisend Empfangen des Datenworts von einem Sender.
  6. Verfahren gemäß Anspruch 4 oder 5, wobei das Syndrom des Fehlervektors das Syndrom des Datenworts ist.
  7. Verfahren gemäß einem der Ansprüche 1 bis 3, wobei das Datenwort ein PUF-Wort (Physical unclonable function – Wort) ist.
  8. Verfahren gemäß Anspruch 7, ferner aufweisend Empfangen des Datenworts von einer Schaltung, die eine PUF implementiert.
  9. Verfahren gemäß Anspruch 7 oder 8, wobei das Syndrom des Fehlervektors die Summe aus dem Syndroms des Datenvektors und eines Hilfsvektors ist.
  10. Verfahren gemäß Anspruch 9, wobei der Hilfsvektor das Syndrom eines bei einer Initialisierung ermittelten PUF-Worts ist, das sich von dem Datenwort um den Fehlervektor unterscheidet.
  11. Verfahren gemäß einem der Ansprüche 1 bis 10, wobei das Prüfen, ob die Summe des auf Datenwortlänge ergänzten Syndroms mit dem Codewort minimales Gewicht hat, das Prüfen aufweist, ob das Gewicht der Summe kleiner als die halbe Hammingdistanz des Codes ist.
  12. Verfahren gemäß Anspruch 11, ferner aufweisend Abbrechen des sukzessiven Erzeugens von Wörtern der Menge, wenn ein Codewort gefunden wurde, für das das Gewicht der Summe kleiner als die halbe Hammingdistanz des Codes ist.
  13. Verfahren gemäß einem der Ansprüche 1 bis 12, wobei das Prüfen, ob die Summe des auf Datenwortlänge ergänzten Syndroms mit dem Wort minimales Gewicht hat, das Ermitteln, für alle erzeugte Codewörter, der Summe des auf Datenwortlänge ergänzten Syndroms mit dem Codewort aufweist und den Vergleich der ermittelten Summen aufweist.
  14. Verfahren gemäß einem der Ansprüche 1 bis 13, ferner aufweisend Ermitteln des Datenworts als nicht korrigierbar, wenn für kein Codewort die Summe des mit Nullen auf Datenwortlänge ergänzten Syndroms mit dem Codewort unter allen Codewörtern minimales Gewicht hat.
  15. Verfahren gemäß einem der Ansprüche 1 bis 14, wobei das Ergänzen des Syndroms mit Nullen auf Datenwortlänge gemäß einer Kontrollmatrix erfolgt, die ebenso viele Einheitsvektoren aufweist, wie das Syndrom Komponenten hat.
  16. Verfahren gemäß einem der Ansprüche 1 bis 15, wobei das Ergänzen des Syndroms mit Nullen auf Datenwortlänge gemäß einer Kontrollmatrix erfolgt, die eine Einheitsmatrix mit der Zeilenanzahl gleich der Anzahl von Komponenten des Syndroms aufweist.
  17. Verfahren gemäß Anspruch 15 oder 16, wobei das Ergänzen des Syndroms mit Nullen auf Datenwortlänge das Einfügen von Nullen in das Syndrom an Stellen aufweist, die Spalten der Kontrollmatrix entsprechen, die keine Einheitsvektoren sind.
  18. Verfahren gemäß einem der Ansprüche 1 bis 17, wobei der Code ein zyklischer Code ist.
  19. Verfahren gemäß einem der Ansprüche 1 bis 18, wobei der Code aus dem Nullwort und allen zyklischen Vertauschungen eines Codeworts ungleich dem Nullwort besteht.
  20. Verfahren gemäß Anspruch 19, wobei die Codewörter durch zyklisches Vertauschen eines einzigen Codeworts erzeugt werden.
  21. Verfahren gemäß einem der Ansprüche 1 bis 20, wobei der Code ein Simplex-Code ist.
  22. Datenverarbeitungseinrichtung zum Ermitteln eines Fehlervektors in einem Datenwort aufweisend: eine Syndromermittlungsschaltung, die eingerichtet ist, das Syndroms des Fehlervektors zu ermitteln; eine Decodierschaltung, die eingerichtet ist, sukzessiv Codewörter durch zyklisches Vertauschen ein oder mehrerer vorgegebener Codewörter zu erzeugen, für jedes erzeugte Codewort, die Summe des mit Nullen auf Datenwortlänge ergänzten Syndroms mit dem Codewort zu bilden und für das Codewort zu überprüfen, ob die Summe des mit Nullen auf Datenwortlänge ergänzten Syndroms mit dem Codewort unter allen Codewörtern minimales Gewicht hat; und eine Ausgabeschaltung, die eingerichtet ist, die Summe des Syndroms mit dem Codewort, für das die Summe des mit Nullen auf Datenwortlänge ergänzten Syndroms mit dem Codewort unter allen Codewörtern minimales Gewicht hat, als Fehlervektor auszugeben.
DE102014118531.5A 2014-12-12 2014-12-12 Verfahren und Datenverarbeitungseinrichtung zum Ermitteln eines Fehlervektors in einem Datenwort Active DE102014118531B4 (de)

Priority Applications (2)

Application Number Priority Date Filing Date Title
DE102014118531.5A DE102014118531B4 (de) 2014-12-12 2014-12-12 Verfahren und Datenverarbeitungseinrichtung zum Ermitteln eines Fehlervektors in einem Datenwort
US14/965,933 US10193573B2 (en) 2014-12-12 2015-12-11 Method and data processing device for determining an error vector in a data word

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
DE102014118531.5A DE102014118531B4 (de) 2014-12-12 2014-12-12 Verfahren und Datenverarbeitungseinrichtung zum Ermitteln eines Fehlervektors in einem Datenwort

Publications (2)

Publication Number Publication Date
DE102014118531A1 DE102014118531A1 (de) 2016-06-16
DE102014118531B4 true DE102014118531B4 (de) 2016-08-25

Family

ID=56082313

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102014118531.5A Active DE102014118531B4 (de) 2014-12-12 2014-12-12 Verfahren und Datenverarbeitungseinrichtung zum Ermitteln eines Fehlervektors in einem Datenwort

Country Status (2)

Country Link
US (1) US10193573B2 (de)
DE (1) DE102014118531B4 (de)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2020237377A1 (en) * 2019-05-27 2020-12-03 École De Technologie Supérieure Methods and systems for bit error determination and correction
CN112953562B (zh) * 2019-11-26 2024-02-09 瑞昱半导体股份有限公司 信号处理装置与信号处理方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4382300A (en) * 1981-03-18 1983-05-03 Bell Telephone Laboratories Incorporated Method and apparatus for decoding cyclic codes via syndrome chains
US20080126908A1 (en) * 2006-07-25 2008-05-29 Communications Coding Corporation Universal error control coding system for digital communication and data storage systems

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3622985A (en) * 1969-11-25 1971-11-23 Ibm Optimum error-correcting code device for parallel-serial transmissions in shortened cyclic codes
US4648091A (en) * 1984-07-02 1987-03-03 General Electric Company Apparatus and method for decoding error correction coded information
DE102008003946A1 (de) * 2008-01-11 2009-07-23 Micronas Gmbh Schaltung und Verfahren zur Generierung einer echten, schaltungsspezifischen und zeitinvarianten Zufallszahl
TW200947882A (en) * 2008-05-13 2009-11-16 Univ Ishou Decoding method of cyclic code weight decoder
EP2178215A1 (de) * 2008-10-16 2010-04-21 Thomson Licensing Verfahren zur Fehlerberichtigung und Fehlererkennung von modifizierten Array Codes
EP2697932A2 (de) * 2011-04-09 2014-02-19 Universität Zürich Verfahren und vorrichtung zur kryptographie mit offentlichem schlüssel auf der basis von fehlerkorrekturkodes
DE102015111729B4 (de) * 2015-07-20 2017-03-30 Infineon Technologies Ag Verfahren und decoder zum bestimmen eines fehlervektors für ein datenwort gemäss einem reed-muller-code

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4382300A (en) * 1981-03-18 1983-05-03 Bell Telephone Laboratories Incorporated Method and apparatus for decoding cyclic codes via syndrome chains
US20080126908A1 (en) * 2006-07-25 2008-05-29 Communications Coding Corporation Universal error control coding system for digital communication and data storage systems

Also Published As

Publication number Publication date
US10193573B2 (en) 2019-01-29
DE102014118531A1 (de) 2016-06-16
US20160173133A1 (en) 2016-06-16

Similar Documents

Publication Publication Date Title
DE102011085602B4 (de) Vorrichtung und Verfahren zum Korrigieren zumindest eines Bitfehlers in einer codierten Bitsequenz
DE60220341T2 (de) Verfahren zum Erzeugen eines Burstfehlermusters sowie Burst- und Bytefehlerermittlungs- und-korrekturvorrichtung
DE102016102590B4 (de) Datenverarbeitungseinrichtungen und verfahren zum rekonstruieren eines puf-werts
DE102011054410B4 (de) Vorrichtung und Verfahren zur Erzeugung einer Bitfolge
DE102017103347B4 (de) Verarbeitung von daten in speicherzellen eines speichers
DE102010035210B4 (de) Verfahren zur Rückgewinnung verlorener Daten und zur Korrektur korrumpierter Daten
DE102005022107B9 (de) Vorrichtung und Verfahren zum Bestimmen einer Position eines Bitfehlers in einer Bitfolge
DE102011087634B4 (de) Vorrichtung und verfahren zum erfassen eines fehlers in einem codierten binärwort
DE102013109315B4 (de) Verfahren und Datenverarbeitungseinrichtung zum Rekonstruieren eines Vektors
DE102018131613A1 (de) Fehlererkennung mittels Gruppenfehler
DE102014118531B4 (de) Verfahren und Datenverarbeitungseinrichtung zum Ermitteln eines Fehlervektors in einem Datenwort
DE102020110787B3 (de) Schaltung und verfahren zum kodieren oder dekodieren eines datenworts
DE102015111729B4 (de) Verfahren und decoder zum bestimmen eines fehlervektors für ein datenwort gemäss einem reed-muller-code
DE102011087457A1 (de) Vorrichtung und verfahren zum erfassen eines fehlers in einer mehrzahl von codierten binärwörtern, die durch einen fehlerkorrekturcode codiert sind
DE102016104012A1 (de) Verarbeitung eines Datenworts
DE102013219088B4 (de) Schaltungsanordnung und Verfahren zur Realisierung von Prüfbitkompaktierung für Cross-Parity-Codes
DE102010041680A1 (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
DE102010003144B4 (de) Decodiervorrichtung und Decodierverfahren
DE102017107431B4 (de) Verfahren und Vorrichtungen zur Fehlerkorrekturcodierung beruhend auf hochratigen verallgemeinerten verketteten Codes
EP3314768A1 (de) Vorrichtung und verfahren zum erstellen einer asymmetrischen prüfsumme
DE102015121646B4 (de) Fehlerkorrektur
DE102019113970A1 (de) Erkennung von adressfehlern
DE102013112020B4 (de) Verfahren und Vorrichtung zum Erkennen von Bitfehlern
DE102011102503B3 (de) Verfahren zum Berichtigen beschädigter Daten
DE102013223813B4 (de) Verfahren zur Wiederherstellung verloren gegangener und/oder beschädigter Daten

Legal Events

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