Externe verschlüsselte EEPROMs bieten Sicherheit für Daten in Embedded-Systemen

Von Bill Giovino

Zur Verfügung gestellt von Nordamerikanische Fachredakteure von Digi-Key

Einige Mikrocontroller verfügen über ein EEPROM auf dem Chip. Dieses stellt nicht flüchtigen Datenspeicher zur Verfügung und spart Platz auf der Platine. Da die Datensicherheit heute immer wichtiger wird, wird für viele moderne Embedded-Systeme eine praktische Möglichkeit zur sicheren Speicherung von Daten in nichtflüchtigem Arbeitsspeicher wichtig, die auch Hackerangriffen von außen widersteht.

In diesem Artikel wird beschrieben, wie sichere Ein-Chip-EEPROMs einen sicheren Speicherplatz für nicht flüchtige Daten bieten, der Hackerangriffen widersteht. Dabei werden keine Details der Verschlüsselung behandelt. Stattdessen wird ein geeignetes Beispiel für ein sicheres EEPROM eines bekannten Herstellers vorgestellt und seine Funktionsweise sowie seine Anwendung beschrieben.

Die Notwendigkeit von sicheren EEPROMs

Viele Embedded-Systeme haben von nicht flüchtigem Datenspeicher profitiert, typischerweise in Form von EEPROM. EEPROM kann firmwaregesteuert gelesen und beschrieben werden und erhält im Gegensatz zu RAM, dessen Zustand beim Ausschalten des Stroms verloren geht, seinen Zustand, wenn es von der Stromversorgung getrennt wird.

EEPROM in Mikrocontrollern war schon immer nützlich zum Speichern von Programmdaten, die nach Abschalten erhalten bleiben müssen, aber es hat normalerweise dieselben Sicherheitsprobleme wie RAM. In einigen modernen 8-Bit-, 16-Bit- und 32-Bit-Mikrocontrollern sind Sicherheitstechniken implementiert, die verhindern, dass ein Datenspeicherbereich firmwaregesteuert gelesen werden kann, und den Lesezugriff durch externe Schnittstellen wie Debugger sperren können. In der Vergangenheit wurden derartige Sicherheitsfunktionen als ausreichend betrachtet, aber heutzutage gibt es Situationen, in denen Hacker, die über ausreichend Geld, Zeit, Motivation und Ressourcen verfügen, diese ausreichenden Sicherheitsfunktionen umgehen und sich so Zugang zu wichtigen Systemen verschaffen können.

Die modernen Embedded-Systeme haben sich in einer Form weiterentwickelt, die einen robusteren Datenschutz für viele Anwendungen notwendig macht. Dies gilt insbesondere für bestimmte IoT-Knoten, Sicherheitssysteme, die Kommunikation zwischen Fahrzeugen, für moderne medizinische Geräte und autonome Fahrzeuge. Datensicherheit kann bereits nötig sein, um ein Klonen des Systems zu verhindern. Dabei handelt es sich um Anwendungen, bei denen EEPROM-Daten, die infolge eines erfolgreichen Hackerangriffs kompromittiert werden, materiellen Schaden oder Schlimmeres verursachen können.

In diesen Situationen ist EEPROM erforderlich, das auch solchen Hackern widersteht, die über signifikante Ressourcen verfügen. Für derartige Situationen ist Hochsicherheits-EEPROM verfügbar, mit dem sensible Daten wie Kennwörter, Klon-Hashes, Fingerabdruckdaten, Kalibrierungsdaten für Sensoren und biometrische Daten einfach verschlüsselt werden können.

Microchip Technology hat dieses Konstruktionsproblem mit der Produktlinie der CryptoAuthentication™-Bausteine gelöst. Dieser Begriff ist insbesondere deswegen bekannt, weil Microchip die Produktlinie als Teil der Übernahme von Atmel geerbt hat. Ein Baustein aus dieser Produktlinie ist das sichere 32-kB-EEPROM ATAES132A (Abbildung 1).

