Beschreibung
Titel
Verfahren zum sicheren Prüfen eines Codes Die Erfindung betrifft ein Verfahren zum sicheren Prüfen eines Codes und eine
Schaltungsanordnung zur Durchführung des vorgestellten Verfahrens, die auch als Tester bzw. Checker bezeichnet wird und vor Fehlerattacken gesichert ist.
Stand der Technik
Redundante Codes werden in sicherheitsrelevanten Systemen eingesetzt, in denen im Falle eines Fehlers durch einen Code-Checker der Fehler erkannt wird und dadurch eine kritische Situation abgewendet werden kann. Dabei spielen auch m aus n Codes eine Rolle. Darüber hinaus werden für kryptographische Anwendungen Zufallsgeneratoren benötigt, die nach Empfehlung der NIST (National Institute of Standards and Technology) (siehe hierzu gesonderte Veröffentlichung "Recommendation for Random Number Generation Using Deterministic Random Bit Generators", SP 800-90, März 2007) über einen Selbsttest verfügen sollen. Für beliebige deterministische Zufallsgeneratoren kann die Implementie- rung eines Selbsttests einen hohen Aufwand verursachen. Wenn man für die
Realisierung einen m aus n Code verwendet, so kann der empfohlene Selbsttest einfach durch einen Code-Checker realisiert werden.
Ein m aus n Code (m-out-of n-Code) ist dabei ein Fehlererfassungscode mit ei- ner Codewortlänge von n Bits, wobei jedes Codewort genau m Instanzen einer
Eins umfasst.
Zur Erzeugung eines m aus n Codes kann bspw. ein Maskengenerator mit m aus n Codierung verwendet werden. Ein möglicher Aufbau eines solchen Maskenge- nerators ist bspw. in Figur 1 dargestellt und wird an entsprechender Stelle hierin erläutert.
Maskengeneratoren sind wie andere kryptographische Geräte und kryptologische Algorithmen Angriffen ausgesetzt, mit denen geschützte Daten manipuliert oder ausgelesen werden sollen. Bei den heute üblichen Verschlüsselungsverfahren, wie z. B. der Advanced Encryption Standard AES, werden Schlüssel eingesetzt, die auf Grund der Schlüssellänge mit 128 und mehr Bits selbst unter Einsatz schneller Rechentechnik nicht durch "Ausprobieren" (sogenannte Brute-Force- Attacken) ermittelbar sind. Ein Angreifer untersucht deshalb auch Nebeneffekte einer Implementierung, wie den zeitlichen Verlauf des Stromverbrauchs, die zeit- liehe Dauer oder die elektromagnetische Abstrahlung einer Schaltung bei der
Verschlüsselungsoperation. Da die Angriffe nicht auf die Funktion direkt abzielen, bezeichnet man solche Attacken als Seitenkanalattacken.
Diese Seitenkanalattacken (side Channel attacks SCA) nutzen die physikalische Implementierung eines Kryptosystems in einem Gerät. Dabei wird das Steuergerät mit kryptographischen Funktionen bei der Ausführung der kryptologischen Algorithmen beobachtet, um Korrelationen zwischen den beobachteten Daten und den Hypothesen für den geheimen Schlüssel zu finden.
Es sind zahlreiche Seitenkanalattacken bekannt, wie diese bspw. in der Veröffentlichung von Mangard, Oswald und Popp in "Power Analysis Attacks", Springer 2007, beschrieben sind. Insbesondere mit der Differential Power Analysis DPA ist ein erfolgreicher Angriff auf den geheimen Schlüssel des AES praktisch durchführbar.
Bei einer DPA wird der Stromverbrauch eines Mikroprozessors während kryptog- raphischer Berechnungen aufgezeichnet und es werden Spuren der Stromaufnahme durch statistische Methoden mit Hypothesen verglichen.
Bei bekannten Verfahren, die die DPA erschweren, wird in den Algorithmus selbst eingegriffen. Dabei werden bei einem Maskieren die Operationen mit zufällig veränderten Operanden ausgeführt und im Ergebnis wird der Zufallswert dann wieder herausgerechnet, was bedeutet, dass der Zufall sich nicht auf das Ergebnis auswirkt. Eine weitere Möglichkeit ist das sogenannte Hiding, bei dem man high-low Übergänge durch entsprechende low-high Übergänge zu kompensieren versucht.
Die modernen kryptographischen Verfahren, wie bspw. der Advanced Encryption Standard AES, sind, wie vorstehend bereits ausgeführt wurde, durch die Länge der Schlüssel und die Komplexität des Verfahrens selbst beim derzeitigen Stand der Rechentechnik gegen die sogenannten Brute-Force-Angriffe, d. h. Ausprobieren aller Möglichkeiten, gut geschützt. Die Attacken eines potenziellen Angreifers richten sich deshalb zunehmend auf die Implementierungen. Der Angreifer versucht mit sogenannten Seitenkanalattacken über den Stromverbrauch bei der Verarbeitung des Algorithmus über die elektromagnetische Abstrahlung oder die operandenabhängige Zeitdauer der Verarbeitung Informationen zu gewinnen, die auf den geheimen Schlüssel schließen lassen. Verknüpft man jedoch den geheimen Schlüssel oder die Eingangs/Ausgangssignale einer kryptographischen Operation mit einer dem Angreifer unbekannten Maske, so wird ein Angriff erschwert oder gar verhindert. Der Angreifer wird dann versuchen, zunächst die geheime Maske herauszufinden.
Eine Möglichkeit zur Verbesserung der Robustheit gegen solche Seitenkanalan- griffe besteht darin, bei einem Maskengenerator eine Anordnung von gleich aufgebauten Zustandsautomaten bzw. Zustandsmaschinen zu verwenden, denen eingangsseitig ein Eingangssignal zugeführt wird und die in Abhängigkeit ihres Zustande ein Ausgangssignal erzeugen, wobei jede Zustandsmaschine stets einen anderen Zustand aufweist als die anderen Zustandsmaschinen der Anordnung. Dabei wird davon ausgegangen, dass durch die jeweils gleiche Anzahl von Einsen und Nullen (und damit ein gleiches Hamming-Gewicht) und durch Übergänge dieser Zustände bei gleichen Eingangssignalen mit jeweils einer gleichen Hamming-Distanz der Stromverbrauch unabhängig von dem jeweiligen Zustand der benutzten Zustandsmaschinen ist.
Es ist bekannt, dass man durch sogenannte Fehlerattacken eine Schaltung in ei- nen Zustand bringen kann, der eigentlich nicht für den normalen Betrieb vorgesehen ist. Dieser nicht normale Betrieb bietet eine Möglichkeit, den geheimen Schlüssel einfacher zu ermitteln. So könnte man bspw. durch gezielte Änderung der Betriebsspannung (Spike-Attacke), durch elektromagnetische Felder oder durch Strahlungen, bspw. Alpha-Partikel oder Laser, eine Änderung des Zu- Stands einzelner oder aller benutzter Zustandsmaschinen in einen Zustand
(0, 0, ... ,0) bewirken. Wird ein damit erzeugter Bitvektor zur Maskierung eines
Schlüssels benutzt, so geht der ursprünglich vorgesehene Schutz des Schlüssels vor Seitenkanalangriffen ganz oder zumindest teilweise verloren. Der geheime Schlüssel ist somit leichter ermittelbar. Durch spezielle Code-Checker kann man insbesondere bei m aus n Codes sehr leicht überprüfen, ob ein oder auch mehrere Bits (insbesondere in einer Richtung) verfälscht wurden.
Solche Code-Checker sind bspw. in der Veröffentlichung von A.P. Stroele und S. Tarnick, Programmable Embedded Self-Testing Checkers for AI I-Unidirectional Error Detecting Codes, Proceedings of the 17th IEEE VLSI Test Symposium, Dana Point, CA, 1999, Seiten 361 bis 369 beschrieben. Hierin ist ein Code- Checker beschrieben, wobei der Code-Checker die Ausgänge eines Systems überwacht, um auftretende Fehler so schnell wie möglich zu erfassen. Der Checker ist aus einer Anzahl von Volladdierern und Flip-Flops aufgebaut und weist eine gleichmäßige Struktur auf. In einer weiteren Veröffentlichung von S. Tarnick, Design of Embedded Constant Weight Code Checkers Based on Averaging Operations, Proceedings of the 16th IEEE On-Line Testing Symposium, Corfu Island, Greece 2010, Seiten 255 - 260, wird eine vereinfachte Schaltung zum gleichen Zweck beschrieben.
Die Druckschrift WO 2006/003023 A2 beschreibt ein Verfahren und eine Anordnung zur Erkennung von unidirektionalen Fehlern in Wörtern von systematischen ungeordneten Codes. Auch diese Anordnung umfasst eine Anzahl von
Volladdierern und Flip-Flops. Die Anordnung, die eine Übersetzungsschaltung und einen Berger-Typ-Code-Checker umfasst, kann mit einer geringen Zahl an Codewörtern getestet werden.
Die in den genannten Druckschriften beschriebenen Code-Checker sind so aufgebaut, dass sie sich selbst testen. Dazu wird der Coderaum mit einem ersten Checker so reduziert, dass nur noch die Hälfte der Codebits vorliegt und auch nur die Hälfte davon den Wert 1 hat (m/2 aus n/2) Dieser Vorgang wird bspw. solange durchgeführt, bis ein 1 aus 2 Code vorliegt (Dual-Rail-Code). Das geht aber nur, wenn m = n/2 ist.
Dieser Dual-Rail-Code wird schließlich in einem sich selbsttestenden Dual-Rail- Code-Checker geprüft, wie er bspw. in dem folgenden Artikel beschrieben ist: S
Kundu, S.M. Reddy, Embedded Totally Self-Checking Checkers A Practical Design, Design and Test of Computers, 1990, Band 7, Ausgabe 4, Seiten 5 bis 12.
Nachteilig bei bekannten Code-Checkern ist, dass diese selbst nicht gegen einen Angriff, bspw. eine DPA, resistent sind. Unabhängig davon, ob eine Fehlerattacke vorliegt oder nicht, könnte ein Angreifer die Periode des Code-Checks nutzen, um Rückschlüsse auf den verwendeten geheimen Schlüssel zu ziehen.
Offenbarung der Erfindung
Vor diesem Hintergrund werden ein Verfahren zum sicheren Prüfen eines Codes mit den Merkmalen des Anspruchs 1 und eine Schaltungsanordnung gemäß Anspruch 7 zur Durchführung des Verfahrens vorgestellt. Ausführungen ergeben sich aus den abhängigen Ansprüchen und der Beschreibung.
Mit dem vorgestellten Verfahren wird die Gefahr beseitigt, einen Code-Checker mittels einer DPA zu attackieren. Es wird somit die Möglichkeit eröffnet, eine Struktur mit 2n Zustandsautomaten mit jeweils n Bits Zustand permanent auf Fehler zu überprüfen, wenn alle diese Zustandsautomaten immer einen unterschiedlichen Zustand haben sollen. Dabei ist die Prüfung selbst nicht mehr für eine DPA ausnutzbar. Das ermöglicht die Realisierung eines DPA-resistenten Zufallsgenerators gemäß der Empfehlung der NIST, bspw. in der Veröffentlichung NIST SP 800-90, in der ein Selbsttest eines deterministischen Random Bit Generator (DRGB) gefordert wird.
Das hierin vorgeschlagene Verfahren geht, zumindest in einigen der Ausgestaltungen, weit über die Forderung der NIST hinaus, die nur einen Selbstest fordert. Mit der Möglichkeit der Überwachung wird ein deutlich gesteigerter Schutz, bspw. vor Fehlerattacken, gewährleistet.
Weitere Vorteile und Ausgestaltungen der Erfindung ergeben sich aus der Beschreibung und den beiliegenden Zeichnungen.
Es versteht sich, dass die voranstehend genannten und die nachstehend noch zu erläuternden Merkmale nicht nur in der jeweils angegebenen Kombination, son-
dem auch in anderen Kombinationen oder in Alleinstellung verwendbar sind, ohne den Rahmen der vorliegenden Erfindung zu verlassen.
Kurze Beschreibung der Zeichnungen
Figur 1 zeigt eine Ausführungsform eines Maskengenerators.
Figur 2 zeigt einen Code-Reduzierer (weight averaging circuit) als erste Stufe eines 8 aus 16 Code-Checkers.
Figur 3 zeigt einen dreistufigen Code-Reduzierer für m aus n Code mit m = 8 und n = 16.
Figur 4 zeigt einen Two-Rail-Code-Checker TRC.
Figur 5 zeigt die Bildung eines Fehlersignals error aus den Dual-Rail-Signalen aus Figur 3.
Figur 6 zeigt einen dreistufigen Code-Reduzierer entsprechend dem Code- Reduzierer aus Figur 3, der um eine Transfereinheit ergänzt ist.
Figur 7 zeigt eine Ausführung einer Transfereinheit.
Figur 8 zeigt in einem Flussdiagramm eine Ausführung des beschriebenen Verfahrens.
Figur 9 zeigt in einem Flussdiagramm eine weitere Ausführung des beschriebenen Verfahrens.
Figur 10 zeigt einen Verfahrensschritt aus Figur 9 in detaillierterer Form.
Figur 1 1 zeigt in einem Flussdiagramm noch eine weitere Ausführung des beschriebenen Verfahrens.
Figur 12 zeigt in einem Flussdiagramm eine weitere Ausführung des beschriebenen Verfahrens.
Figur 13 zeigt in einem Flussdiagramm noch eine weitere Ausführung des beschriebenen Verfahrens.
Figur 14 zeigt eine Vertauschungseinheit für zyklische Codes.
Ausführungsformen der Erfindung
Die Erfindung ist anhand von Ausführungsformen in den Zeichnungen schematisch dargestellt und wird nachfolgend unter Bezugnahme auf die Zeichnungen ausführlich beschrieben.
Figur 1 zeigt schematisch eine Ausführungsform eines Maskengenerators, der insgesamt mit der Bezugsziffer 100 bezeichnet ist. Dieser Maskengenerator 100 dient zur Bildung eines Bitvektors mit 128 Bit aus einem Eingangssignal 102. Hierzu umfasst die Schaltungsanordnung 100 vier Anordnungen 104, 106, 108 und 1 10, die jeweils sechszehn Transformationselemente TE_0, TE_1 , TE_2, TE_15 umfassen. Der Übersichtlichkeit halber sind in Figur 1 nur jeweils vier der sechzehn Transformationselemente TE_0, TE_1 , TE_2, TE_15 dargestellt. In dieser Ausführung ist der Maskengenerator 100 derart ausgebildet, dass jedem Transformationselement TE_0, TE_1 , TE_2, TE_15 jeder der Anordnungen 104, 106, 108 und 1 10 dieselben Eingangsdaten bzw. dasselbe Eingangssignal 102 zugeführt werden bzw. wird. Wichtig ist, dass in jeder Anordnung 104, 106, 108, 1 10 alle Transformationselemente TE_0, TE_1 , TE_2, TE_15 gleichartig mit den Eingangssignalen verbunden sind, aber verschiedene Anordnungen 104, 106, 108 und 1 10 sich voneinander unterscheiden können.
Die Transformationselemente TE_0, TE_1 , TE_2, TE_15 bilden aus dem ihnen zugeführten Eingangssignal 102 ein vorliegend nicht näher spezifiziertes Ausgangssignal. Diese Ausgangssignale werden kombiniert und darauf eine Signatur S 120 mit 256 Bit erhalten. Die Transformationselemente TE_0, TE_1 , TE_2, TE_15 weisen jeweils einen Zustandsautomaten ZA bzw. eine Zu- standsmaschine auf, dessen bzw. deren Zustandsinformationen bspw. in Form eines digitalen Datenworts vorgebbarer Breite gespeichert sind. Beispielsweise kann die Zustandsmaschine ZA eine Speicherkapazität von 4 Bit aufweisen, so dass insgesamt 16 verschiedene Zustände möglich sind. Die Zustandsmaschi-
nen ZA jeweils einer Anordnung 104, 106, 108, 1 10 sind gleichartig ausgebildet. Gleichartig bedeutet, dass jede Zustandsmaschine ZA, ausgehend von identischen Eingangssignalen 102 und einem identischen Initialisierungszustand, denselben Folgezustand in einem nachfolgenden Verarbeitungszyklus wie eine an- dere gleichartige Zustandsmaschine ZA annehmen wird.
Es ist weiterhin vorgesehen, dass jede Zustandsmaschine ZA stets jeweils einen anderen Zustand aufweist als alle anderen Zustandsmaschinen ZA der entsprechenden Anordnungen 104, 106, 108 oder 1 10. Dadurch werden DPA-Attacken erschwert, die aus der Analyse einer elektrischen Strom- und/oder Leistungsaufnahme oder von Störabstrahlungen versuchen, Rückschlüsse auf einen internen Verarbeitungszustand der Schaltungsanordnung 100 bzw. der einzelnen Transformationselemente TE_0, TE_1 , TE_2, TE_15 zu ziehen. Es ist von Vorteil, wenn die Anzahl der vorgesehenen Transformationselemente
TE_0, TE_1 , TE_2, TE_15 der Anzahl der maximal möglichen verschiedenen Zuständen der Zustandsmaschine ZA entspricht, in diesem Fall sechzehn. Dadurch liegt stets, d. h. zu jedem Verarbeitungszyklus, jeder theoretisch mögliche Zustand in genau einer Zustandsmaschine ZA vor, so dass nach außen, d. h. gegenüber einem möglichen Angreifer, der eine DPA-Attacke führt, jeweils nur eine Kombination aller sechzehn möglichen Zustände "sichtbar" ist. Auch in einem darauffolgenden Verarbeitungszyklus, bei dem zwar die einzelnen Zustandsmaschinen ZA jeweils ihren Zustand entsprechend einer vorgegebenen Regel ändern, liegt wiederum insgesamt in jedem der sechzehn Zustandsma- schinen ZA genau einer der sechzehn möglichen Zustände vor, so dass nach außen wiederum alle sechzehn Zustände gleichzeitig "sichtbar" sind.
Das hat zur Folge, dass ein möglicher Angreifer aus einer entsprechenden elektromagnetischen Abstrahlung, die bei einer üblichen Realisierung der Schal- tungsanordnung 100 gegeben ist, oder auch aus der elektrischen Leistungsaufnahme der Schaltungsanordnung 100, nicht auf einen Zustand der internen Signalverarbeitung in den Transformationselementen TE_0, TE_1 , TE_2, TE_15 schließen kann. Bei einer ideal symmetrischen Auslegung aller Komponenten ist die elektrische Leistungsaufnahme stets konstant, so dass das abgestrahlte elek- tromagnetische Feld jeweils keine signifikanten Änderungen bei einem Zu- standswechsel zwischen aufeinanderfolgenden Verarbeitungszyklen erfährt. Aus
der Signatur S 120 wird durch eine lineare Verknüpfung in Block 122 ein Bitvektor 130 mit 128 Bit erzeugt. Die lineare Verknüpfung kann bspw. eine EXOR- oder auch eine EXNOR-Verknüpfung sein. Um dem potenziellen Angreifer die Arbeit weiterhin zu erschweren, werden die Ausgänge der verschiedenen Trans- formationselemente vor der linearen Verknüpfung vertauscht. Eine sinnvolle
Maßnahme ist dazu die Rotation der Zustände innerhalb einer Anordnung in Abhängigkeit von den Eingangsdaten.
Der dargestellte Maskengenerator 100 benutzt die sogenannte nichtlineare Sig- naturbildung. Es ist somit bekannt, wie man aus p gleich aufgebauten Zustands- maschinen mit jeweils q Zustandsbits eine Struktur aufbauen kann, die eine vom jeweiligen Zustand dieser Zustandsmaschinen unabhängige Stromaufnahme besitzt. Dazu muss man einen kompletten Satz der Zustandsmaschinen (COmplete Set of State MAchines COSSMA) bereitstellen. Das liegt genau dann vor, wenn p = 2q ist. Hat nun jede Zustandsmaschine einen anderen Anfangszustand, so liegen in den p*q Bits zwangsläufig (p*q)/2 Einsen und genauso viele Nullen vor. Werden weiterhin alle diese Zustandsmaschinen einer solchen Anordnung mit den gleichen Eingangssignalen versehen. Hat jede dieser Zustandsmaschinen bei einem beliebigen Eingangssignal immer einen eindeutigen Nachfolge- und einen eindeutigen Vorgängerzustand, so sind die Zustände der m Zustandsmaschinen zu jeder Zeit voneinander verschieden und es muss sich deshalb zwangsläufig um einen kompletten Satz aller möglichen Zustände handeln. Es liegt somit zu jedem Zeitpunkt der Verarbeitung von Eingangsdaten ein (p*q)/2 aus (p*q) Code vor.
In einem praktischen Beispiel ist q = 4 und somit p = 24 = 16. Die 16 Zustandsmaschinen haben dann immer die Zustände 0, 1 , 2, ... ,15 vorliegen, nur die Position dieser Zustände wechselt beliebig. Mit p * q = 64 liegen immer genau 32 Einsen und 32 Nullen an den Ausgängen aller dieser Zustandsmaschinen vor. Mit einem Code-Checker, wie oben nach dem Stand der Technik beschrieben, könnte man diesen 32 aus 64 Code prüfen. Ein solcher Code-Checker wäre aber sehr aufwendig, weil schon in einer ersten Reduktionsstufe in einem Schaltkreis für eine gewichtete Mittelwertbildung zur Code-Reduzierung, einem sogenannten Weight Averaging Circuit WAC, 32 Volladierer-Zellen und zusätzlich zwei Flip- Flops benötigt würden. In der zweiten Stufe wären dann 16 Volladdierer und zwei
Flip-Flops notwendig und so fort, bis nur noch 2 Volladdierer und zwei Flip-Flops
notwendig wären. Mit 62 Volladdierern (ca. 8 GE), 10 Flip-Flops (ca. 8 GE) und 6 Dual-Rail-Checkern (ca. 4 GE) wäre der Gesamtaufwand mit ungefähr 600 Gatter-Äquivalenten (GE) anzusetzen. Wenn man das für eine 4-fache Struktur mit 4 * 64 Bits durchführen würde, so hätte man insgesamt ca. 2400 Gatter an Schal- tungsaufwand in der parallelen Realisierung.
Die vorgestellte Realisierung nutzt dagegen aus, dass in den gleichen Bitpositionen der Zustandsmaschinen zu jedem Zeitpunkt gleich viele Einsen vorhanden sind. Dadurch kann man die Prüfung aufteilen und jeweils nur 16 Bits in einem Prüfschritt testen. Die weiteren 3 x 16 Bits testet man dann in drei weiteren Prüfschritten. Anders als bei den nach dem Stand der Technik vorgesehenen Code- Checkern kann man die Flip-Flops vor und nach den Volladdierern im Weight Averaging Circuit vollständig einsparen, wenn man einen in der Schaltung ohnehin vorhandenen Zähler ausnutzt und jeweils ein Bit davon auf einen Weight Averaging Circuit WAC (Code-Reduzierer) bspw. als Eingang x0 benutzt. Um die
Schaltung selbsttestend zu realisieren, müssen die Carry-in-Eingänge der Weight-Averaging-Schaltung und der Dual-Rail-Checker alle möglichen Kombinationen mindestens einmal annehmen. In Figur 2 ist eine solche Weight-Averaging-Schaltung (Code-Reduzierer)
WAC_16 (ohne die nach dem Stand der Technik üblichen Flip-Flops) für 16 Eingangsbits d0 ... dis gezeigt. Die Darstellung verdeutlicht 16 Zustandsmaschinen 200 mit jeweils 4 Bits, von denen in dieser Darstellung 5 wiedergegeben sind. Weiterhin sind gemäß Figur 2 acht Volladdierer 202 vorgesehen, von denen der Übersichtlichkeit wegen nur drei dargestellt sind, und ein Nicht-Gatter 204. Mit einer gestrichelten Linie umrandet ist ein Code-Reduzier (WAC) 206 gezeigt. Dieser stellt eine Stufe 220 eines in Figur 3 gezeigten dreistufigen Code- Reduzierers dar, in der diese Stufe mit dem Bezugszeichen 304 gekennzeichnet ist.
Als Eingangsbits werden in dieser Schaltung die MSBs der 16 Zustandsmaschinen benutzt. Haben die 16 Zustandsmaschinen alle einen anderen Zustand, so sind in den 16 Eingangsbits genau 8 Einsen enthalten (8 aus 16 Code). Wie in der Literatur nach dem Stand der Technik gezeigt (Stroele, Tarnick), wird an den 8 Ausgängen w'0, w'-ι, ...w'7 von 304 ein 4 aus 8 Code genau dann generiert, wenn der Eingang ein 8 aus 16 Code war und die Reduzier-Schaltung keinen
Fehler enthält. Der Eingang x0 erzeugt einen Ausgang x-ι mit x-ι = /x0, wenn kein Fehler vorliegt. Für dieses erste Signalpaar liegt somit ein 1 aus 2 Code vor. Um die Eigenschaft des Selbsttestens zu gewährleisten, muss x0 häufig wechseln und auch d0 ... di5 sollten nicht konstant sein.
Mit sumn (n = 0, 1 , 2 ...) sind Summenbits, mit cinn (n = 0, 1 , 2, ...) sind Übertrags- Eingangsbits der Volladdierer bezeichnet. coutn (n = 0, 1 , 2 ...) sind die Über- trags-Ausgangsbits (Ausgänge der Volladdierer 202), die als Signale wn (n = 0, 1 , 2 ...) in die nächste Stufe überführt werden.
In Figur 3 wird schließlich ein dreistufiger Code-Reduzierer wiedergegeben. Die Darstellung zeigt wiederum Zustandsmaschinen 300 mit jeweils 4 Bits, eine entsprechende Anzahl an 4 zu 1 Multiplexern 302, einen ersten WAC 304
(WAC_16), einen zweiten WAC 306 (WAC_8) und einen dritten WAC 308 (WAC_4) sowie einen Zähler 310. Neben dem vorstehend beschriebenen Signalpaar x0, Xi liegen an der anderen Stufe die Signalpaare x2, Xß bzw. x4, x5 vor, die im fehlerfreien Fall auch einem 1 aus 2 Code entsprechen. Diese Signalpaare werden zusammen mit dem reduzierten Code geprüft. Es wird vorstehend von einem mehrstufigen Code-Reduzierer gesprochen. Die in Figur 3 dargestellte Anordnung kann auch als eine Anordnung bezeichnet werden, die drei Code-
Reduzierer, WAC 304 (WAC_16), WAC 306 (WAC_8) und WAC 308 (WAC_4), umfasst.
Dabei werden über die Zählerbits e0 und ei alle 4 zu 1 Multplexer 302 gleichartig angesteuert, dass sie jeweils das gleiche Positionsbit der Zustandsmaschine 300 als Bit g, auswählen. Je nach den 4 Zuständen dieser 2 Zählerbits wird somit ein bestimmtes Bit aus jeweils einer der angeschlossenen 16 Zustandsmaschinen 300 auswählt, das dann im Code-Reduzierer bzw. WAC_16 304 verarbeitet wird. Diese Eingänge sollten im fehlerfreien Fall einem 8 aus 16 Code entsprechen. Die 8 Ausgänge w'0 ... w'7 des WAC_16 ergeben einen 4 aus 8 Code und werden mit den Eingängen des WAC_8 bzw. Code-Reduzierer 306 verbunden. Der WAC_8 306 ist ähnlich wie der WAC_16 304 aufgebaut, hat aber nur halb so viele Volladdierer und das letzte Summenbit wird invertiert auf den Ausgang x3 geschaltet. Der dann weiter vorgesehene Code-Reduzierer bzw. WAC_4 308 hat nur zwei Volladdierer und zwei Ausgänge, auf die das Carry-Out dieser
Volladdierer geschaltet wird: x6 und x7. Der zusätzliche Ausgang x5 ist der inver-
tierte Summenausgang des zweiten Volladdierers im Code-Reduzierer bzw. WAC 4 308.
Im fehlerfreien Fall liefern die jeweiligen Paare x0 und x-i, x2 und x3, x4 und x5 sowie x6 und x7 jeweils einen "Dual-Rail-Code" (oder 1 aus 2 Code), d. h. immer genau ein Signal dieser Paare ist 1 . Es genügt nun zu testen, ob diese Eigenschaft für alle diese Signalpaare erfüllt ist. Diese Prüfung wird in sogenannten Two-Rail-Code-Checkern TRC nach Figur 4 vorgenommen.
Dabei ist e2 ...e0 ein event counter, der mit jedem Code-Check (jeweils 16 Bits der 64 werden in 4 Phasen geprüft) weitergezählt wird.
Es ist somit möglich zu prüfen, ob jeder dieser Zustandsautomaten zu dem Zeitpunkt der Prüfung einen anderen Zustand besitzt, was auf eine fehlerfreie Funktionsweise hindeutet. Es ist bei diesem Verfahren jedoch möglich, dass die Prüfung selbst Rückschlüsse auf die geheimen Zustände des Zustandsautomaten gestattet, wenn man bspw. den Stromverbrauch des Code-Checkers während der Prüfung untersucht. Hier setzt das vorgestellte Verfahren an.
Figur 4 zeigt einen Code Checker 400, in diesem Fall einen Two-Rail-Checker TRC. Dieser TRC 400 hat einen ersten Eingang 402 und einen zweiten Eingang 404. Weiterhin zeigt die Darstellung zwei Komplexgatter, die jeweils zweimal zwei verschiedene Eingänge durch ein UND-Element 406 verknüpfen, die zwei Ausgänge dieser UND-Elemente 406 anschließend durch ein Oder-Element 408 verknüpfen und invertieren. Die UND-ODER- und Invertierungselemente können dabei in einem Komplexgatter so realisiert werden, dass sie nicht vereinzelbar sind oder auch in separaten Elementen.
Der TRC 400 bildet aus zwei dual-rail-codierten Signalen an den beiden Eingängen 402 und 404 ein Dual-Rail-Ausgangssignal an einem Ausgang 412. Wenn der Dual-Rail-Code bei beiden Eingangssignalpaaren der Eingänge 402 und 404 nicht verletzt ist und der TRC 400 selbst fehlerfrei arbeitet, wird der Ausgang 412 auch als Dual-Rail-Paar gebildet.
Wie in Figur 5 gezeigt, können die x-Signale von Figur 3 in solchen TRCs zu einem einzigen Dual-Rail-Paar zusammengefasst werden. Die Figur zeigt einen ersten TRC 500, einen zweiten TRC 502, einen dritten TRC 504, ein
Äquivalenzglied 506 und ein Antivalenzelement 508.
Ein Codefehler liegt dann vor, wenn die beiden Ausgangssignale des dual rail checkers 504 gleich sind. Es wird das Signal "error" 510 gleich 1 und "nicht error" 512 gleich 0, sobald die beiden Ausgänge von 504 gleich sind. Im fehlerfreien Fall ist 510 gleich 0 und 512 gleich 1. Wenn die Einganssignale x0, X2 und x4 jede beliebige Kombination annehmen, so sind die TRC self-testing. Diese Eigenschaft wird durch die Zählerbits e2 ... e0 gewährleistet, wenn der Zähler von 0 bis 7 durchzählt. Der Code des Zählers ist beliebig (Binärcode, Graycode, Exzess-3- Code, vorwärts oder rückwärts zählend), wenn nur alle Belegungen der benutzten Bits in der Folge auftreten. Das Signal "error" am Ausgang 510 des
Äquivalenzglieds 506 in Figur 5 bedeutet entweder einen Codefehler oder einen Fehler im Code-Checker selbst. Um einem Fehler im Äquivalenzglied 506 selbst (das das Error-Signal an einem Ausgang 510 ausgibt) zu erkennen, wird redundant das Signal /error über das Antivalenzelement 508 (EXOR) an einem Ausgang 512 ausgegeben.
Der Code-Checker nach Figur 5 im Zusammenhang mit Figur 3 kann nun im Maskengenerator (oder auch allgemein Zufallsgenerator) gemäß Figur 1 wie folgt verwendet werden:
1 . Prüfung erfolgt sofort in der Eingabephase von jeweils 16 Codebits einer COSSMA-Anordnung (COSSMA, COmplete Set of State MAchines), im vorstehenden Beispiel 16 Zustandsmaschinen mit jeweils 4 Bits. Durch diese parallele Prüfung während der Generierung der Maske können bei jedem Eingangsvektor bzw. Eingangssignal 102 jeweils 16 der 64 Bits einer COSSMA- Anordnung geprüft werden. Nach vier Takten ist jeweils die gesamte
COSSMA-Anordnung geprüft. Treten Fehler auf, so wird die weitere Masken- generierung abgebrochen. Das verhindert, dass ein Angreifer das durch einen eingeschleusten Fehler veränderte Stromprofil der gestörten Schaltung beobachten kann. Es muss jedoch verhindert werden, dass die Selbsttestschaltung selbst einem Angreifer mehr Möglichkeiten zu einem Angriff bietet. Das wird insbesondere dadurch erschwert, dass der Angreifer Hypothesen
auf alle Bits des Initialzustandes eines COSSMA setzen muss. Da die Eingangsbits auf alle Zustandsmaschinen einer COSSMA-Anordnung gleichartig wirken, ist ein Angriff auf einzelne Zustandsbits nicht erfolgversprechend.
2. Die Prüfung nach erfolgter Rotation. Diese Variante hat den Vorteil, dass die einzelnen Zustandsmaschinen im Mittel von allen Bits des Anfangszustands eines COSSMA abhängen. Weiterhin hat dieses Verfahren den Vorteil, dass ein erst nach der Rotation eingeschleuster Fehler erkannt wird und die Generierung einer Maske auch dann noch verhindert wird. Ein Nachteil ist, dass in der Eingabephase eingeschleuste Fehler nicht erkannt werden und dann das geänderte Stromverhalten von einem Angreifer ggf. ausgenutzt werden kann.
3. Ein Kombination von 1. und 2.: Die COSSMA werden ständig für jeweils 16 Bits überwacht.
Die vorgeschlagene Schaltung benötigt 14 Volladdierer (je 8 GE), 3 Inverter (je 0,5 GE), 16 x 4:1 Multiplexer (je 7,5 GE), 3 TRC (je 4 GE) und 2 XOR/XNOR (je 2,5 GE). In der Gesamtzahl sind das ca. 250 GE und damit deutlich weniger als der oben genannte Vorschlag mit 600 GE. Für 4 COSSMA-Strukturen benötigt man somit entweder 4 x 250 = 1000 GE, oder man führt die Operation für die 4 Strukturen nacheinander auf der gleichen Hardware durch und benötigt zusätzlich 64 x 4:1 Multiplexer mit 480 GE, d. h. ca. 750 GE insgesamt.
In einer Verallgemeinerung des Verfahrens, sind auch andere Codes, die nicht der Bedingung m = n/2 genügen, überprüfbar.
Für den Fall, dass m + n/2 ist, lässt sich der m aus n Code nicht über mehrere Stufen auf zwei Bits wie in Figur 2 (x6 und x7) zurückführen. Sind bspw. m = 4 und n = 16, so sind nur zwei Stufen in der gezeigten Art möglich. Die Ausgänge w"0 ... w"3 bilden dann einen 1 aus 4 Code, der mit üblichen Code-Checkern geprüft werden kann und einen Dual-Rail-Ausgang liefert.
Sind m = 2 und n = 16, so ist nur die erste Stufe nach Figur 2 durchführbar. Der Code an den Ausgängen w'0... w'7 ist ein 1 -out-of-8, der ebenso mit üblichen Code-Checkern geprüft werden kann und einen Dual-Rail-Ausgang liefert.
Diese Dual-Rail-Ausgänge der üblichen Code-Checker werden in den TRCs gemäß Figur 4 mit den anderen Dual-Rail-Signalpaaren geprüft.
Es wird somit eine Schaltungsanordnung zur Prüfung eines m-out-of-n Codes durch einen mehrstufigen Code-Reduzierer beschrieben, die insbesondere zur
Durchführung des vorgestellten Verfahrens geeignet ist, wobei mindestens eine Stufe dieses besagten Code-Checkers aus mehreren Volladdierern besteht, in der ersten Stufe n/2 Volladdierer benutzt werden, in der das Summenbit eines Volladdierers jeweils auf den Übertragseingang des nächsten Volladdierers ge- führt wird und die n/2 Übertragsbits der n/2 Volladdierer ausgegeben werden.
Weiterhin kann vorgesehen sein, dass der Übertragseingang des ersten
Volladdierers mit dem Ausgang von einem ersten Zählerbit verbunden ist und der Summenausgang des letzten Volladdierers ausgegeben wird, und dass das erste Zählerbit und das Summenbit des letzten Volladdierers ein erstes Signalpaar bil- den.
Weiterhin kann vorgesehen sein, dass die zweite Stufe des Code-Checkers aus n/4 Volladdierern besteht und dass die n/2 Ausgangsbits der ersten Stufe mit den Operandeneingängen der n/4 Volladdierer der zweiten Stufe des Code-Checkers verbunden sind, wobei die Summenbits der Volladdierer jeweils auf den
Übertragseingang des nächsten Volladdierers geschaltet sind und die n/4 Übertragsbits der n/4 Volladdierer ausgegeben werden, wobei auf den
Übertragseingang des ersten Volladdierers der zweiten Stufe ein zweites Zählerbit geschaltet ist und dieses zweite Zählerbit zusammen mit dem ausgegebenen Summenbit des letzten Volladdierers der zweiten Stufe ein zweites Signalpaar bilden.
Außerdem können weitere Stufen des Code-Checkers angefügt werden, solange bis nur noch 2 Übertragsbits von 2 Volladdierern ausgegeben werden können, die ein Dual-Rail-Signalpaar bilden (für m = n/2) oder ein anderer geeigneter
Code-Checker an eine der Stufen angeschlossen wird (für m + n/2) und entweder die letzte Stufe für den Fall m = n/2 ein letztes Signalpaar aus dem angeschlossenen letzten Zählerbit und dem Summenausgang des zweiten Volladdierers gebildet wird oder ein Code-Checker den Code der vorangegangenen Stufe prüft und ein Dual-Rail-Signalpaar ausgibt.
Für die Signalpaare (erstes, zweites, ... letztes) kann jeweils ein Signal invertiert und damit modifizierte Signalpaare gebildet werden. Diese modifizierten Signalpaare zusammen mit dem Dual-Rail-Signalpaar werden so miteinander verbundenen zu einem Two-Rail-Checker geführt, dass ein letzter Two-Rail-Checker ein Signalpaar ausgibt, das im Falle der Fehlerfreiheit des Codes und des Code- Checkers einen 1 -out-of-2 Code bildet und damit auf Fehler im m-out-of-n Code oder in der Prüfschaltung selbst geprüft werden kann.
Die besagten Zählerbits können so variieren, dass alle Zustände dieser Zählerbits während aufeinanderfolgender Prüfschritte (von einem oder mehreren Codeworten) eingenommen werden und dass mit verschiedenen Zählerbits verschiedene Codeworte zur Prüfung ausgewählt werden können.
Des Weiteren lässt sich der zu prüfende m-out-of-n Code in mehrere Teilcodes aufspalten. Diese Teilcodes können nacheinander auf dem gleichen Code- Reduzierer bzw. Code-Checker geprüft werden. Die Eingänge des Code- Reduzierers können dazu zwischen den verschiedenen Teilcodes umgeschaltet werden.
Alternativ können diese Teilcodes gleichzeitig auf verschiedenen Code- Reduzierern geprüft werden.
Gemäß Figur 2 wird somit gezeigt, wie die erste Stufe des Code-Checkers aufgebaut sein kann. Figur 3 zeigt schließlich einen dreistufigen Code-Reduzierer. Im fehlerfreien Fall liefern die jeweiligen Paare x0 und Xi , x2 und x3, x4 und x5 und auch x6 und x7 jeweils einen Dual-Rail-Code bzw. einen 1 aus 2 Code, d.h. immer genau ein Signal dieser Paare ist 1. Dies wird mit den Code-Checkern gemäß Figuren 4 und 5 überprüft. Im fehlerfreien Fall liefert das Signal error am Ausgang 510 aus Figur 5 eine 0 und das Signal /error am Ausgang 512 eine 1.
Schon in der ersten Stufe des Code-Reduzierers 206 nach Figur 2 wird deutlich, dass bspw. der Ausgang w0 genau dann 1 wird, wenn sowohl d0 als auch di gleich 1 sind. Damit lässt eine Attacke auf das Signal w0 Rückschlüsse auf die entsprechenden Eingangssignale d0 und di zu. Folglich ist damit ggf. der vollständige geheime Zustand aller Zustandsautomaten ermittelbar.
Dem vorgestellten Verfahren liegt nunmehr zugrunde, die Eingangssignale unvorhersehbar zu durchmischen und zu vertauschen. Das ist möglich, da der Code-Checker unabhängig von der Reihenfolge der Eingangssignale das gleiche Ergebnis liefert.
Figur 6 zeigt einen dreistufigen Code-Reduzierer entsprechend dem Code- Reduzierer aus Figur 3, der für einen sicheren Betrieb ausgelegt ist. Hierzu ist eine Transfereinheit 600 vorgesehen, die zwischen die Zustandsmaschinen 300 und die erste Stufe 304 des Code-Reduzieres eingefügt ist. Diese Transfereinheit 600 benötigt 4 nicht vorhersagbare Eingangsbits r0 bis r3, sogenannte Entropie-
Bits, die z.B. aus einem A/D-Wandler (LSBs) einer physikalischen Größe oder einem Ringoszillator gewonnen werden können. Es sind aber durchaus auch andere Möglichkeiten zur Erzeugung der Entropie-Bits denkbar. Typischerweise haben die Entropie-Bits keinen Einfluss auf das Ergebnis des Checks.
Es wird auf diese Weise sichergestellt, dass nicht über ein erfolgreiches Analysieren des Stromverlaufs beim Decodieren ein Rückschluss auf die Position der Codebits und damit auf die möglicherweise geheime Vorstufe geschlossen werden kann.
Figur 7 zeigt die Transfereinheit 600 aus Figur 6 in einer detaillierten Ansicht. Hierbei ist zu erkennen, dass die Transfereinheit 600 als Mehrfach-Multiplexer 602 ausgebildet ist, der wiederum eine Anzahl an Multiplexern 604 umfasst. Somit ist die Transfereinheit 600 in diesem Fall als Vertauschungseinheit ausge- bildet, die die Position der Bits im Codewort vertauscht. Das ist immer dann möglich, wenn durch die Vertauschung der Bits eines gültigen Codeworts wieder ein gültiges Codewort entsteht. Als eine mögliche Alternative kann die Transfereinheit auch dazu ausgebildet sein, zusätzliche Bits in den zu prüfenden Code einzufügen. Zu beachten ist, dass das zu prüfende Codewort in ein anderes Code- wort transferiert wird. Die Darstellung zeigt, wie aus den Bits d0 bis di5 die Bits s0 bis Si5 mit dem Mehrfach-Multiplexer 602 gewonnen werden. Die Eingangssignale d0 bis dis des Mehrfach-Multiplexers 602 werden je nach dem Zustand der Entropie-Bits r0 bis r3 über die Multiplexer 604 mit den Ausgängen s0 bis Si5 verbunden. Sind die Belegungen der Bits r3 bis r0 dargestellt durch die Werte 0 ...15 von r (Dezimaläquivalent dieser Bits), so werden bei r = 0 die Bits d0 bis di5 so mit den Bits s0 bis Si5 verbunden, dass sich der Abstand mit steigendem Bitwert um
jeweils 1 erhöht. Die Vertauschung erfolgt bspw. zyklisch, so dass bei Uber- schreitung des Werts di5 wieder mit d0 anfängt. Bei r = 1 werden die Bits s0 bis Si4 ebenso zugeordnet, man beginnt aber mit dem Bit d1 . Bei r = 2 beginnt man mit d2 und führt dies entsprechend fort.
Auf diese Weise wird gewährleistet, dass für jeden Wert von r andere Kombinationen von Nachbarschaftsbeziehungen in s0 bis Si5 entstehen und damit jeweils andere Signale gemeinsam in einem Addierer der Struktur WAC_16 eingehen.
Die Durchmischung wirkt sich mittelbar auch auf die Nachbarschaften der folgenden Stufen aus. Da die Signale von r nicht vorhersagbar und einem potentiellen Angreifer nicht bekannt sind, kann der Angreifer damit auch keine Angriffe auf die Ausgangssignale der Code-Checker-Stufen oder deren interne Zwischensignale durchführen. Die vorgeschlagenen Verschiebungen sind in der nachstehenden Tabelle 1 aufgeführt. Es sind aber auch beliebige andere Zuordnungen möglich, wenn in den Bits sO bis s15 für jeden Wert von r jeweils alle Bits dO bis d15 vorkommen.
Tabelle 1
Zuordnung der Eingangsbits d0 ...di5 zu den Ausgangsbits s0 ...Si5 in Abhängigkeit von r
Das vorgestellte Verfahren ist grundsätzlich bei allen deterministischen Random Bit Generatoren einsetzbar, die bspw. auf einem COSSMA beruhen und damit
gegen DPA-Attacken unempfindlich sind. Insbesondere kann das Verfahren bei nicht systematischen Codes eingesetzt werden. Aber auch bei systematischen Codes ist ein Einsatz denkbar, wenn sichergestellt wird, dass nur die Informationsbits vertauscht werden.
So ist zum Beispiel für einen Berger Code das Verfahren auch anwendbar, wenn nur die Informationsbits und nicht die Checkbits in einer entsprechenden Weise vertauscht werden. Die Checkbits stellen bei einem Berger Code die Anzahl an Einsen (binar dargestellt und invertiert) in den Informationsbits dar. Vertauscht man die Informationsbits, so bleibt die Anzahl an Einsen dort gleich. Die Prüfung kann demnach für diesen Code auch mit vertauschten Informationsbits durchgeführt werden.
Bei einem Parity Code, der ein systematischer Code ist, wird überprüft, ob die Anzahl der Einsen einschließlich des Paritybits gerade oder ungerade ist. Auch hier spielt die Reihenfolge keine Rolle. Man kann die Bits für den Parity Check beliebig vertauschen und auch das Paritybit in diese Vertauschung einbeziehen.
Bei einem Hamming Code spiel die Position für die Bits zwar eine Rolle, aber wenn man den Code Check als eine Summe von Parity Checks betrachtet, kann man für jede Paritätsprüfung die im Check betrachteten Bits unmittelbar vor dem Code Checker beliebig vertauschen. Das Paritybit vertauscht man hier aber vorzugsweise nicht mit, wenn man eine Fehlerkorrektur vornehmen möchte, weil die Paritybits eine Information über die zu korrigierenden Bitströme umfassen. Aus Sicherheitsgründen (zur Verhinderung von Fehlerattacken) ist aber eine Korrektur eher nicht sinnvoll. Wenn man also einen Hamming Code nur zur Erkennung mehrfacher Fehler ohne Korrektur verwenden möchte, so ist die Vertauschung für jeden Parity Check einschließlich Paritätsbit möglich. Zu beachten ist dabei, dass manche Bits des Codeworts in mehrere Parity Checks eingehen. Diese Bits werden dann für jeden dieser Checks ggf. unterschiedlich vertauscht.
In diesem Sinne sind Code Checker für die anfangs erwähnten Selbsttestmaßnahmen eines DRGB mit m aus n Code, Berger Code, Parity Code und
Hamming Code sinnvoll einsetzbar und der Code Check selbst nicht mittels einer DPA angreifbar.
Ein mögliches Vorgehen für einen Berger Code ist in Figur 8 in einem Flussdiagramm dargestellt. Ein zu prüfendes erstes Codewort 700 umfasst Informationsbits 702 und Checkbits 704. In einer Vertauschungseinheit 706 werden die Informationsbits 702 vertauscht. Daraus ergibt sich ein zweites Codewort. In einem nächsten Schritt 708 erfolgt eine Check Bit Generierung, hierbei werden die Einsen gezählt, das Ergebnis binär dargestellt und invertiert. In einer Vergleichseinheit 710 erfolgt dann ein Vergleich des Ergebnisses auch Schritt 708 mit den Check Bits 704. Ein entsprechendes Ergebnis wird am Ausgang 712 ausgegeben.
Durch Vertauschen der Informationsbits 702 in der Vertauschungseinheit 706, also bevor die eigentliche Überprüfung stattfindet, ermöglicht ein sicheres Überprüfen.
In Figur 9 ist ein möglicher Ablauf für einen Parity Code dargestellt. Das zu überprüfende erste Codewort 802 umfasst Informationsbits und ein zugehöriges Parity Bit. In einer Vertauschungseinheit 804 werden sämtliche Bits des ersten Codeworts 802 vertauscht. In einem Parity Code Checker 806 erfolgt die Überprüfung, ob die Gesamtzahl der Einsen gerade oder ungerade ist. Ein erster Ausgang 810 und ein zweiter Ausgang 812 geben einen dual rail code aus, ggf. ist einer der beiden Ausgänge invertiert.
In Figur 10 ist die die Überprüfung aus Figur 9 detaillierter wiedergegeben. Die Darstellung zeigt die Vertauschungseinheit 804, den Parity Code Checker 806, den ersten Ausgang 810 und den zweiten Ausgang 812. Der Parity Code Checker 806 umfasst sechs EXOR-Glieder 807, die in zwei Bäumen gegliedert sind. Bei gerader Parität wird eines der beiden über die Ausgänge 810, 812 gelieferten Signale invertiert.
In Figur 1 1 ist ein möglicher Ablauf für einen Hamming Code beschrieben. Ein zu überprüfendes erstes Codewort 853 umfasst Informationsbits mit mehreren Parity Bits. Weiterhin sind eine Anzahl von Vertauschungseinheiten 854 dargestellt, von denen in dieser Darstellung drei gezeigt sind. Diese Vertauschungseinheiten 854 sind jeweils für selektive Informationsbits und ein zugehöriges Parity Bit vorgesehen. Weiterhin zeigt die Darstellung Parity Code Checker 856, die jeweils dual rail codes ausgeben.
Eine geänderte Ausführung für einen Hamming Code ist in Figur 12 dargestellt.
Bei dieser sind jeder Vertauschungseinheit 856 unterschiedliche nicht vorhersagbare Bits bzw. Entropiebits 860, 862 bzw. 864 zugeordnete. Das bedeutet, dass die verschiedenen Vertauschungseinheiten 856 in Abhängigkeit von unterschiedlichen nicht vorhersagbaren Bits 860, 862 bzw. 864 vertauschen.
In Figur 13 ist ein weiterer Ablauf für einen zyklischen Code 902 dargestellt, der Informationsbits und Check Bits umfasst. Dieses zu prüfende erste Codewort 902 wird in eine Vertauschungseinheit 904 eingegeben, die in diesem Fall ein zyklische Vertauschung vornimmt. Das sich dadurch ergebende zweite Codewort wird in einen Code Checker 906 eingegeben.
Figur 14 erläutert die Vertauchungseinheit 906 aus Figur 13. Diese ist als Mehr- fach-Multiplexer 950 mit 16 Multiplexern 952, von denen in dieser Darstellung fünf gezeigt sind. Zyklische Codes sind bspw. BCH-Codes (Bose-Chaudhuri- Hocquenghem Codes), Golay-Codes, Fire Codes, quadratic-residue Codes,
Goppa Codes, CCITT Codes.
Die zyklische Vertauschung kann auch für alle voranstehend erläuterten Vertau- schungsoperationen genutzt werden. Sofern der in Figur 7 dargestellte Mehrfach- Multiplexer 602 genutzt werden kann, sollte dieser vorzugsweise verwendet werden, da bei diesem die Reihenfolge der Bits variiert werden kann und damit die Beobachtbarkeit bei einer DPA stärker abnimmt.
In der nachstehenden Tabelle 2 ist die zyklische Vertauschung gemäß Figur 14 dargestellt. sO s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s1 1 s12 s13 s14 s15 dO d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d1 1 d12 d13 d14 d15 d15 dO d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d1 1 d12 d13 d14 d14 d15 dO d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d1 1 d12 d13 d13 d14 d15 dO d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d1 1 d12 d12 d13 d14 d15 dO d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d1 1 d1 1 d12 d13 d14 d15 dO d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d10 d1 1 d12 d13 d14 d15 dO d1 d2 d3 d4 d5 d6 d7 d8 d9 d9 d10 d1 1 d12 d13 d14 d15 dO d1 d2 d3 d4 d5 d6 d7 d8 d8 d9 d10 d1 1 d12 d13 d14 d15 dO d1 d2 d3 d4 d5 d6 d7 d7 d8 d9 d10 d1 1 d12 d13 d14 d15 dO d1 d2 d3 d4 d5 d6 d6 d7 d8 d9 d10 d1 1 d12 d13 d14 d15 dO d1 d2 d3 d4 d5
d5 d6 d7 d8 d9 d10 d1 1 d12 d13 d14 d15 dO d1 d2 d3 d4 d4 d5 d6 d7 d8 d9 d10 d1 1 d12 d13 d14 d15 dO d1 d2 d3 d3 d4 d5 d6 d7 d8 d9 d10 d1 1 d12 d13 d14 d15 dO d1 d2 d2 d3 d4 d5 d6 d7 d8 d9 d10 d1 1 d12 d13 d14 d15 dO d1 d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d1 1 d12 d13 d14 d15 dO
Tabelle 2
Zuordnung der Bits bei der zyklischen Vertauschung
Wie schon in den vorangehenden Ausführungen erwähnt, können in der Transfereinheit auch zu einem Codewort Bits hinzugefügt werden. Das ist immer dann möglich, wenn dadurch wieder ein gültiges Codewort entsteht. So kann man bspw. bei einem 4 aus 8 Code zu dem Codewort an beliebiger Position 4 Einsen und 4 Nullen ergänzen. Das resultierende Codewort ist dann ein 8 aus 16 Codewort. Bei einem Parity-Codewort kann man eine beliebige Anzahl Nullen und eine gerade Anzahl von Einsen ergänzen und erhält ein gültiges Codewort mit entsprechend vergrößerter Bitbreite. Bei einem Berger Code kann man im Informationsteil eine beliebige Anzahl von Nullen hinzufügen.
Die voranstehend beschriebenen Beispiele zeigen Möglichkeiten, wie man durch eine Vergrößerung der Bitbreite des Codeworts einem Angreifer die Beobachtung des Stromverlaufs erschweren kann, weil er nicht zwischen den Originalbits des ursprünglichen Codeworts und den zusätzlich eingefügten Bits (Dummy-Bits) unterscheiden kann. Das Einfügen von Codebits kann zusätzlich zu der Vertauschung erfolgen. Auch die zusätzlich eingefügten Bits können mit vertauscht werden oder deren Position sollte in Abhängigkeit von nicht vorhersagbaren Bits bestimmt sein.
Grundsätzlich kann das erste Codewort in mindestens ein zweites Codewort transferiert werden, d.h. es kann in genau ein zweites Codewort oder in eine Anzahl an zweiten Codewörtern transferiert werden.