Keine dieser Optionen ist besonders besser oder schlechter als die anderen, weil sie alle sehr unsicher sind. Ich gehe mit Option 4.
SRAM ist der sicherste Ort zum Aufbewahren von Schlüsseln, aber Sie dürfen sie niemals von außen injizieren. Sie müssen IMMER während des Startvorgangs im Prozessor generiert werden. Wenn Sie etwas anderes tun, wird der Rest sofort ungültig - es ist automatisch unsicher.
Speichern Sie keine Schlüssel im nichtflüchtigen Speicher, da sind Sie richtig. Es spielt keine Rolle, ob Sie das EEPROM oder den Flash-Speicher vor dem Lesen schützen. Diese Code-Leseschutzsicherung kann leicht vertauscht werden. Ein Angreifer muss nur entkappen (die schwarze Epoxidverpackung entfernen oder chemisch wegätzen, um den Siliziumchip im Inneren freizulegen). Zu diesem Zeitpunkt können sie den Teil des Chips verdecken, der nichtflüchtige Speicherzellen sind (diese Abschnitte sind sehr regelmäßig und während einzelne Speicherzellen viel zu klein sind, um gesehen zu werden, kann die größere Struktur sein) und ein kleines Stück von etwas UV-undurchlässig ist über diesem Abschnitt maskiert. Dann kann der Angreifer einfach 5-10 Minuten lang UV-Licht auf den Chip richten und alle Sicherungen, einschließlich der CRP-Sicherung, zurücksetzen. Der OTP-Speicher kann jetzt von jedem Standardprogrammierer gelesen werden.
Oder wenn sie gut finanziert sind (z. B. sind diese Schlüssel für jemanden mehr als 1000 US-Dollar wert), können sie die Speicherzellen einfach direkt mit verschiedenen Arten von Elektronenmikroskopen lesen.
Um sicher zu gehen, müssen die Schlüssel gelöscht und nicht verborgen werden.
- Nein, aus den gleichen Gründen wie oben.
Nun zu Option 4:
- Verwenden Sie einfach die Verschlüsselung. Die Schlüsselverteilung ist ein gelöstes Problem. Verwenden Sie also diese leicht verfügbare Lösung. Der Chip sollte sein RNG verwenden und verschiedene andere Überlegungen sollten angestellt werden, um sicherzustellen, dass eine ausreichende Entropieversorgung zur Verfügung steht, und der Bootloader sollte direkt in das Programm booten, das die erforderlichen geheimen Schlüssel generiert, was für allgemeine Zwecke vorgesehen ist registriert und direkt in SRAM verschoben, wo sie bleiben, bis sie gelöscht werden.
Es gibt jedoch ein Problem, nämlich dass nichts außer der CPU eine Ahnung hat, was der geheime Schlüssel ist. Kein Problem: Verwenden Sie die Kryptografie mit öffentlichem Schlüssel. Was Sie im OTP-Speicher gespeichert haben, ist Ihr öffentlicher Schlüssel. Dieser Schlüssel kann von jedem gelesen werden, Sie können ihn beim Stapeltausch veröffentlichen, Sie können ihn in 5 Fuß hohen Buchstaben auf die Seite eines Öltankers malen, es spielt keine Rolle. Das Wunderbare an der Kryptographie mit öffentlichen Schlüsseln ist, dass sie asymmetrisch ist. Der Schlüssel zum Verschlüsseln kann etwas nicht entschlüsseln, für den der private Schlüssel erforderlich ist. Umgekehrt kann der Schlüssel zum Entschlüsseln von etwas, das mit dem öffentlichen Schlüssel verschlüsselt wurde, nicht zum Verschlüsseln von etwas verwendet werden. Die CPU generiert also die geheimen Schlüssel, verwendet Ihren gespeicherten öffentlichen Schlüssel, um die geheimen Schlüssel zu verschlüsseln, und sendet sie einfach über USB oder RS232 oder was auch immer Sie möchten. Zum Lesen des geheimen Schlüssels ist Ihr privater Schlüssel erforderlich. die nicht gespeichert, gesendet oder jemals mit dem Chip in Verbindung gebracht werden müssen. Sobald Sie den geheimen Schlüssel mit Ihrem privaten Schlüssel (an anderer Stelle außerhalb des Chips) entschlüsselt haben, sind Sie eingestellt. Sie haben einen sicher übertragenen geheimen Schlüssel, der vollständig im Chip generiert wurde, ohne dass etwas anderes als ein öffentlicher Schlüssel gespeichert werden muss - der, wie bereits erwähnt, überhaupt nicht vor dem Lesen geschützt werden muss.
Dieser Prozess wird formal als Schlüsselverhandlung bezeichnet, und alles wird von ihm verwendet. Sie haben es heute mehrmals benutzt. Es stehen viele Ressourcen und Bibliotheken zur Verfügung, um damit umzugehen. Bitte injizieren Sie niemals Schlüssel in irgendetwas.
Eine letzte Sache, die zu erwähnen ist: All dies ist umstritten, da der AES-Schlüssel leicht mithilfe von Seitenkanalangriffen wiederhergestellt werden kann, die auf der Stromversorgung sitzen und winzige Änderungen der Stromaufnahme und den Zeitpunkt zwischen diesen Änderungen messen, die durch das Umdrehen von Bits in der CPU verursacht werden als Register. In Kombination mit dem Wissen darüber, wie AES (oder was auch immer einer der sehr kleinen möglichen Verschlüsselungsalgorithmen sein könnte) funktioniert, ist es relativ einfach und kostengünstig, den Schlüssel wiederherzustellen. Es erlaubt nicht, den Schlüssel zu lesen, aber es kann den Schlüsselraum auf etwas lächerlich Kleines wie 255 mögliche Schlüssel eingrenzen. Der Chip kann es auch nicht erkennen, da es sich stromaufwärts befindet.
Dies hat AES-256-verschlüsselte Bootloader auf "sicheren" Kryptoprozessoren besiegt und es ist nicht einmal so schwer. Soweit ich weiß, gibt es keine echten Hardware-Gegenmaßnahmen gegen diesen Angriff. Es sind jedoch die Verschlüsselungsalgorithmen selbst und wie sie eine CPU zum Umdrehen von Bits benötigen, die diese Sicherheitsanfälligkeit verursacht. Ich vermute, dass seitenkanalresistente oder seitenkanalsichere Algorithmen entwickelt werden müssen (und hoffentlich werden).
So wie es jetzt aussieht, lautet die eigentliche Antwort darauf, wie man einen Schlüssel sicher auf einem eingebetteten Gerät speichert (oder einfach nur einen temporären Schlüssel verwendet): Sie können nicht.
Zumindest wenn Sie jedoch jedes Mal einen neuen Schlüssel mithilfe der Schlüsselverhandlung in Option 4 generieren, kann ein Seitenkanalangriff nur den Schlüssel eines verwendeten Kanals gefährden und nur dann, wenn er eine Weile Zeit hat, die Leistung zu überwachen, während er Daten verschlüsselt . Wenn Sie häufig neue, intern generierte Schlüssel aushandeln, kann dies nützliche Sicherheitsmaßnahmen bieten.
Generieren Sie Schlüssel und speichern Sie sie so kurz wie möglich.