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!
Antworten:
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.
quelle
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.
quelle
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.
quelle