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 FIXED . 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 passieren.
Die hier vorgestellte Lösung: Speichern eines sicheren Schlüssels im Speicher eines eingebetteten Geräts
verwendet Einmalschlüssel zum Verschlüsseln, aber ich muss einen einzigen supergeheimen Schlüssel speichern
Was mein Arbeitgeber verlangt, ist, dass die Schlüssel nicht zugänglich sind, sodass physischer Schutz außer dem, der durch sichere Speichermodule und die MCU geboten wird, nicht berücksichtigt wird.
Unter der Annahme, dass keine militärische Ausrüstung verwendet wird, gibt es irgendwelche bekannten Lösungen, die Sie kennen und empfehlen können?
Danke im Voraus!
Es tut mir leid, dass diese Antwort Ihr Problem nicht wirklich lösen wird. Aber es ist zu lang, um einen Kommentar einzufügen, und es wird Ihnen ermöglichen, Ihr Problem auf die richtige Weise zu überdenken (denn so wie es ist, halte ich es für fehlerhaft).
Diese Art von Problemen muss gelöst werden, indem alle Komponenten des Systems berücksichtigt werden und vernünftige Annahmen darüber getroffen werden, was ein potenzieller Hacker tun kann oder nicht tun kann.
Zum Beispiel:
Sie sagen: "Der 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 aktivieren.
Warum befürchten Sie dann, dass möglicherweise einige Daten entschlüsselt zwischen der MCU und einem Verschlüsselungs-/Entschlüsselungsmodul übertragen 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 einwirken und genauso einfach "das Zeug 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 mit genau denselben Fragen konfrontiert wie bei Ihrem ursprünglichen Problem.
Eigentlich gibt es keine Möglichkeit, Ihr System sicher zu machen, wenn Sie annehmen, dass sich ein Hacker möglicherweise an jeder Stelle Ihres Systems einschleichen kann (was Sie meiner Meinung nach derzeit annehmen).
Was macht denn ein System sicher?
Eine Smartcard wird sicher gemacht, weil es unvernünftig ist anzunehmen, dass ein Hacker die internen Routen innerhalb des IC zwischen dem Speicher und dem CPU-Block untersuchen kann.
Ein elektrisches Türschloss wird sicher gemacht, weil es unvernünftig ist anzunehmen, dass ein Hacker die Drähte erreichen kann, die das Schloss betätigen.
Etc ... Im Grunde müssen Sie damit beginnen, Dinge zu identifizieren, die ein Hacker nicht tun kann, und von dort aus Ihre gesamte Lösung erarbeiten. Ist es beispielsweise möglich, Ihr gesamtes System in einer sicheren, physisch manipulationssicheren Box unterzubringen? In diesem Fall können Sie entschlüsselte Befehle frei durch einen internen Bus leiten lassen.
Sie können kein sicheres System aufbauen, ohne zu wissen, was der Hacker vernünftigerweise nicht tun kann. Das hast du uns nicht gesagt. Wir können daher keine Komplettlösung vorschlagen.
Dies sieht nach einem klassischen Fall aus, in dem eine asymmetrische Schlüsselverschlüsselung nützlich wäre. Bei der Verschlüsselung mit asymmetrischen Schlüsseln haben Sie zwei Schlüssel, einen privaten und einen öffentlichen. Sie möchten den privaten Schlüssel vollständig schützen, aber der öffentliche Schlüssel kann ö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 aufbewahren.
Sie erklären nicht, warum Sie die Befehle verschlüsselt haben möchten (mit anderen Worten, was Ihr Bedrohungsmodell ist). Wollen Sie verhindern, dass ein Angreifer im Besitz des PIC-basierten Geräts ermittelt, welche Befehle an es gesendet werden? Oder versuchen Sie zu verhindern, dass das PIC-basierte Gerät eine Reihe von Befehlen ausführt, die von einem Gegner ersetzt werden, und ihm nur erlauben, Befehle auszuführen, die von Ihrem Server stammen?
Im ersten 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 Angreifer kann entweder den Schlüssel extrahieren (der auf dem PIC-Gerät gespeichert ist, das er besitzt) oder einfach warten, bis Ihre Firmware die Befehle entschlüsselt, und sie dann aus dem Speicher erfassen.
Wenn Sie andererseits nur versuchen sicherzustellen, dass Ihr Gerät nur Befehle ausführt, die von Ihrem Server stammen, haben Sie Glück. In diesem Fall können Sie eine Verschlüsselung mit öffentlichem Schlüssel (z. B. RSA) oder ein digitales Signaturschema mit öffentlichem Schlüssel (z. B. DSS) verwenden. In diesen speichert Ihr Gerät nur den öffentlichen Schlüssel: Dieser reicht aus, um die Befehle zu entschlüsseln (oder die digitale Signatur zu überprüfen), kann aber nicht verwendet werden, um Befehle zu verschlüsseln (oder eine digitale Signatur zu erzeugen), die das Gerät akzeptiert. Dazu ist der private Schlüssel erforderlich, mit dem Sie die Befehle vor dem Senden verschlüsseln (oder signieren). Der private Schlüssel muss Ihren Server nie verlassen. Noch besser, verschlüsseln oder signieren Sie die Befehle auf einem Computer, der nicht extern kommuniziert, und kopieren Sie diese nur auf den Server, damit der private Schlüssel niemals auf einem extern zugänglichen Server gefunden wird.
mkeith
Sonja
pjc50
Sean Houlihane
jaskij
Sonja
mkeith