Bild: Serielles 32-kB-EEPROM ATAES132A von Atmel

Abbildung 1: Das serielle 32-kB-EEPROM ATAES132A verfügt über Sicherheitsfunktionen zum Schutz von Daten und internen Registern. (Bildquelle: Digi-Key Electronics)

Das ATAES132A kann wie jedes serielle 32-kB-Standard-EEPROM verwendet werden. Es verfügt über Standard-SPI- und -I2C-Anschlüsse. Daher kann es serielle-Standard-EEPROMs in vorhandenen Baugruppen ohne Änderung der Hardware ersetzen. So können vorhandene Entwicklungen nur durch Modifikation der Anwendungssoftware einfach mit zusätzlichen Sicherheitsfunktionen aufgerüstet werden.

Außerdem verfügt es über beachtlichen physischen Schutz, über Verschlüsselung und andere eingebaute Sicherheitsfunktionen, die die Daten und die internen Register des EEPROMs nach ihrer Aktivierung vor nicht zum Äußersten entschlossenen Hackern schützt. Die Daten können mittels AES-Verschlüsselung nach Militärstandard mit bis zu sechzehn 128-Bit-Schlüsseln geschützt werden.

Physischer Schutz

Zunächst verfügt der ATAES132A über viele mechanische Sicherheitsmechanismen, die verhindern, dass die Daten physisch rekonstruiert werden können. Der Baustein ist gegen gewisse Änderungen der Umgebungstemperatur empfindlich, z. B. gegen Versuche, den Speicherinhalt durch „Tiefgefrieren“ zu erhalten. Der Baustein kann erkennen, wenn versucht wird, den Rohchip freizulegen. Der Rohchip ist durch eine Metallabschirmung geschützt. Sobald diese entfernt wird, erkennt er den Lichteinfall, der einen Mechanismus zur Zerstörung der Daten auslösen kann.

Außerdem wird der Inhalt des internen Speichers verschlüsselt. Der Baustein kann auch zusätzliche unveröffentlichte Sicherheitsmechanismen enthalten, die nur den Microchip-Ingenieuren bekannt sind, da Microchip die Besonderheiten dieser Sicherheitsmechanismen geheim hält. Dies bietet bereits einen umfassenden physischen Schutz des sicheren Speichers, sodass die Entwickler keine komplizierten Gehäuse zur Abschottung des EEPROMs bauen müssen.

Der ATAES132A kann so konfiguriert werden, dass er über die SPI- oder die I2C-Schnittstelle mit den meisten Mikrocontrollern kommunizieren kann. Im I2C-Modus wird der „Chip Select“-Pin nicht benötigt; er muss dann an die Stromversorgung oder an Masse angeschlossen werden. Im SPI-Modus hat „Chip Select“ seine normale Funktion.

AES-Verschlüsselung

Kryptographie ist auf dem ATAES132A über AES-CCM mit einem 128-Bit-Schlüssel implementiert. Einfach ausgedrückt: Die zu verschlüsselnden Daten werden durch eine Reihe von komplexen mathematischen Funktionen geschickt, wo sie mit einer vom Entwickler der Firmware programmierten 128 Bit langen Zahl kombiniert werden. Die komplexen mathematischen Funktionen während der AES-Verschlüsselung und -Entschlüsselung werden alle vom ATAES132A durchgeführt. Bis auf die Einrichtung einiger Variablen und die Wahl des 128-Bit-Schlüssels ist dieser Vorgang für den Formwareentwickler transparent, was die Produktentwicklung stark vereinfacht.

Die Speicherauslegung des ATAES132A

Der Baustein kann einfach als nicht verschlüsseltes serielles Standard-EEPROM verwendet werden. Wenn allerdings die erweiterten Sicherheitsfunktionen eingesetzt werden, sind Struktur und Verwendung des Bausteins völlig anders. Der schnellste Weg zum Verständnis des ATAES132A führt über das Studium der Speicherauslegung, die komplizierter als die eines Standard-EEPROMs ist (Tabelle 1).

