Sicheres Speichern und Verwenden von Schlüsseln in einem eingebetteten System

7

Ich verwende einen Mikroprozessor - PIC32MZ2048efm144 MCU, der mit einem bestimmten Schlüssel verschlüsselte Befehle empfängt , entschlüsselt und den Befehl ausführt. Die verschlüsselten Befehle werden offline gespeichert , sodass ich den Schlüssel nicht jederzeit ändern kann. Der Schlüssel ist FEST . Die Befehle werden von einem Server verschlüsselt und von einem Telefon heruntergeladen . Das Telefon sendet die verschlüsselten Befehle zu einem späteren Zeitpunkt an die MCU, wenn es nicht online ist . Die Befehle werden verschlüsselt, bevor das Telefon sie an die MCU übermittelt, sodass ein Sitzungsschlüssel nicht möglich ist.

Ich darf ein externes Verschlüsselungs- / Entschlüsselungsmodul an den PIC anschließen, aber dann werden die Daten in mindestens einer Richtung entschlüsselt weitergeleitet.

Die hier vorgebrachte Lösung: Speichern eines sicheren Schlüssels im Speicher eines eingebetteten Geräts

verwendet einmalige Schlüssel zum Verschlüsseln, aber ich muss einen einzelnen supergeheimen Schlüssel speichern

Mein Arbeitgeber verlangt, dass die Schlüssel nicht zugänglich sind, sodass ein physischer Schutz neben dem Schutz durch sichere Speichermodule und die MCU nicht berücksichtigt wird.

Unter der Annahme, dass keine militärische Ausrüstung verwendet wird, gibt es bekannte Lösungen, die Sie kennen und empfehlen können?

Danke im Voraus!

Sonja
quelle
Können Sie mehr darüber erklären, was Sie verhindern wollen? Was macht der Mikroprozessor? Denken Sie, dass die Verwendung eines öffentlichen / privaten Schlüssels funktionieren könnte? Wenn Sie den privaten Schlüssel auf dem Mikroprozessor gespeichert haben? Dann erstellen die Geräte, die Befehle senden, einen Sitzungsschlüssel, verschlüsseln ihn mit dem öffentlichen Schlüssel und senden ihn an Sie. Danach verwenden beide Seiten den Sitzungsschlüssel. Was würde passieren, wenn ein Angreifer den öffentlichen Schlüssel hätte (der, obwohl er als "öffentlich" bezeichnet wird, nicht öffentlich sein muss)?
Mkeith
@mkeith Ich habe die Frage aktualisiert, hoffe es hilft :)
Sonja
3
Da Sie sich für diesen PIC entschieden haben, können Sie den darin enthaltenen "Programmatisch sicheren Schlüsselspeicher" verwenden. Es hat ein eigenes eingebautes Kryptomodul!
pjc50
2
Ich glaube nicht, dass Sie den Wert Ihres Geheimnisses klar quantifiziert haben. Es scheint, als wollten Sie eine billige und zuverlässige Methode (die meiner Meinung nach unbekannt ist). Bitten Sie um Klarstellung, was möglich sein muss, nachdem in dieser ersten Lösung eine Sicherheitsanfälligkeit gefunden wurde. Signierte drahtlose Firmware-Updates wären meine erste nicht verhandelbare Funktion ... Es ist immer ein Systemproblem.
Sean Houlihane
Wenn der Speicher des PIC geschützt ist (und sogar ein Schlüsselspeichermodul enthält), warum nicht eine einfache AES-Verschlüsselung verwenden? Ich weiß, dass es symmetrisch ist, aber wenn der Server sicher ist (was wir irgendwie annehmen müssen), besteht hier kein Risiko - oder gibt es das?
Jan Dorniak

Antworten:

11

Es tut mir leid, dass diese Antwort Ihr Problem nicht wirklich lösen wird. Aber es ist zu lang, um in einen Kommentar zu passen, und es wird Ihnen ermöglichen, Ihr Problem auf die richtige Weise zu überdenken (denn so wie es ist, denke ich, ist es fehlerhaft).

