-
Ausführungsbeispiele betreffen allgemein Datenverarbeitungseinrichtungen und Verfahren zum Rekonstruieren eines PUF-Werts.
-
PUFs (Physical Uncloneable Functions) sind für sicherheitsrelevante Anwendungen, wie beispielweise zur Authentifizierung, interessant. Mechanismen zur Generierung von PUF-Werten liefern im Allgemeinen bei mehreren PUF-Generierungen zwar ähnliche, allerdings nicht identische PUF-Werte, was typischerweise je nach Anwendungsfall, z.B. zur Schlüsselgenerierung, jedoch erforderlich ist. Entsprechend sind effiziente Verfahren wünschenswert, die es ermöglichen, einen bei einer zweiten PUF-Generierung erzeugten PUF-Wert derart zu korrigieren, dass er mit dem bei einer ersten PUF-Generierung erzeugten PUF-Wert übereinstimmt.
-
Aus dem Dokument
DE 10 2013 013 047 A1 ist sind eine Vorrichtung und ein Verfahren zur Bestimmung einer Kennung basierend auf einer Vielzahl von Zellen bekannt. Bei dem Verfahren werden die Zellen in Teilmengen unterteilt, wobei für jede der Teilmengen ermittelt wird, ob eine rekonstruierbare Information bestimmbar ist, wobei, falls für eine Teilmenge eine rekonstruierbare Information bestimmbar ist, die rekonstruierbare Information bestimmt und gespeichert wird. Falls für eine Teilmenge eine rekonstruierbare Information nicht bestimmbar ist, eine Fehlerinformation bestimmt und für diese Teilmenge gespeichert wird.
-
Aus dem Dokument
DE 10 2011 079 259 A1 ist eine Bitfehlerkorrektur zur Beseitigung von altersbedingten Fehlern in Bitmustern bekannt.
-
Gemäß einer Ausführungsform wird eine Datenverarbeitungseinrichtung bereitgestellt mit einer PUF-Wert-Quelle, die dazu eingerichtet ist, einen Referenz-PUF-Wert und mehrere nachfolgende PUF-Werte zu liefern, wobei der Referenz-PUF-Wert und jeder nachfolgende PUF-Wert eine Vielzahl von binären Komponenten aufweist, einer Ermittlungseinrichtung, die eingerichtet ist, eine Menge von Komponenten zu ermitteln, deren Wert bei den mehreren nachfolgenden PUF-Werten gleich ist, einen Speicher zum Speichern von Hilfsdaten zur Rekonstruktion des Referenz-PUF-Werts; und eine PUF-Rekonstruktionseinrichtung, die eingerichtet ist, den Referenz-PUF-Wert aus den nachfolgenden PUF-Werten ausgehend von der Annahme zu rekonstruieren, dass die Werte der ermittelten Komponenten bei dem nachfolgenden PUF-Wert mit den Werten der ermittelten Komponenten bei dem Referenz-PUF-Wert übereinstimmen, den Referenz-PUF-Wert basierend auf den Hilfsdaten zu rekonstruieren, wobei die Hilfsdaten auf dem Referenz-PUF-Wert und einem Codewort eines Codes basieren und wobei der Code ein linearer Code ist, und den Referenz-PUF-Wert durch Auswahl von linear unabhängigen Spalten der Spalten, die den ermittelten Komponenten entsprechen, und Multiplikation der Inversen Matrix zu einer aus den ausgewählten Spalten gebildeten Matrix mit der Generatormatrix des Codes zu rekonstruieren..
-
Gemäß einer weiteren Ausführungsform wird ein Verfahren zum Rekonstruieren eines PUF-Werts gemäß der oben beschriebenen Datenverarbeitungseinrichtung 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 eine Chipkarte.
- 2 zeigt eine Anordnung mit einem kumulativen Fehlerregister und einem Decoder, der als Ergebnis den Fehlervektor ausgibt.
- 3 zeigt eine Anordnung mit einem kumulativen Fehlerregister und einem Decoder, der als Ergebnis das Codewort ausgibt.
- 4 zeigt eine Anordnung, die unterschiedliche Betriebsmodi für die PUF-Rekonstruktion ermöglicht.
- 5 zeigt eine Datenverarbeitungseinrichtung gemäß einer Ausführungsform.
- 6 zeigt ein Ablaufdiagramm, dass ein Verfahren zum Rekonstruieren eines PUF-Werts veranschaulicht.
-
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.
-
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.
-
Der Prozess der Erzeugung einer Bitfolge (des PUF-Werts) aus den Eigenschaften des physikalischen Objektes wird 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.
-
Sei P ein ursprünglicher PUF-Wert, der einem physikalischen Objekt zugeordnet wird. Der PUF-Wert wird im Zuge des Herstellungsprozesses für das physikalische Objekt ein für alle Mal bestimmt. P wird im Folgenden der wahre PUF-Wert genannt, der dem Objekt zugeordnet ist. Die Bestimmung des wahren PUF-Werts P erfolgt beispielsweise in der Fabrik, in der das physikalische Objekt, z.B. als eine Komponente einer Chipkarte, hergestellt wird, durch Messung bestimmter sensibler Parameter. Die Werte der gemessenen Parameter hängen von zufälligen strukturellen Eigenschaften des Objekts ab, die außerhalb der Kontrolle des Herstellers liegen. Unterschiedlichen Objekten entsprechen im Allgemeinen unterschiedliche, zueinander unkorrelierte PUF-Werte.
-
Der PUF-Wert P ist eine Folge von Nullen und Einsen und kann daher als binärer Vektor dargestellt werden.
-
Man kann sich den PUF-Wert P als eine Art Fingerabdruck des physikalischen Objekts vorstellen. Durch den wahren PUF-Wert P kann das physikalische Objekt eindeutig identifiziert werden. Das physikalische Objekt ist beispielsweise Bestandteil einer Chipkarte.
-
1 zeigt eine Chipkarte 100.
-
Die Chipkarte 100 weist einen Träger 101 und ein Chipkartenmodul 102 auf. Das Chipkartenmodul 102 hat verschiedene Komponenten wie beispielsweise einen nichtflüchtigen Speicher 103 und eine CPU (Central Processing Unit) 104. Insbesondere weist die Chipkarte eine Komponente 105 auf, die als PUF-Quelle dient, beispielsweise einen Speicher (z.B. mit einer Vielzahl von SRAM-Zellen), dessen zufälliger Anfangszustand als PUF-Wert verwendet wird.
-
Der PUF-Wert P kann als eine Identifikationsnummer für die Chipkarte 100 (genauer für das Chipkartenmodul 102 in der Chipkarte 100) angesehen werden. Beispielsweise weist das Chipkartenmodul 102 einen Kryptoprozessor auf, der aus dieser Identifikationsnummer einen chipkartenindividuellen kryptographischen Schlüssel ableitet oder die CPU 104 leitet selbst einen kryptographischen Schlüssel daraus ab.
-
Aus Sicherheitsgründen wird weder der wahre PUF-Wert P noch der aus ihm abgeleitete kryptographische Schlüssel auf der Chipkarte 100 gespeichert. Stattdessen befindet sich auf der Chipkarte 100 ein sogenanntes PUF-Modul 106, welches mit dem physikalischen Objekt 105 verbunden ist. Wird der PUF-Wert P benötigt, dann wird ein sogenannter PUF-Request (PUF-Anforderung) gestellt, worauf das PUF-Modul 106 den PUF-Wert jedes Mal neu bestimmt (durch interne Messung). Mit anderen Worten antwortet das PUF-Modul 106 auf einen PUF-Request mit der Ausgabe eines PUF-Wertes P'. P' wird im Folgenden als der aktuelle PUF-Wert bezeichnet.
-
Aufgrund von Umwelteinflüssen, Alterungsprozessen und Messfehlern wird der aktuelle PUF-Wert P' nicht unbedingt zu dem wahren PUF-Wert P identisch sein. Typischerweise werden P und P' sich in einigen Komponenten unterscheiden. Ziel ist aber auf jeden Fall, den wahren PUF-Wert P zu bestimmen - aus dem aktuellen, zur Verfügung stehenden, PUF-Wert P'. Dies wird als PUF-Wert-Rekonstruktion bezeichnet, die beispielsweise von einem PUF-Wert-Rekonstruktionsmodul 107, das auch zumindest teilweise durch die CPU 104 realisiert sein kann, durchgeführt wird.
-
Dazu wird, beispielsweise schon bei der Herstellung, zu dem dabei bestimmten wahren PUF-Wert P eine Hilfsgröße H berechnet. Die Hilfsgröße H ist ebenfalls eine 0-1-Sequenz (d.h. ein binärer Vektor). Informationstheoretisch gesprochen enthält H einen Teil von P aber nicht ganz P. Daher ist es unmöglich aus H allein P zu bestimmen. Die Hilfsgröße H wird im nichtflüchtigen Speicher 103 der Chipkarte 100 gespeichert. Bringt man den aktuellen PUF-Wert P' und H zusammen, so kann aus diesen beiden Größen der wahre PUF-Wert P berechnet werden (vorausgesetzt, dass P' sich nicht zu sehr von P unterscheidet).
-
Die PUF-Wert-Rekonstruktion - also die Bestimmung von P aus P' und H - kann mit Hilfe fehlerkorrigierender Codes erfolgen. Angenommen, der PUF-Wert P ist n Bit lang, dann kann ein binärer Code C der Länge n verwendet werden. Dabei ist C eine Menge von Codewörtern, und jedes Codewort von C ist ein n Bit langer Zeilenvektor.
-
Die Hilfsgröße H wird wie folgt gebildet.
-
Sei P der wahre PUF-Wert. Dann ist die zugehörige Hilfsgröße H gegeben durch
wobei c = c
rand ein zufälliges aus C gezogenes Codewort ist. (Das „+“ steht für bitweise Addition modulo 2).
-
Die Hilfsgröße H, der wahre PUF-Wert P und das zufällig gewählte Codeword c sind binäre Zeilenvektoren gleicher Länge. H wird im Folgenden auch als Hilfsvektor bezeichnet.
-
Damit kann wie folgt eine PUF-Wert-Rekonstruktion durchgeführt werden.
-
Gegeben seien der aktuelle PUF-Wert P' und der Hilfsvektor H. Die binären Vektoren P' und H werden komponentenweise addiert. Das ergibt
-
Das heißt, dass die Summe y = P' + H als ein (potentiell) fehlerhaftes Codewort aufgefasst werden kann.
-
Der Vektor c ist das fehlerfreie Codewort. Der Vektor e = P' + P ist der Fehlervektor.
-
Der Vektor y ist tatsächlich verfügbar, da y die Vektorsumme aus dem aktuellen (zur Verfügung stehenden) PUF-Wert P' und dem im Speicher 103 bereitgehaltenen Hilfsvektor H ist. Mithilfe eines Decoders (z.B. des PUF-Wert-Rekonstruktionsmoduls 107) wird aus y das Codewort c, oder, was äquivalent dazu ist, der Fehlervektor e berechnet.
-
Aus dem Codewort c und dem Hilfsvektor H kann sodann der wahre PUF-Wert P berechnet werden: Aus H = P + c folgt sofort, dass
-
Damit ist die Rekonstruktion des wahren PUF-Werts P abgeschlossen.
-
Allerdings funktioniert diese Herangehensweise nur dann, wenn nicht zu viele Fehler aufgetreten sind, d.h. wenn der Fehlervektor e nicht zu viele Einsen enthält, oder - was damit gleichbedeutend ist - wenn sich der wahre PUF-Wert P und der aktuelle PUF-Wert P' nicht zu stark voneinander unterscheiden.
-
Im Folgenden werden Ausführungsbeispiele beschrieben, die eine PUF-Rekonstruktion auch bei einer höheren Anzahl von Fehler (als von dem verwendeten Code korrigierbar sind), ermöglichen.
-
In der Kodierungstheorie wird im Allgemeinen angenommen, dass Übertragungsfehler in den einzelnen Komponenten voneinander unabhängig und überall mit derselben Wahrscheinlichkeit auftreten. (Das verwendete Modell ist dann typischerweise das eines sogenannten „binären symmetrischen Kanals“.) Übertragen auf die PUF-Rekonstruktion bedeutet das, dass jede Komponente von P' mit genau derselben Wahrscheinlichkeit abweicht von der entsprechenden Komponente von P. Wenn beispielsweise für eine PUF sich im Durchschnitt der aktuelle PUF-Wert P' und der wahre PUF-Wert P in 10% der Komponenten unterscheiden, würde man annehmen, dass eine beliebige ins Auge gefasste Komponente bei jeder neuen PUF-Generierung mit der Wahrscheinlichkeit p = 0,1 fehlerhaft ist.
-
Für zahlreiche PUFs trifft dies aber nicht zu. Die einzelnen Komponenten weisen unterschiedliche Fehlerraten auf. Dabei ist zu beachten, dass Komponenten mit hohen Fehlerraten bereits bei der Herstellung, z.B. in der Fabrik, identifiziert und ausgemustert werden können und von diesen Komponenten kein Gebrauch gemacht wird. Sie können also für ungültig erklärt und ignoriert werden. Für eine PUF mit durchschnittlich 10% Fehlern ist es also durchaus möglich, dass eine Komponente von P' mit der Wahrscheinlichkeit p = 0.05 und eine andere Komponente mit der Wahrscheinlichkeit p = 0.15 von der entsprechenden Komponente in P abweicht.
-
Es kann sogar Komponentenpositionen geben, an denen so gut wie nie ein Fehler auftritt. Solche PUF- Komponenten werden als quasistabil bezeichnet.
-
Gemäß verschiedenen Ausführungsformen werden
- a) die Positionen quasistabiler PUF-Komponenten bestimmt und
- b) diese Information für die PUF-Wert-Rekonstruktion nutzbar gemacht.
-
Selbst wenn nur relativ wenige der PUF-Komponenten quasistabil sind, kann diese Tatsache für die PUF-Wert-Rekonstruktion ausgenutzt werden und es können auf diese Weise wesentlich mehr Fehler korrigiert werden als es unter Einsatz eines Decoders (der im Rahmen der gemäß dem verwendeten Code korrigierbaren Fehler arbeitet) möglich wäre.
-
Zur Illustration wird als Beispiel eine PUF der Länge n = 32 betrachtet. Der verwendete fehlerkorrigierende Code sei der (32, 6, 16) Reed-Muller Code. In diesem Code haben die Codewörter die Länge 32. Es gibt 26 = 64 verschiedene Codewörter. Der Code hat die Minimumdistanz d = 16. Das bedeutet, dass sich zwei verschiedene Codewörter in mindestens 16 ihrer Komponenten unterscheiden. Daraus ergibt sich eine Fehlerkorrekturkapazität von bis zu 7 Bitfehlern (pro 32-Bit-Wort).
-
Wird dieser Code unter Einsatz eines Decoders für die PUF-Wert-Rekonstruktion benutzt, dann wird die PUF-Wert-Rekonstruktion dann (und nur dann) gelingen, wenn der (32 Bit lange) aktuelle PUF-Wert P' sich von dem (ebenfalls 32 Bit langen) wahren PUF-Wert P in höchstens 7 Komponenten unterscheidet.
-
Es sei nun angenommen, dass es sechs geeignete quasistabile PUF-Komponenten in P gibt und ihre Positionen identifiziert wurden. Geeignet bedeutet dabei, dass die sechs zugehörigen Spaltenvektoren der Generatormatrix des Codes linear unabhängig sind.
-
Dann können dem aktuellen PUF-Wert P' die entsprechenden sechs Komponenten entnommen werden und es handelt sich bei ihnen gleichzeitig um sechs Komponenten des gesuchten wahren PUF-Werts P. Somit sind sechs Komponenten des 32 Bit langen wahren PUF-Werts P bekannt.
-
Mithilfe dieser sechs bekannten Komponenten von P und dem zur Verfügung stehenden Hilfsvektor H lassen sich die restlichen 26 Komponenten von P berechnen. Das heißt, dass selbst dann, wenn der aktuelle PUF-Wert P' sich von dem wahren PUF-Wert P in j Komponenten unterscheidet, wobei j eine beliebige Zahl zwischen 0 und 26 sein kann, die einwandfreie Rekonstruktion des wahren PUF-Werts P gelingt. Insbesondere können statt nur sieben Bitfehlern auf diese Weise bis zu 26 Bitfehler korrigiert werden (in dem 32 Bit langen PUF-Segment).
-
Zur Ermittlung quasistabiler Komponenten kann ein so genanntes kumulatives Fehlerregister verwendet werden, dass im Folgenden genauer beschrieben wird.
-
Wie oben beschrieben sind für die PUF-Wert-Rekonstruktion a) der aktuelle PUF-Wert P' und b) der Hilfsvektor H gegeben und der wahre PUF-Wert P ist gesucht.
-
Für den Hilfsvektor H gilt:
wobei c ein zufällig gewähltes Codewort ist. Addition von P' zu beiden Seiten der Gleichung ergibt
-
Der Vektor e = P'+P heißt Fehlervektor, eine Bezeichnung die im doppelten Sinn zutreffend ist:
- Einerseits beschreibt der Vektor e die Differenz zwischen dem wahren PUF-Wert P und dem aktuellen PUF-Wert P', also sozusagen den Fehler, der bei der aktuellen PUF-Wert-Generierung passiert ist.
-
Andererseits ist y = P'+H = e+c und der Vektor y kann somit als eine fehlerhafte Version des Codeworts c aufgefasst werden. Die Situation ist analog zu der Übertragung einer Nachricht über einen störanfälligen Kanal: Das Codewort c wird gesendet. Im Kanal tritt der Übertragungsfehler e auf, und das Nachrichtenwort y wird empfangen.
-
Bei der PUF-Rekonstruktion verfügt man über den Vektor y = P'+H, da die Vektoren P' und H bekannt sind.
-
Um nun die Vektoren e oder c zu berechnen, kann der Vektor y einem Decoder (gemäß dem verwendeten Code) zugeführt werden. Sofern nicht zu viele Bitfehler aufgetreten sind, produziert der Decoder als Output entweder direkt das Codewort c oder den Fehlervektor e, was vom Typ des verwendeten Decoders abhängt.
-
Angenommen der Decoder liefert c, dann lässt sich der wahre PUF-Wert P durch P = H+c berechnen. Der Fehlervektor e lässt sich durch e = P'+P berechnen.
-
Angenommen der Decoder liefert e, dann lässt sich der wahrer PUF-Wert P durch P = P'+e berechnen. Sollte auch das Codewort c von Interesse sein, so lässt sich dieses aus der Gleichung H = P+c berechnen: c = P+H.
-
Seien nun P
0, P
1, P
2, ... die vom PUF-Modul
106 zu den Zeiten t = 0,1,2, ... ausgegebenen aktuellen PUF-Werte. Die Vektoren
werden mit der Hilfe eines Decoders dekodiert. Seien e
0, e
1, e
2, ... die dabei anfallenden Fehlervektoren.
-
Das kumulative Fehlerregister ist ein Register der Länge n, d.h. der Länge des PUF-Werts P. Das Register wird mit lauter Nullen („Alles Null“) initialisiert.
-
Sei R
t der Inhalt des Registers zum Zeitpunkt t. Dann ist der Inhalt des Registers zum Zeitpunkt t+1 gegeben durch
wobei die Verknüpfung „ODER“ die Komponentenweise logische Oder-Verknüpfung zweier binärer Vektoren darstellt, d.h.,
also z.B. (1,0,0,1) ODER (0,0,1,0) = (1,0,1,1).
-
Beispiel: Sei n = 10. Die ersten fünf Fehlervektoren seien gegeben durch
-
In diesem Fall sind die Inhalte des kumulativen Fehlerregisters zu den Zeitpunkten t = 0, 1, 2, 3, 4, 5 gegeben durch
-
Das kumulative Fehlerregister lässt sich beispielsweise als Komponente des PUF-Rekonstruktionsmoduls 107 implementieren, z.B. in Hardware.
-
2 zeigt eine Anordnung 200 mit einem kumulativen Fehlerregister 201 und einem Decoder 202, der den Fehlervektor e ausgibt.
-
Die Anordnung 200 ist beispielsweise Teil des PUF-Wert-Rekonstruktionsmoduls 107.
-
Ein erster Addierer 203 addiert die Hilfsdaten H (die z.B. im Speicher 103 gespeichert sind) zu dem aktuellen PUF-Wert Pt und liefert das Resultat yt an den Decoder 202. Der Decoder 202 ermittelt den zugehörigen Fehlervektor et, den ein zweiter Addierer 204 zu dem aktuellen PUF-Wert Pt addiert, so dass der wahre PUF-Wert rekonstruiert wird.
-
Addierer werden im Folgenden als Einheiten verstanden, die eine komponentenweise XOR-Verknüpfung ihrer Eingangsvektoren durchführen.
-
Außerdem wird der Fehlervektor et einer ODER-Einheit 205 zugeführt, die den bisherigen Inhalt des kumulativen Fehlerregisters Rt mit dem Fehlervektor et komponentenweise verodert (d.h. ODER-verknüpft) und das Ergebnis Rt+1 im kumulativen Fehlerregister 201 speichert.
-
3 zeigt eine Anordnung 300 mit einem kumulativen Fehlerregister 301 und einem Decoder 302, der das Codewort c ausgibt.
-
Die Anordnung 300 ist beispielsweise Teil des PUF-Wert-Rekonstruktionsmoduls 107.
-
Ein erster Addierer 303 addiert die Hilfsdaten H (die z.B. im Speicher 103 gespeichert sind) zu dem aktuellen PUF-Wert Pt und liefert das Resultat yt an den Decoder 302. Der Decoder 302 ermittelt das zugehörige Codewort c, das ein zweiter Addierer 304 zu den Hilfsdaten H addiert, so dass der wahre PUF-Wert rekonstruiert wird.
-
Ein dritter Addierer 305 addiert den rekonstruierten PUF-Wert zu dem aktuellen PUF-Wert Pt, so dass der zugehörige Fehlervektor et erzeugt wird.
-
Der Fehlervektor et wird einer ODER-Einheit 306 zugeführt, die den bisherigen Inhalt des kumulativen Fehlerregisters Rt mit dem Fehlervektor et komponentenweise verodert und das Ergebnis Rt+1 im kumulativen Fehlerregister 301 speichert.
-
Für eine konkrete Zelle des kumulativen Fehlerregisters zum Zeitpunkt t = N bedeutet es, wenn sie den Wert 1 enthält, dass im Verlauf der ersten N PUF-Wert-Generierungen in der entsprechenden PUF-Komponente mindestens einmal (und bis zu N mal) ein Fehler auftrat. Wenn die Zelle den Wert 0 enthält, bedeutet das, dass bisher in der entsprechenden PUF-Komponente kein Fehler aufgetreten ist.
-
Beispiel: In einer PUF der Länge n = 32 seien die Komponenten Nummer 5, 9, 17 und 26 quasistabil. Diese Komponenten seien bei jeder neuen PUF-Wert-Generierung mit der Wahrscheinlichkeit p = 0,0001 fehlerhaft. Die Fehlerwahrscheinlichkeiten für alle anderen Komponenten liegen zwischen p = 0.01 und p = 0.15. Es wird nun N-mal ein PUF-Wert generiert. Bei jeder (erfolgreichen) PUF-Wert-Rekonstruktion fällt ein Fehlervektor e an, der in das kumulative Fehlerregister eingeht. Für N = 1000 wird das kumulative Fehlerregister dann mit hoher Wahrscheinlichkeit in den Zellen 5, 9, 17 und 26 eine Null stehen haben und in den restlichen 28 Zellen eine Eins. Daher kann man aus dem kumulativen Fehlerregister zum Zeitpunkt t = 1000 die Positionen der vier quasistabilen PUF-Komponenten auslesen.
-
Im Folgenden wird nun die Berechnung eines Codeworts aus einigen seiner Komponenten erläutert.
-
Es wird ein binärer (n, M, d) Code C betrachtet. Der Code hat die Länge n, was bedeutet, dass jedes Codewort ein binärer Vektor mit n Komponenten ist. Die Menge C enthält insgesamt M Codewörter. Der Code hat die Minimumdistanz d. Das bedeutet, dass sich zwei unterschiedliche Codewörter in mindestens d Komponenten voneinander unterscheiden. Mit einem Code der Minimumdistanz d können alle q-Bitfehler korrigiert werden, für 1 <= q < d/2.
-
Die Komponenten eines Codeworts sind redundant. Dadurch eröffnet sich die Möglichkeit zur Fehlerkorrektur.
-
Die typische Situation in der Kodierungstheorie ist die folgende: Ein Codewort c = (c1, c2, ... , cn) wird gesendet und ein Nachrichtenvektor y = (y1, y2, ..., yn) wird empfangen. Aufgrund von Übertragungsfehlern können sich für gewisse Positionen i die Komponenten yi und ci voneinander unterscheiden. Es wird jede Komponente von y als potentiell fehlerhaft angenommen. Mit der Hilfe eines Decoders werden die Positionen der tatsächlich fehlerhaften Komponenten ermittelt. Dies gelingt, wenn ihre Gesamtanzahl kleiner als d/2 ist. Kennt man die Positionen der fehlerhaften Komponenten, dann ersetzt man diese Komponenten durch ihr binäres Komplement - und erhält so aus y das Codewort c.
-
Wenn bekannt ist, dass in bestimmten Komponenten des empfangenen Nachrichtenvektors y mit Sicherheit kein Fehler aufgetreten ist - diese Komponenten yj somit mit den Codewort-Komponenten cj übereinstimmen - dann ermöglicht die Redundanz der Codewort-Komponenten einen zweiten, völlig anderen, Zugang zur Rekonstruktion des gesendeten Codeworts c aus y, der im Folgenden beschrieben wird.
-
Definition:
-
Sei C ein binärer Code der Länge n. Sei J = {j1 ... , jr} eine Indexmenge. D.h., die Menge J ist eine Teilmenge der Menge {1, ..., n}. Die Indexmenge J heißt codewortbestimmend, wenn es für jeden binären Vektor b = (b1, ..., br) höchstens ein Codewort c = (c1, ..., cn) in C gibt mit c(j
1) = b1, .. , c(j
r) = br.
-
Es stellt sich die Frage, wie viele Komponenten eines Codeworts bekannt sein müssen, um aus ihnen das gesamte Codewort berechnen zu können. Darüber geben die folgenden Sätze Auskunft.
-
Satz 1:
-
Sei C ein binärer (n, M, d) Code. Jede Indexmenge J = {j
1, ... , j
r} mit
ist nicht codewortbestimmend, wobei log(.) den Logarithmus zur Basis
2 bezeichnet.
-
Das heißt, dass weniger als log M Komponenten eines Codeworts nicht ausreichen, um das Codewort eindeutig zu rekonstruieren.
-
Satz 2:
-
Sei C ein binärer (n, M, d) Code. Jede Indexmenge J = {j
1, ... , j
r} mit
ist codewortbestimmend.
-
Das heißt, dass n - d + 1 Komponenten auf jeden Fall ausreichen, um das Codewort zu berechnen.
-
Satz 3:
-
Sei C ein binärer (n, M, d) Code, und sei J = {j
1, ... , j
r} codewortbestimmend und jede echte Teilmenge von J sei nicht codewortbestimmend. Dann gilt
-
Beispiel:
-
Für einen binären (32, 64, 16) Code (linear oder nichtlinear) ist n - d + 1 = 17 und log M = 6. Beliebige 17 Komponenten des 32 Bit langen Codeworts bestimmen das Codewort eindeutig. Manchmal genügen aber auch schon 6 Komponenten.
-
Ein binärer (n, M, d) Code C heißt linear, wenn C ein Vektorraum ist über dem Grundkörper F2 = {0,1}. Die Dimension des linearen Codes C ist die Dimension des Vektorraums C. Ein linearer Code der Dimension k enthält daher 2k Codewörter. Das heißt: M = 2k.
-
Für einen linearen Code der Länge n, der Dimension k und der Minimumdistanz d ist die Bezeichnung (n, k, d) Code üblich (anstelle der allgemeineren Bezeichnung (n, 2k, d) Code).
-
Ein binärer linearer (n, k, d) Code ist eindeutig definiert durch eine binäre k x n Matrix G vom Rang k, der sogenannten Generatormatrix.
-
Bei einem linearen (n, k, d) Code wird ein k Bit langer Nachrichtenvektor v zu einem n Bit langen Codewort c erweitert. Man sagt „v wird in c kodiert“. Die Kodierung wird mittels der Generatormatrix bewerkstelligt:
-
Die 2k möglichen Nachrichtenvektoren v und die 2k Codewörter des Codes stehen zueinander in bijektiver Korrespondenz: Ein beliebiger k Bit langer Nachrichtenvektor v bestimmt eindeutig das zugehörige n Bit lange Codewort und umgekehrt gehört zu jedem n Bit langen Codewort ein eindeutig bestimmter k Bit langer Nachrichtenvektor v.
-
Satz 4:
-
Sei C ein linearer (n, k, d) Code mit Generatormatrix
und sei J = {j
1, ..., j
r} eine Teilmenge von {1, ..., n}. Die Indexmenge J ist codewortbestimmend genau dann, wenn sich unter den r Spaltenvektoren G
(j
1) , ... , G
(j
r) der Generatormatrix k linear unabhängige Vektoren befinden.
-
Im Folgenden wird ein Algorithmus zur Rekonstruktion eines Codeworts aus bekannten Codewort-Komponenten beschrieben, d.h. eine Vorschrift, wie aus einer codewortbestimmenden Indexmenge J und dem zugehörigen Stützvektor b das Codewort c berechnet werden kann.
-
Sei J = {j1, ..., jr} die codewortbestimmende Indexmenge und b = (b1, ... ,br) der zugehörige Stützvektor. Das heißt, für das zu bestimmende Codewort c = (c1, ...,cn) gilt c(j
1) = b1,..., c(j
r) = br.
-
Sei G = (G
1, ..., G
n) die Generatormatrix des zugrundeliegenden linearen (n, k, d) Codes. Unter den r Spaltenvektoren
befinden sich nach Satz
4 k linear unabhängige Vektoren. Es werden k solche linear unabhängige Vektoren ausgewählt (falls es mehrere Möglichkeiten gibt, das zu tun, dann entscheidet man sich für eine dieser Möglichkeiten).
-
Die ausgewählten k linear unabhängigen Vektoren werden mit L1, ..., Lk bezeichnet.
-
Das heißt, dass {L1, ..., Lk} eine linear unabhängige Teilmenge von {G(j
1) , ..., G(j
r) } ist.
-
Da die Vektoren L
1, ... ,L
k linear unabhängig sind, ist die k x k Matrix
invertierbar. Sei M
-1 die inverse Matrix zu M. Das heißt, MM
-1 = I, wobei I die k × k - Einheitsmatrix ist.
-
Aus dem r Bit langen Stützvektor b = (b1, ..., br) wird ein k-Bit langer Vektor b' = (b1', ..., bk') extrahiert.
-
Der Vektor b' ist ein Teilvektor des Vektors b. Der Vektor b' entsteht aus dem Vektor b, indem r-k Komponenten von b gestrichen werden. Die Komponente bi wird genau dann aus dem Vektor b entfernt, wenn der Spaltenvektor G(j
i) nicht in der Menge {L1, ..., Lk} enthalten ist. Dabei ist zu beachten, dass b' ein Teilvektor von b ist, und b ein Teilvektor von c = (c1, ... ,cn) ist.
-
Nach Konstruktion von b' und der Matrix M gilt: c
j ist eine Komponente von b' genau dann, wenn G
j eine Spalte der Matrix M ist. Es gilt
für einen eindeutig bestimmten Nachrichtenvektor v der Länge k. Aus dieser Gleichung folgt
-
Multiplizieren beider Seiten der Gleichung von rechts mit der inversen Matrix M
-1 ergibt
-
Multiplizieren beider Seiten dieser Gleichung von rechts mit der Generatormatrix G ergibt
-
Zusammenfassend gilt
-
Satz 5 (Algorithmus zur Codewortrekonstruktion):
-
Gegeben sei ein linearer (n, k, d) Code C mit Generatormatrix G = (G1, ..., Gn).
-
Eingabe: Codewortbestimmende Indexmenge J = {j
1, ..., j
r},
Ausgabe: Codewort c = (c
1, ..., c
n).
- 1) Wähle k linear unabhängige Vektoren unter den Vektoren G(j
1) , ..., G(j
r) aus und bilde aus ihnen eine invertierbare Matrix M (so dass die ausgewählten Vektoren die Spalten der Matrix M darstellen).
- 2) Berechne die inverse Matrix M-1.
- 3) Bestimme den k Bit langen Teilvektor b' von b in Abhängigkeit von den in 1) selektierten k linear unabhängigen Spaltenvektoren der Generatormatrix G.
- 4) Berechne c = b' M-1 G.
-
c = (c1, ..., cn) ist dann das eindeutig bestimmte Codewort aus dem Code C mit der Eigenschaft C(j
i) = bi für i = 1, ..., r.
-
Im Folgenden wird die PUF-Wert- Rekonstruktion auf der Basis quasistabiler PUF-Komponenten beschrieben.
-
Gegeben sei wieder ein binärer linearer (n, k, d) Code C mit Generatormatrix
-
Wie oben bezeichnet P den wahren PUF-Wert und P' den aktuellen PUF-Wert.
-
Die Indexmenge J = {j1, ... , jr} wird dem kumulativen Fehlerregister entnommen.
-
Aufgrund der dem kumulativen Fehlerregisters entnommenen Indexmenge J wird davon ausgegangen, dass die Komponenten der Vektoren P und P' an den Stellen j1, ..., jr miteinander übereinstimmen.
-
Der Hilfsvektor H (ein Vektor, der wie die Vektoren P und P' ebenfalls die Länge n hat) steht zur PUF-Rekonstruktion zur Verfügung (z.B. aus dem Speicher
103). Es gilt
wobei c ein zufällig gewähltes Codewort ist (gewählt aus dem zugrundeliegenden Code C).
-
Das Ziel ist es, dieses unbekannte Codewort c zu berechnen. Daraus ergibt sich dann sofort der wahre PUF-Wert P = H + c.
-
Addieren von P' zu beiden Seiten der obigen Gleichung liefert
-
Der Vektor y = P' + H = (y1, ..., yn) lässt sich berechnen, da die Vektoren P' und H zur Verfügung stehen.
-
Da die Komponenten der Vektoren P und P' an den Stellen j
1, ..., j
r übereinstimmen, hat der Fehlervektor e = P'+P an diesen Stellen eine Null. Es gilt also
-
Mit anderen Worten: Der Vektor b = (y(j
1) , ..., y(j
r) ) ist ein Stützvektor für das gesuchte Codewort c.
-
Wenn die Indexmenge J codewortbestimmend ist, dann kann Satz 5 angewendet werden, um das Codewort c zu berechnen. Aus c ergeben sich sodann der wahre PUF-Wert P (via P = H+c), und der Fehlervektor e (via e = P+P'). Der Fehlervektor e kann zur Aktualisierung des kumulativen Fehlerregisters verwendet werden.
-
Zusammenfassend gilt:
-
Satz 6 (Algorithmus zur PUF-Wert-Rekonstruktion):
-
Sei J = {j1, ..., jr} eine codewortbestimmende Indexmenge.
-
Eingabe: P', H, J
-
Ausgabe: c, P, e
- 1) Berechne y = P'+H = (y1, ..., yn).
- 2) Berechne den Stützvektor b = (y(j
1) ,..., y(j
r) ).
- 3) Berechne mit dem in Satz 5 beschriebenen Algorithmus das eindeutig bestimmte Codewort c zu dem Stützvektor b, d.h. das Codewort c = (c1, ... , cn) mit c(j
i) = y(j
i) für i = 1,...,r.
- 4) Berechne P = c+H.
- 5) Berechne e = P'+P.
- 6) (optional): Aktualisiere das kumulative Fehlerregister mit e.
-
Sollte die dem kumulativen Fehlerregister entnommene Indexmenge J = {j1, ..., jr} nicht codewortbestimmend sein (d.h., unter den r Spaltenvektoren G(j
1) ,..., G(j
r) der Generatormatrix G befinden sich keine k linear unabhängigen Vektoren) dann kann die Indexmenge J dennoch für die PUF-Wert-Rekonstruktion genutzt werden, nämlich dann, wenn die Anzahl der linear unabhängigen Spaltenvektoren nur geringfügig kleiner als k ist, z.B. k-1, oder k-2. (siehe das unten stehende Beispiel 3 zur PUF-Rekonstruktion).
-
Beispiel 1 zur PUF-Rekonstruktion:
-
Die PUF habe die Länge n = 8.
-
Aktueller PUF-Wert: P' = 0111 0101.
-
Hilfsvektor: H = 1000 1110.
-
Zustand des kumulativen Fehlerregisters: R = 1011 0010.
-
Daher ist J = {2, 5, 6, 8}.
-
Der zugrundeliegende Code sei der (
8,
4,
4) Reed-Muller Code mit der Generatormatrix
-
Die Spaltenvektoren
sind linear unabhängig. Da der Code die Dimension k=4 hat, ist die Indexmenge J codewortbestimmend.
-
Die Matrix
ist invertierbar. Die zugehörige inverse Matrix ist
-
Die 2., 5., 6. Und 8. Komponente von y liefern den Stützvektor b = 1101.
-
(Der Vektor b hat bereits die richtige Länge k=4, das heißt b'=b.)
-
Eine Anwendung von Satz
5 ergibt
Daher ist P = c+H = 1110 0111, und e = P'+P= 1001 0010.
-
In Beispiel 1 konnte der wahre PUF-Wert P rekonstruiert werden, obwohl drei Fehler in P' aufgetreten sind. Da der zugrundeliegende Code die Minimumdistanz d=4 hat, können auf mit Hilfe eines Decoders (der gemäß dem verwendeten Code Fehler korrigiert) nur 1-Bitfehler korrigiert werden.
-
Beispiel 2 zur PUF-Rekonstruktion:
-
Betrachtet wird eine PUF der Länge n=31.
-
Der verwendete lineare Code sei der (
31,
5,
16) Simplex Code, dessen Codewörter die 32 linear rekursiven Folgen sind, die die Rekursion
erfüllen. Der Code hat die Generatormatrix
-
Der aktuelle PUF-Wert P', der Hilfsvektor H, und der aktuelle Zustand R des kumulativen Fehlerregisters seien gegeben durch
-
Daher ist J = {7, 10, 19, 24, 27, 29}.
-
Die Dimension des Codes ist k=5.
-
Die fünf Spaltenvektoren L
1 = G
7, L
2 = G
10, L
3 = G
19, L
4 = G
24 und L
5 = G
27 sind linear unabhängig. Daher ist
-
Der Stützvektor b ist: b = 1 1 1 0 0 0
-
Und der reduzierte Stützvektor b' ist: b' = 1 1 1 0 0
-
Aus Satz
5 folgt
-
Daraus ergibt sich der wahre PUF-Wert P:
-
Der Fehlervektor e ist:
-
Beispiel 3 zur PUF-Rekonstruktion:
-
PUF-Länge: n = 16.
-
Der zugrundeliegende Code sei der (
16,
5,
8) Reed-Muller Code mit Generatormatrix
-
Der Zustand des kumulativen Fehlerregisters sei R = 1101 1101 1101 1011.
-
Daher ist: J = {3, 7, 11, 14}.
-
Da die Dimension des Codes k=5 ist, die Indexmenge J aber nur vier Elemente enthält, ist Satz
5 nicht direkt anwendbar. Es werden dennoch die mit J assoziierten vier Spaltenvektoren der Generatormatrix G betrachtet, nämlich die Vektoren
-
Die vier Vektoren sind linear unabhängig. Daher hat die 5x4 Matrix
den Rang
4.
-
Es wird wieder der Vektor y berechnet:
-
Wegen J = {3, 7, 11, 14} ergeben sich die 3., 7., 11. und 14. Komponente des zu bestimmenden Codeworts c zu
-
Sei v = (v1, v2, v3, v4, v5) der zu c gehörige Nachrichtenvektor.
-
Aus
folgt insbesondere, dass
-
Das heißt:
-
Dies ist ein System von vier linearen Gleichungen in den fünf Unbekannten v1, ..., v5.
-
Da die Koeffizientenmatrix G
J den Rang
4 hat, gibt es genau zwei Lösungsvektoren:
-
Daher existieren auch zwei Lösungen für das gesuchte Codewort c, nämlich
und
-
Den beiden Codewortkandidaten entsprechen zwei PUF-Wert-Kandidaten:
und
-
Die beiden zugehörigen Fehlervektoren sind:
und
-
Da e1 neun Einsen, e2 dagegen nur fünf Einsen enthält, stellt der PUF-Wert P2 eine bessere Approximation an den aktuellen PUF-Wert P' dar. Es wird daher P2 als der wahrscheinlichere Kandidat für den wahren PUF-Wert P gewählt, d.h. P = P2.
-
Das kumulative Fehlerregister wird nicht von Anfang an genutzt, sondern wird erst nach einer bestimmten Anzahl von PUF-Wert-Erzeugungen genutzt. Dies wird im Folgenden erläutert.
-
Sei dazu wie oben P der (beispielsweise in der Fabrik) festgelegte wahre PUF-Wert. Seien P0, P1, P2, ... der erste, zweite, dritte, ... generierte aktuelle PUF-Wert. Mit dem Hilfsvektor H werden die Vektoren y0=H+P0, y1=H+P1, y2=H+P2, ... berechnet. Die Vektoren y0, y1, y2, ... werden in den Decoder eingegeben, der daraufhin die zugehörigen Fehlervektoren e0, e1, e2, ... berechnet. Aus den Fehlervektoren und dem Initialisierungsvektor R0 ergeben sich die Zustände R1, R2, R3, ... des kumulativen Fehlerregisters.
-
Angenommen zum Zeitpunkt t=3 befindet sich in einer bestimmten Zelle des kumulativen Fehlerregisters der Wert 0. Dann kann nicht davon ausgegangen werden, dass die entsprechende PUF-Komponente quasistabil ist. Diese Annahme wäre aber etwa dann angebracht, wenn zum Zeitpunkt t=3000 (beispielsweise) dort eine 0 steht - was bedeutet, dass im Laufe der ersten 3000 PUF-Wert-Generierungen in dieser Komponente niemals ein Fehler aufgetreten ist.
-
Die Zeitspanne während der das kumulative Fehlerregister noch nicht genutzt werden kann, wird als Aufbauphase bezeichnet.
-
Es stellt sich die Frage, wie lange die Aufbauphase dauert. Anders ausgedrückt ist es von Interesse, zu wissen, wie oft (mindestens) das kumulative Fehlerregister aktualisiert mit einem vom Decoder gelieferten Fehlervektor werden muss, bevor es genutzt werden kann (d.h. bis es verlässliche Angaben über die quasistabilen Komponenten liefert).
-
Der Zeitpunkt, ab dem das kumulative Fehlerregister einsatzbereit ist, wird beispielsweise ermittelt, indem berechnet wird, ab wann die Wahrscheinlichkeit für einen Fehler bei der Codewortrekonstruktion (basierend auf der Information in dem kumulativen Fehlerregister) kleiner ist als die Wahrscheinlichkeit für einen Decoder-Fehler.
-
Es ergibt sich:
-
Für eine PUF der Länge n mit durchschnittlicher Fehlerrate p und der Verwendung eines linearer (n, k, d) Codes ist das kumulative Fehlerregister zu einem Zeitpunkt t einsetzbar, wenn
wobei b die größte ganze Zahl mit b < d/2 ist.
-
Beispiel:
-
PUF-Länge sei n=16.
-
Durchschnittliche Fehlerrate ist 10%, das heißt p=0.1.
-
Der zugrundeliegende Code sei der (16, 5, 8) Reed-Muller Code.
-
Es ist B = (1-p)16 + 16 p (1-p)15 + 120 p2 (1-p)14 + 560 p3 (1-p)13 und 1/(1-B1/5) = 71,064.
-
Deshalb wird gemäß einer Ausführungsform das kumulative Fehlerregister 72 mal aktualisiert bevor es verwendet wird.
-
4 zeigt eine Anordnung 400, die unterschiedliche Betriebsmodi für die PUF-Rekonstruktion, insbesondere eine PUF-Rekonstruktion gemäß Satz 6, ermöglicht.
-
Die Anordnung weist ein PUF-Modul 401, einen Decoder 402, eine Steuereinrichtung 403, ein kumulatives Fehlerregister 404 und einen Codewort-Generator 405 auf.
-
Die Anordnung 400 ist beispielsweise Teil des PUF-Wert-Rekonstruktionsmoduls 107.
-
Ein erster Addierer 406 addiert die Hilfsdaten H (die z.B. im Speicher 103 gespeichert sind) zu dem vom PUF-Modul 401 gelieferten aktuellen PUF-Wert Pt.
-
Das Resultat yt wird über eine erste Sperre 407, wenn sie offen ist, dem Decoder 402 zugeführt. Der Decoder 402 ermittelt den zugehörigen Fehlervektor et oder das zugehörige Codewort C, wenn er nicht überfordert ist, weil zu viele Fehler passiert sind. Aus et bzw. c wird wie oben beschrieben der wahre PUF-Wert rekonstruiert.
-
Außerdem wird das Resultat yt über eine zweite Sperre 408, wenn sie offen ist, dem Codewortgenerator 405 zugeführt, der, unter Verwendung der Informationen über quasistabile Komponenten, die er von dem kumulativen Fehlerregister 404 erhält, das beispielsweise wie mit Bezug auf 2 oder 3 beschrieben gefüllt wird, eine PUF-Rekonstruktion gemäß Satz 6 durchführt.
-
Die Steuereinrichtung 403 kann den Stand des kumulativen Fehlerregisters auslesen. Die Steuereinrichtung 403 kann das kumulative Fehlerregister auch auf den Anfangszustand „Alles-Null“ zurückstellen (Reset). Die Steuereinrichtung 403 öffnet und schließt die Sperren 407, 408 beispielsweise gemäß einem der folgenden Betriebsmodi:
-
Decoder bevorzugt: Sperre 407 offen, Sperre 408 zu.
-
Wenn der Decoder 402 seine Aufgabe erledigen konnte, weil nicht zu viele Fehler passiert sind, wird der Codewort-Generator 405 nicht verwendet. Nur für den Fall, dass der Decoder 402 die Korrektur nicht bewältigen kann und diese Information der Steuereinrichtung 403 mitteilt, kommt der Codewort-Generator 405zum Einsatz.
-
Codewort-Generator bevorzugt: Sperre 407 zu, Sperre 408 offen.
-
Der Decoder 402 wird nur während der Aufbauphase benutzt, um das kumulative Fehlerregister aufzubauen. Danach wird das Codewort c (aus dem sich dann sofort der wahre PUF-Wert P ergibt) immer mit dem Codewort-Generator 405 berechnet.
-
Doppelberechnung: Beide Sperren 407, 408 offen.
-
Das Codewort c (und damit der wahre PUF-Wert P) werden auf zweifache Art berechnet: Mit dem Decoder 405 und mit dem Codewort-Generator 408.
-
Zusammenfassend wird gemäß verschiedenen Ausführungsformen eine Datenverarbeitungseinrichtung bereitgestellt, wie sie in 5 dargestellt ist.
-
5 zeigt eine Datenverarbeitungseinrichtung 500.
-
Die Datenverarbeitungseinrichtung 500 weist eine PUF-Wert-Quelle 501 auf, die dazu eingerichtet ist, einen Referenz-PUF-Wert und mehrere nachfolgende PUF-Werte zu liefern, wobei der Referenz-PUF-Wert und jeder nachfolgende PUF-Wert eine Vielzahl von binären Komponenten aufweist.
-
Die Datenverarbeitungseinrichtung 500 weist ferner eine Ermittlungseinrichtung 502 auf, die eingerichtet ist, eine Menge von Komponenten zu ermitteln, deren Wert bei den mehreren nachfolgenden PUF-Werten gleich ist.
-
Weiterhin weist die Datenverarbeitungseinrichtung eine PUF-Rekonstruktionseinrichtung 503 auf, die eingerichtet ist, den Referenz-PUF-Wert aus den nachfolgenden PUF-Werten ausgehend von der Annahme zu rekonstruieren, dass die Werte der ermittelten Komponenten bei dem nachfolgenden PUF-Wert mit den Werten der ermittelten Komponenten bei dem Referenz-PUF-Wert übereinstimmen.
-
In anderen Worten ist gemäß verschiedenen Ausführungsbeispiel eine Einrichtung zur Ermittlung der Positionen quasistabiler PUF-Komponenten vorgesehen und bei Existenz und die Werte der quasistabilen Komponenten des aktuellen PUF-Werts werden zur PUF-Rekonstruktion verwendet (beispielsweise bei Existenz und Kenntnis hinreichend vieler geeigneter quasistabiler PUF-Komponentenpositionen). Die PUF-Rekonstruktion erfolgt beispielsweise mittels eines Algorithmus zur Berechnung eines Codeworts aus bestimmten bekannten Komponenten des Codeworts.
-
Die Komponenten der Datenverarbeitungseinrichtung (wie beispielsweise die Ermittlungseinrichtung und die PUF-Rekonstruktionseinrichtung) können durch ein oder mehrere Schaltkreise realisiert sein. In einer Ausführungsform ist ein „Schaltkreis“ 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“ in einer Ausführungsform ein hart-verdrahteter Logik-Schaltkreis oder ein programmierbarer Logik-Schaltkreis sein, wie beispielsweise ein programmierbarer Prozessor. Unter einem „Schaltkreis“ kann auch ein Prozessor, der Software ausführt, zu verstehen sein, z.B. jegliche Art von Computer-Programm. Unter einem „Schaltkreis“ kann in einer Ausführungsform jegliche Art der Implementierung der im Weiteren beschriebenen Funktionen zu verstehen sein.
-
Die Datenverarbeitungseinrichtung 500 führt beispielsweise ein Verfahren zum Rekonstruieren eines PUF-Werts auf, wie es in 6 dargestellt ist.
-
6 zeigt ein Ablaufdiagramm gemäß einer Ausführungsform.
-
In 601 werden ein Referenz-PUF-Wert und mehrere nachfolgende PUF-Werte aus einer PUF-Wert-Quelle ausgelesen, wobei der Referenz-PUF-Wert und jeder nachfolgende PUF-Wert eine Vielzahl von binären Komponenten aufweist.
-
In 602 wird eine Menge von Komponenten, deren Wert bei den mehreren nachfolgenden PUF-Werten gleich ist, ermittelt.
-
In 603 wird der Referenz-PUF-Wert aus den nachfolgenden PUF-Werten ausgehend von der Annahme, dass die Werte der ermittelten Komponenten bei dem nachfolgenden PUF-Wert mit den Werten der ermittelten Komponenten bei dem Referenz-PUF-Wert übereinstimmen, rekonstruiert.
-
Im Folgenden werden weitere Ausführungsformen beschrieben.
-
Ausführungsform 1 ist eine Datenverarbeitungseinrichtung, wie sie in 1 dargestellt ist, wobei die PUF-Rekonstruktionseinrichtung eingerichtet ist, den Referenz-PUF-Wert basierend auf den Hilfsdaten zu rekonstruieren, wobei die Hilfsdaten auf dem Referenz-PUF-Wert und einem Codewort eines Codes basieren, und wobei der Code ein linearer Code ist, und den Referenz-PUF-Wert durch Auswahl von linear unabhängigen Spalten der Spalten, die den ermittelten Komponenten entsprechen, und Multiplikation der Inversen Matrix zu einer aus den ausgewählten Spalten gebildeten Matrix mit der Generatormatrix des Codes zu rekonstruieren.
-
Ausführungsform 2 ist eine Datenverarbeitungseinrichtung gemäß Ausführungsform 1, wobei die Hilfsdaten die Summe aus dem Referenz-PUF-Wert und einem Codewort eines Codes ist.
-
Ausführungsform 3 ist eine Datenverarbeitungseinrichtung gemäß Ausführungsform 1 oder 2, wobei die PUF-Rekonstruktionseinrichtung eingerichtet ist, den Referenz-PUF-Wert durch Ermitteln des Codeworts zu rekonstruieren.
-
Ausführungsform 4 ist eine Datenverarbeitungseinrichtung gemäß einer der Ausführungsformen 1 bis 3, aufweisend ein PUF-Modul zum Auslesen der nachfolgenden PUF-Werte aus der PUF-Quelle.
-
Ausführungsform 5 ist eine Datenverarbeitungseinrichtung gemäß einer der Ausführungsformen 1 bis 4, wobei die PUF-Quelle ein physikalisches Objekt ist.
-
Ausführungsform 6 ist eine Datenverarbeitungseinrichtung gemäß einer der Ausführungsformen 1 bis 5,
wobei die PUF-Quelle eine Komponente einer Chipkarte ist.
-
Ausführungsform 7 ist eine Datenverarbeitungseinrichtung gemäß einer der Ausführungsformen 1 bis 6, wobei die Datenverarbeitungseinrichtung ein Chipkartenmodul ist.
-
Ausführungsform 8 ist eine Datenverarbeitungseinrichtung gemäß einer der Ausführungsformen 1 bis 7, wobei die Ermittlungseinrichtung eingerichtet ist, die Menge von Komponenten, deren Wert bei den mehreren nachfolgenden PUF-Werten gleich ist, durch ODER-Verknüpfen der Fehlervektoren der nachfolgenden PUF-Werte zu ermitteln.
-
Ausführungsform 9 ist eine Verfahren zum Rekonstruieren eines PUF-Werts wie es teilweise in 6 dargestellt ist, wobei ein Speichern von Hilfsdaten zur Rekonstruktion des Referenz-PUF-Werts erfolgt, und wobei ferner der Referenz-PUF-Wert basierend auf den Hilfsdaten rekonstruiert wird, wobei die Hilfsdaten auf dem Referenz-PUF-Wert und einem Codewort eines Codes basieren, wobei der Code ein linearer Code ist und wobei der Referenz-PUF-Wert durch Auswahl von linear unabhängigen Spalten der Spalten, die den ermittelten Komponenten entsprechen, und Multiplikation der Inversen Matrix zu einer aus den ausgewählten Spalten gebildeten Matrix mit der Generatormatrix des Codes rekonstruiert wird.