Adressbereich des ATAES132A Beschreibung
0000h-0FFFh EEPROM-Speicher mit 32 kB Benutzerdaten
1000h-EFFFh Reserviert
F000h-F05Fh Konfigurationsregister für den Baustein
F060h-F07Fh Konfigurationsregister für Zähler
F080h-F0BFh Konfigurationsregister für Schlüssel
F0C0h-F0FFh Konfigurationsregister für Zonensicherheit
F100h-F17Fh Zonenzähler-Register
F180h-F1DFh 96 Byte unverschlüsselter FreeSpace-Speicher
F1E0h-F1FFh 32 Byte unverschlüsselter SmallZone-Speicher
F200h-F2FFh Schlüsselspeicher
F300h-FDFFh Reserviert
FE00h Puffer für Befehle und Antworten
FE01h-FFDFh Reserviert
FFE0h Reset-Register für I/O-Adressen (nur schreiben)
FFE1h-FFEFh Reserviert
FFF0h Statusregister (nur lesen)
FFF1h-FFFFh Reserviert

Tabelle 1: Die Speicherauslegung des ATAES132A ist komplizierter als die eines seriellen Standard-EEPROMs. (Datenquelle: Microchip Technology)

Die meisten Speicherstellen werden über Standard-I2C- oder -SPI-Befehle geschrieben.

Das EEPROM und die Konfigurationsregister für die Zonensicherheit

Die 32 kB des EEPROM-Datenspeichers sind in 16 je 2 kB große Zonen aufgeteilt. Jede dieser Speicherzonen kann einzeln mit oder ohne Sicherheit konfiguriert werden. Die Sicherheitseinstellungen für jede der 16 Speicherzonen werden im Bereich Konfigurationsregister für Zonensicherheit vorgenommen. Die folgenden grundlegenden Sicherheitseinstellungen können für jede der 2 kB großen Sicherheitszonen einzeln vorgenommen werden:

  • Verschlüsselung für das Lesen von Daten aktivieren/deaktivieren
  • Verschlüsselung für das Schreiben von Daten aktivieren/deaktivieren
  • Authentifizierung für das Lesen von Daten aktivieren/deaktivieren
  • Authentifizierung für das Schreiben von Daten aktivieren/deaktivieren
  • Permanenten Schreibschutz für Zone festlegen

Diese Einstellungen ermöglichen eine hohe Flexibilität beim Einrichten von Sicherheitseinstellungen für eine Anwendung. Es kann festgelegt werden, dass für eine Zone keine Verschlüsselung und keine Authentifizierung für einen Lese- oder Schreibzugriff festgelegt wird, sodass wie mit einem Standard-EEPROM geschrieben und gelesen werden kann. Für eine andere Zone kann vollständige Verschlüsselung und Autorisierung verlangt werden, womit sensible Daten wirkungsvoll geschützt werden.

Konfigurationsregister für den Baustein

Im Bereich Konfigurationsregister für den Baustein wird das allgemeine Verhalten des Bausteins festlegt. Dieser Bereich enthält auch einige schreibgeschützte Informationen über den Baustein. Dazu gehört auch eine eindeutige 32-Bit-Seriennummer, mit der der Baustein identifiziert werden kann. Mithilfe von anderen Registern kann ein Schreibschutz für bestimmte Speicherzonen oder Register eingerichtet werden. Dies wird als Sperren des Speichers bezeichnet. Sobald ein Register oder eine Speicherzone gesperrt ist, gilt dies dauerhaft und kann nie wieder zurückgenommen werden.

In diesem Bereich befindet sich auch das Register I2CAddr, mit dem konfiguriert werden kann, ob der Baustein im I2C- oder im SPI-Modus verwendet wird. Beim Starten des Bausteins wird das aus einem Byte bestehende Register I2CAddr geschrieben. Bit 0 von I2CAddr legt den Modus der seriellen Schnittstelle fest. Wenn die Firmware eine 0 schreibt, ist der Baustein für den SPI-Modus konfiguriert. Wenn eine 1 geschrieben wird, wird der I2C-Modus ausgewählt. Wenn der I2C-Modus ausgewählt ist, lautet die 7-Bit-Adresse des Bausteins 50h.