Diese Art von Problemen muss unter Berücksichtigung aller Komponenten des Systems gelöst werden und vernünftige Annahmen darüber getroffen werden, was ein potenzieller Hacker tun kann oder nicht.

Zum Beispiel:

Sie sagen: "Die PIC32MZ2048efm144 (MCU) empfängt mit einem bestimmten Schlüssel verschlüsselte Befehle, entschlüsselt sie und führt den Befehl aus." Ich nehme an, das Ergebnis der Ausführung des Befehls ist das Umschalten einiger GPIOs, um Dinge zu betätigen.

Warum befürchten Sie dann, dass möglicherweise einige Daten zwischen der MCU und einem Verschlüsselungs- / Entschlüsselungsmodul entschlüsselt werden? Ein Hacker, der Zugriff auf die Hardware hat, um die entschlüsselten Befehle zu sehen, könnte ohnehin direkt auf die GPIOs der MCU reagieren und das Zeug genauso einfach "betätigen".

Zweites Beispiel:

Die Verwendung von pünktlichen Schlüsseln ist eine Idee. Aber wie Sie sagen, wo speichern Sie den Haupthauptschlüssel, der zum Generieren der Einmalschlüssel verwendet wird? Sie werden genau die gleichen Fragen haben wie bei Ihrem ursprünglichen Problem.

Tatsächlich gibt es keine Möglichkeit, Ihr System sicher zu machen, wenn Sie annehmen, dass sich ein Hacker möglicherweise an einem beliebigen Ort Ihres Systems einschleichen kann (was meiner Meinung nach derzeit der Fall ist).

Was macht ein System dann sicher?

Eine Smartcard wird sicher gemacht, da nicht davon ausgegangen werden kann, dass ein Hacker die internen Routen innerhalb des IC zwischen dem Speicher und dem CPU-Block prüfen kann.

Ein elektrisches Türschloss wird gesichert, da es nicht zumutbar ist anzunehmen, dass ein Hacker die Drähte erreichen kann, die das Schloss betätigen.

Usw. Grundsätzlich müssen Sie zunächst Dinge identifizieren, die ein Hacker nicht kann, und von dort aus Ihre gesamte Lösung ausarbeiten. Ist es beispielsweise möglich, Ihr gesamtes System in einer sicheren, manipulationssicheren Box unterzubringen? In diesem Fall können Sie frei entschlüsselte Befehle über einen internen Bus übertragen.

Sie können kein sicheres System erstellen, ohne zu wissen, was der Hacker nicht vernünftigerweise tun kann. Das hast du uns nicht gesagt. Wir können daher keine vollständige Lösung vorschlagen.

dim
quelle
Zunächst einmal vielen Dank für die ausführliche Antwort! Ich habe die Frage so aktualisiert, dass ich glaube, sie wird dir antworten :)
Sonja
Was ich aus der Bearbeitung Ihres Beitrags verstehe, ist, dass nur die Schlüssel gesichert werden müssen. Die tatsächlichen Ergebnisse der Befehle müssen nicht gesichert werden. Legen Sie in diesem Fall die Schlüssel wie vorgeschlagen in ein externes sicheres Modul und akzeptieren Sie, dass die entschlüsselten Befehle deutlich sichtbar sind. Wenn mein Vorschlag aus irgendeinem Grund ungültig ist, nehmen Sie sich Zeit, um ausführlich zu erklären, was akzeptabel ist und was nicht . Es ist nicht nur ein weiterer Satz in Ihrem Beitrag, den wir brauchen. Wir brauchen das ganze Bild der Sache. Ja wirklich.
Dim
5
Ich bin auch der Meinung, dass die Verschlüsselung der Befehle nicht das ist, was Sie tun möchten. Normalerweise müssen wir Daten verschlüsseln (einige Informationen über etwas oder ein Dokument ...). Wir müssen jedoch selten Befehle verschlüsseln , die an ein Gerät gesendet werden. Bei Befehlen ist normalerweise das Signieren erforderlich , um sicherzustellen, dass sie von der autorisierten Partei stammen. Aber ihr Inhalt ist eigentlich selten sensibel. Sie sollten dies also ebenfalls bestätigen.
Dim
2

