Ein Kryptomodul entlastet den Prozessor Sicherheit ohne Performance-Einbuße

Die Freescale-Prozessoren MCF5235, 5329 und 5373 sind mit einem integrierten Kryptomodul ausgestattet. Doch was bewirkt dieses Modul eigentlich? Am Beispiel des MCF5329 wird hier gezeigt, wie stark die Hardware einen Krypto-Algorithmus gegenüber der reinen Software-Lösung beschleunigt.

 

Ein Kryptomodul entlastet den Prozessor bei den aufwendigen Chiffrier-Algorithmen

 

 

Die Freescale-Prozessoren MCF5235, 5329 und 5373 sind mit einem integrierten Kryptomodul ausgestattet. Doch was bewirkt dieses Modul eigentlich? Am Beispiel des MCF5329 wird hier gezeigt, wie stark die Hardware einen Krypto-Algorithmus gegenüber der reinen Software-Lösung beschleunigt. Die Programmierung ist einfach – bei Verwendung einer Library kann die Software sogar unverändert bleiben.

Datensicherheit ist in aller Munde – auch in Embedded-Systemen spielt sie eine immer größere Rolle. Verschlüsselte Datenströme sichern Kommunikationsverbindungen gegen Abhören. Datenpakete können durch Verschlüsselung signiert werden, um die Herkunft eindeutig zu verifizieren. Dies verbessert z.B. die Sicherheit von Software-Updates. Auch bestimmte Bereiche des Speichers können durch Verschlüsselung vor Zugriffen und Manipulationen von außen geschützt werden. Eine andere Anwendung für Krypto-Algorithmen ist die Bildung von Hash-Werten. Diese Werte werden aus großen Datenblöcken, wie z.B. Dateien, gebildet und dienen dazu, die Datenblöcke eindeutig zu identifizieren.

Anwender von kryptographischen Algorithmen in einem Embedded-System stehen vor der Entscheidung, ob es sich lohnt, kryptographische Funktionen selbst zu implementieren oder einer Library zu entnehmen. Viele Libraries sind verfügbar, erfüllen spezielle Aufgaben und sind an die Bedürfnisse kryptographischer Verfahren angepasst.

Das Ressourcenproblem

Das bekannteste Beispiel für kryptographische Bibliotheken dürfte OpenSSL sein, welche nahezu alle Funktionen implementiert, die in kryptographischen Systemen typischerweise benötigt werden. Neben der Verwaltung von Secure Socket Layern gehören auch alle aktuell wichtigen symmetrischen und asymmetrischen Verschlüsselungsverfahren sowie Funktionen zur Zertifikats- und Sessionverwaltung dazu. Diese Vielzahl an Funktionen führt jedoch zu einer nicht zu unterschätzenden Größe, sowohl des Codes als auch der binären Dateien von OpenSSL. Deshalb eignet sich diese Library nur für Embedded-Systeme mit ausreichend Speicher. Ein großer Vorteil von OpenSSL sind die vielen, bereits vorhandenen Open-Source-Applikationen, die auf OpenSSL aufbauen, sowie der Support für OCF zur Nutzung von Beschleuniger-Hardware.

Eine schlankere Alternative zur OpenSSL-Bibliothek ist libtomcrypt, die beispielsweise vom „dropbear“-SSH-Server verwendet wird. Libtomcrypt ist als Public Domain lizenziert und kann daher lizenzkostenfrei eingesetzt werden. Die Liste der unterstützten Krypto-Algorithmen (Cipher) ist genauso vollständig wie die der unterstützten Hash-Funktionen. Die Mehrzahl der Algorithmen kann hinsichtlich der Größe oder der Laufzeit optimiert werden. Assembler-Optimierungen für x86, x86_64 und PowerPC sind bereits Bestandteil der Library. Libtomcrypt bietet sich für all jene an, die OpenSSL aufgrund der Größe nicht einsetzen können, aber dennoch auf eine verlässlich getestete Implementierung aktueller Krypto-Algorithmen Wert legen. Libtomcrypt bietet leider keinen Support für OCF.