Puffer für Befehle und Antworten

Während auf die Speicherstellen des Bausteins über eine Standard-Adressierung mit SPI oder I2C zugegriffen werden kann, akzeptiert der Baustein ähnlich wie ein Mikrocontroller auch Befehle. Ein Befehl und seine Operanden, zusammen als Befehlsblock bezeichnet, können aus einem oder mehr Bytes bestehen. Er wird direkt in den Puffer für Befehle und Antworten an der Adresse FE00h geschrieben. Ein Befehlsblock besteht aus einer 1 Byte langen Anweisung, einem oder mehr Bytes als Operanden und einer aus 2 Byte bestehenden Prüfsumme.

Es gibt Befehle zur Authentifizierung von Daten, für Blocklesevorgänge aus EEPROM-Zonen, zur Inkrementierung von Zählern und zum direkten Lesen von geschützten Speicherbereichen oder Registern, für die eine Authentifizierung erforderlich ist. Die Antworten auf die Befehle werden aus derselben Speicherstelle FE00h zurückgelesen. Alle Schreibvorgänge auf FE00h sind Befehle, die zum Puffer für Befehle und Antworten gesendet werden. Alle Lesevorgänge von FE00h sind Lesevorgänge aus dem Puffer für Antworten.

Das Register zum Zurücksetzen von I/O-Adressen an der Stelle FFE0h ist ein Register, das nur geschrieben werden kann und das zum Zurücksetzen der Puffer für Befehle und Antworten verwendet wird. Wenn ein Wert nach FFE0h geschrieben wird, werden zwei Operationen durchgeführt: Der Befehlspuffer wird gelöscht, sodass er einen neuen Befehlsblock aufnehmen kann, und der Antwortpuffer wird auf 0 zurückgesetzt, sodass der Inhalt erneut gelesen werden kann.

Das Zurücksetzen des Antwortpuffers erlaubt der Firmware, die gesamte Antwort neu zu lesen. Dies kann in Programmen nützlich sein, in denen möglicherweise ein Interrupt aufgetreten ist, während der Host-Mikrocontroller den Antwortpuffer gelesen hat, und die Daten nach der Rückkehr vom Interrupt wieder von Anfang an gelesen werden müssen.

Es gibt auch Befehle zur Durchführung einer AES-Verschlüsselung und -Entschlüsselung bei Lese- und Schreibvorgängen vom und zum EEPROM. Diese Berechnungen sind sehr komplex und werden hier nicht behandelt. Microchip stellt aber Treiber für Mikrocontroller und Firmware bereit, die diese Funktionen ausführen, sodass die Programmierer nur minimale Kenntnisse über AES-Verschlüsselung benötigen.

Zonenzähler-Register

Dieser Registerbereich enthält 16 schreibgeschützte Zähler. die den einzelnen Zonen zugeordnet sind. Jede Speicherzone wird mit einem 128 Bit langen Zonenschlüssel verschlüsselt und entschlüsselt. Bei jeder Verwendung eines Zonenschlüssels wird ein zugehöriger 32-Bit-Zonenzähler je nach der Einstellung im zugehörigen Konfigurationsregister des Zonenzählers inkrementiert oder nicht inkrementiert. Aus Sicherheitsgründen können Zähler nie dekrementiert oder zurückgesetzt werden.