Dies sieht aus wie ein klassischer Fall, in dem eine asymmetrische Schlüsselverschlüsselung nützlich wäre. Bei der asymmetrischen Schlüsselverschlüsselung haben Sie zwei Schlüssel, einen privaten und einen öffentlichen. Sie möchten den privaten Schlüssel vollständig schützen, der öffentliche Schlüssel kann jedoch öffentlich gemacht werden und benötigt keinen Schutz. Möglicherweise können Sie den privaten Schlüssel auf dem sicheren System und den öffentlichen Schlüssel auf dem eingebetteten Gerät behalten.

hildred
quelle
Die Entschlüsselung der Daten erfolgt mit dem privaten Schlüssel (und die Verschlüsselung mit dem öffentlichen Schlüssel). Andernfalls kann jeder entschlüsseln (da jeder Zugriff auf den öffentlichen Schlüssel hat), was ein Problem wäre. Daher muss sich der private Schlüssel im Gerät befinden. Wie stecke ich nun den privaten Schlüssel in das Gerät? Nun, zurück zum anfänglichen Problem ...
Dim
In der Lage zu sein, Befehle zu entschlüsseln, erlaubt es nicht, neue von Grund auf neu zu erstellen, so dass es kein so großes Problem ist, auf den öffentlichen Schlüssel
zugreifen zu können
Dies entspricht im Allgemeinen der kryptografischen Signatur. Dies hat den Nachteil, dass jemand, der über den öffentlichen Schlüssel verfügt (der eigentlich nicht öffentlich sein muss, so sicher gespeichert werden kann wie der symmetrische Schlüssel), alles entschlüsseln kann. Wie masterX244 sagt, können Sie im Allgemeinen keine neuen Befehle erstellen / signieren. Ich denke, das ist eine gute Lösung.
CoderTao
0

Sie erklären nicht, warum Sie die Befehle verschlüsseln möchten (mit anderen Worten, was Ihr Bedrohungsmodell ist). Ist es Ihre Absicht zu verhindern, dass ein Gegner, der im Besitz des PIC-basierten Geräts ist, bestimmt, welche Befehle an dieses gesendet werden? Oder möchten Sie verhindern, dass das PIC-basierte Gerät eine Reihe von Befehlen ausführt, die durch einen Gegner ersetzt werden, und nur Befehle ausführen, die von Ihrem Server stammen?

In ersterem Fall stehen Sie vor einer fast unmöglichen Aufgabe: Ihr Gerät muss die Befehle entschlüsseln, um sie auszuführen. Der Besitz des PIC-Geräts bedeutet den Besitz des Entschlüsselungsschlüssels. Ein Gegner kann entweder den Schlüssel (der auf dem PIC-Gerät gespeichert ist, das er besitzt) extrahieren oder einfach warten, bis Ihre Firmware die Befehle entschlüsselt, und sie dann aus dem Speicher erfassen.

Wenn Sie andererseits nur sicherstellen möchten, dass Ihr Gerät nur Befehle ausführt, die von Ihrem Server stammen, haben Sie Glück. In diesem Fall können Sie die Verschlüsselung mit öffentlichem Schlüssel (z. B. RSA) oder ein digitales Signaturschema mit öffentlichem Schlüssel (z. B. DSS) verwenden. In diesen Geräten speichert Ihr Gerät nur den öffentlichen Schlüssel: Dies reicht aus, um die Befehle zu entschlüsseln (oder die digitale Signatur zu überprüfen), kann jedoch nicht zum Verschlüsseln von Befehlen (oder zum Generieren einer digitalen Signatur) verwendet werden, die das Gerät akzeptiert. Dazu ist der private Schlüssel erforderlich, mit dem Sie die Befehle verschlüsseln (oder signieren), bevor Sie sie senden. Der private Schlüssel muss Ihren Server niemals verlassen. Noch besser ist es, die Befehle auf einem Computer zu verschlüsseln oder zu signieren, der nicht extern kommuniziert, und diese nur auf den Server zu kopieren, damit der private Schlüssel niemals auf einem extern zugänglichen Server gefunden wird.

Stephen C. Steel
quelle