Neben diesen beiden Bibliotheken für kryptographische Funktionen entwickelt sich noch yaSSL (yet another SSL). Diese Bibliothek steht unter einer Dual-Lizenz, was eine kommerzielle Nutzung genauso erlaubt wie die Verwendung in GPL-Software. Die Bibliothek bringt eine OpenSSL-Kompatibilitätsschicht mit und unterstützt alle gängigen Krypto- und Hash-Funktionen.

Kryptomodul entlastet Prozessor

Die kryptographischen Funktionen aller Libraries sind sehr aufwendig und benötigen leistungsstarke Prozessoren, um schnell abgewickelt werden zu können. Um die Geschwindigkeit der Verschlüsselung zu erhöhen, bringen immer mehr moderne Embedded-Prozessoren ein eigenes Kryptographiemodul mit. Die Hauptaufgabe dieser Module ist die Anwendung von kryptographischen Operationen auf Datenblöcke, um den Prozessor zu entlasten. Die Mehrzahl dieser Module erlaubt es, Hash-Werte von Datenblöcken zu bilden oder die Daten zu verschlüsseln.

Der Prozessor wird dann nicht mit der Aufgabe des Verschlüsselns belastet, sondern nur dazu genutzt einige Register mit den passenden Werten zu beschreiben und so die entsprechende Aktion zu starten. Sobald die Kryptomodule ihre Arbeit getan haben, lösen sie einen Interrupt aus, sodass der Prozessor die fertigen Ergebnisse verarbeiten kann. Während das Modul die Berechnungen anstellt, kann der Prozessor in der Zwischenzeit andere Aufgaben ausführen. Als konkretes Beispiel für einen Embedded-Prozessor mit Kryptomodul dient im Folgenden der Coldfire MCF5329 von Freescale. Das Modul unterstützt alle üblichen Verschlüsselungsverfahren.

Um den Prozessor vollständig zu entlasten, muss das Kryptographiemodul selbstständig in der Lage sein, Daten aus dem Speicher zu lesen bzw. in den Speicher zu schreiben. Für diese Aufgabe werden direkte Speicherzugriffe genutzt, so genannte DMAs (Direct Memory Access). Die eDMA-Engine (Enhanced DMA) des MCF5329 überträgt immer dann Daten, wenn ein DMA-Request ausgelöst wurde. Diese DMA-Requests lösen die Module aus, sobald ihr Eingangs-FIFO eine bestimmte Anzahl an freien Plätzen aufweist oder das Ausgangs-FIFO einen bestimmten Füllstand erreicht hat. Die eDMA-Engine kümmert sich um das automatische Hochzählen der Speicheradresse und führt Konvertierungen zwischen verschiedenen Speicherbreiten durch, um den Datenfluss zu optimieren.

Zur Verwaltung der DMA-Aufträge werden „Transfer Control Descriptors“ (TCD) verwendet, die an bestimmte Funktionseinheiten gebunden sind. Diese Deskriptoren enthalten neben der Start- und der Zieladresse im Speicher auch Angaben über die Transfergröße pro Request, mögliche Verkettungen mit anderen DMA-Aufgaben sowie einige Steuer- und Statusbits. Durch diesen Aufbau können Daten „in-place“ verschlüsselt werden, was bedeutet, dass die Eingangsdaten vom verschlüsselten Ergebnis überschrieben werden.

Bild 1 veranschaulicht das Zusammenspiel zwischen den kryptographischen Funktionseinheiten, der CPU und der DMA-Engine. Auf dem Diagramm ist die Richtung des Informationsflusses zu erkennen. Dabei ist zu beachten, dass der MDHA (Message Digest Hardware Accelerator) nur Daten von der DMA-Engine empfängt, aber keine versendet. Der SKHA (Symmetric Key Hardware Accelerator) hingegen benutzt DMA-Transfers zum Füllen seines Eingangs-FIFOs und zum Leeren des Ausgangs-FIFOs. Die Request-Leitungen der Einheiten sind in Grün, die Interrupt-Leitungen an die CPU in Rot dargestellt. Zu erkennen ist, dass die CPU nach dem Programmieren der DMAs und des SKHA bzw. MDHA keine weitere Verbindung mit diesen beiden unterhält. Das Abfragen des Hash-Wertes, welcher vom MDHA gebildet wird, erfolgt über ein internes Register.