Die Firmware kann direkt auf einen Zonenzähler schreiben, um ihn auf einen Anfangswert zu inkrementieren, aber nie auf einen Wert, der kleiner als der aktuelle Inhalt des Zählers ist. Zonenzähler können bei der Herstellung beschrieben und gesperrt werden, um die Höhe der Werte zu beschränken. Wenn ein Zähler den maximalen Wert von 2.097.151 erreicht, kann der zugehörige Schlüssel dauerhaft deaktiviert werden, um zu verhindern, dass er für weitere Verschlüsselungen oder Entschlüsselungen verwendet wird. Dies kann für Schlüssel mit begrenzter Nutzung nützlich sein, wenn z. B. der Firmware eines Mikrocontrollers nur eine begrenzte Anzahl von erneuten Flash-Vorgängen gestattet werden soll.

Als zusätzliche Sicherheitsmaßnahme ist jeder der 32-Bit-Zonenzähler doppelt vorhanden. Dies geschieht, um eine Beschädigung des Zonenzählers erkennen zu können, falls bei der Inkrementierung eines Zonenzählers ein Stromausfall auftritt. Beim Start der Anwendung sollte die Firmware beide Werte für alle Zonenzähler auslesen. Wenn die Werte in einer robusten Anwendung verschieden sind, wäre dies der Nachweis für ein nicht autorisiertes Herunterfahren, was auf einen nicht autorisierten Versuch hindeuten könnte, die Sicherheit der Anwendung im laufenden Betrieb zu deaktivieren.

Statusregister

Das Statusregister des ATAES132A ist ein schreibgeschütztes Register, das Fehlercodes enthält, z. B. für falsche Prüfsummen oder Fehler in Befehlen. Es gibt auch an, ob sich der ATAES132A im I2C-Modus oder im SPI-Modus befindet und informiert über den Verlauf von Befehlen und die Gültigkeit der Antworten. Es sollte vor und nach allen Lese- und Schreibvorgängen, Befehlen und Antworten gelesen werden. Fehler können auf einen Versuch hindeuten, von außen in die I2C- oder SPI-Verbindung zwischen dem Host-Mikrocontroller und dem ATAES132A einzugreifen. Es ist Aufgabe der Host-Firmware, geeignete Aktionen durchzuführen, z. B. einen Bediener zu alarmieren oder einen Alarmton auszugeben.

Einrichtung des ATAES132A bei der Herstellung

Während der Herstellung des Endprodukts sollten die Sicherheitsfunktionen des ATAES132A eingerichtet werden. Um die Wahrscheinlichkeit von Konfigurationsfehlern zu reduzieren, sollte der ATAES132A konfiguriert werden, wenn er sich bereits im System befindet. Zuerst sollten alle Anfangswerte und Zählerkonfigurationen festgelegt werden. Dann sollten die Schlüssel und die Verschlüsselungsparameter programmiert werden. Zuletzt sollten alle Anfangswerte für das EEPROM programmiert werden. Die eindeutige 32-Bit-Seriennummer des Bausteins kann aus dem ATAES132A ausgelesen werden, damit sie in die Firmware des Host-Mikrocontrollers aufgenommen werden kann.

Es ist zu empfehlen, alle programmierten EEPROM-Werte zurückzulesen, um eine ordnungsgemäße Konfigurationen des ATAES132A sicherzustellen. Falls falsche Werte zurückgelesen werden oder wenn das Statusregister einen Fehler bei einer Prüfsumme oder einem Befehl anzeigt, sollte das Endprodukt markiert und aus der Produktion genommen werden. Falls noch genug Platz im EEPROM ist, kann als Test eine optionale Verschlüsselung und Entschlüsselung durchgeführt werden.

Entwicklung für den ATAES132A

Microchip bietet zur Unterstützung von Entwicklern das Xplained-Pro CryptoAuthentication-Startkit DM320109 an (Abbildung 2). Der ATAES132A ist an den Arm® Cortex®-M0+-Mikrocontroller ATSAMD21J18A von Microchip angeschlossen.

Bild: Xplained CryptoAuthentication-Start- und Entwicklungskit DM320109 von Microchip

Abbildung 2: Das Xplained CryptoAuthentication-Start- und Entwicklungskit DM320109 von Microchip bietet eine einfache Möglichkeit, den ATAES132A zu evaluieren und Code dafür zu entwickeln. Zum Lieferumfang gehören ausführliche Codebeispiele und Benutzeroberflächen für die meisten PCs unter Windows, Linux und MacOS. (Bildquelle: Microchip Technology)

Der Mikrocontroller ATSAMD21J18A von Microchip kann über eine USB-Schnittstelle mit einer Entwicklungsumgebung auf einem PC verbunden werden. Es werden I2C- und SPI-Schnittstellen unterstützt. Der ATAES132A kann über beide angeschlossen werden. Sobald das Kit über das mitgelieferte USB-Kabel an den PC angeschlossen ist, können alle Funktionen des ATAES132A konfiguriert und überwacht werden.

Es wird ein zweites USB-Kabel zur Überwachung und Protokollierung der Datenpakete zwischen dem ATAES132A und dem ATSAMD21J18A mitgeliefert. Mit diesem Kabel wird die Xplained-Platine mit einem freien USB-Anschluss des PCs verbunden. Die Entwickler können so die Signale zwischen dem Mikrocontroller und dem EEPROM überwachen, um die Bewegung der verschlüsselten Daten zwischen den beiden Komponenten zu verfolgen.

Zum Lieferumfang des Xplained-Kits gehören sämtliche Firmwarebibliotheken sowie Beispielcode für den ATAES132A. Mithilfe der hier dargelegten Informationen zur Speicherauslegung und der Register des ATAES132A ist ein Entwickler mühelos in der Lage, den Beispielcode mit minimalen Kenntnissen über die Verschlüsselung des Bausteins an seine Zielanwendung anzupassen.

Fazit

AES-128-Bit-Verschlüsselung ist ein kompliziertes Thema. Nichtsdestoweniger können Entwickler sensible Daten in einem zu genau diesem Zweck entwickelten EEPROM speichern. Beachten Sie die mechanischen Schutzmaßnahmen, die starke Verschlüsselung, die spezielle Aufteilung in Zonen und die Speicherauslegung sowie kundenspezifische und vertrauliche Features, die nur dem Unternehmen und möglicherweise dem Endbenutzer bekannt sind.

Haftungsausschluss: Die Meinungen, Überzeugungen und Standpunkte der verschiedenen Autoren und/oder Forumsteilnehmer dieser Website spiegeln nicht notwendigerweise die Meinungen, Überzeugungen und Standpunkte der Digi-Key Electronics oder offiziellen Politik der Digi-Key Electronics wider.

Über den Autor

Bill Giovino

Bill Giovino ist Elektronikingenieur mit einem BSEE von der Syracuse University und einer der wenigen, die erfolgreich vom Entwicklungsingenieur über den Anwendungsingenieur zum Technologiemarketing wechselten.

Seit über 25 Jahren wirbt Bill für neue Technologien vor technischem und nicht-technischem Publikum für viele Unternehmen, darunter STMicroelectronics, Intel und Maxim Integrated. Während seiner Zeit bei STMicroelectronics trug Bill dazu bei, die frühen Erfolge des Unternehmens in der Mikrocontroller-Industrie voranzutreiben. Bei Infineon inszenierte Bill die ersten Erfolge des Unternehmens im Bereich Mikrocontroller-Design in den USA. Als Marketingberater für sein Unternehmen CPU Technologies hat Bill vielen Unternehmen geholfen, unterbewertete Produkte in Erfolgsgeschichten zu verwandeln.

Bill war zudem ein früher Anwender des Internets der Dinge, einschließlich der Implementierung des ersten vollständigen TCP/IP-Stacks auf einem Mikrocontroller. Die Botschaft von „Verkauf durch Aufklärung“ und die zunehmende Bedeutung einer klaren, gut geschriebenen Kommunikation bei der Vermarktung von Produkten im Internet sind Bills Anliegen. Er ist Moderator der beliebten „Semiconductor Sales & Marketing Group“ auf LinkedIn und spricht fließend B2E.

Über den Verlag

Nordamerikanische Fachredakteure von Digi-Key