[Haftungsausschluss: Ich bin ein Security / Crypto-Experte und beschäftige mich täglich mit Fragen zur Sicherheitsarchitektur.]
Sie sind auf das Problem gestoßen, Anmeldeinformationen so zu speichern, dass ein unbeaufsichtigter Prozess darauf zugreifen kann, ein Angreifer jedoch nicht. Dies ist ein bekanntes und sehr schwer zu lösendes Problem.
Wenn Ihr IoT-Gerät über einen auf dem Motherboard integrierten Hardware-Keystore verfügt, wie z. B. einige TPMs, oder einen entsprechenden, durch Android-Hardware gesicherten Keystore oder Apple Secure Enclave, können Sie diesen verwenden.
Bei herkömmlichen Servern können Sie HSMs oder Smartcards verwenden, aber die einzige vollständige Softwarelösung, die mir bekannt ist, besteht darin, einen AES-Schlüssel aus einer Art "Hardware-Fingerabdruck" abzuleiten, der durch Kombination der Seriennummern aller Hardwaregeräte erstellt wird. Verwenden Sie dann diesen AES-Schlüssel, um die Anmeldeinformationen zu verschlüsseln. Ein Prozess, der auf demselben Server ausgeführt wird, kann den AES-Schlüssel rekonstruieren und die Anmeldeinformationen entschlüsseln. Sobald Sie die Datei vom Server extrahieren, kann sie im Wesentlichen nicht mehr entschlüsselt werden.
Das IoT wirft aus zwei Gründen einen Schraubenschlüssel hinein:
Die Annahme, dass Hardware-Seriennummern eindeutig sind, trifft wahrscheinlich nicht zu, und
Im Gegensatz zu Servern haben Angreifer physischen Zugriff auf das Gerät. Daher kann das Gerät möglicherweise eine Shell zum Ausführen des Entschlüsselungsprogramms erhalten.
Sowohl die Hardware-Verschlüsselung (TPMs) als auch die "Hardware-Fingerabdruck" -Verschlüsselung stellen bestenfalls eine Verschleierung dar, da ein Angreifer, der diesen lokalen Prozess ausführen kann, die Daten grundsätzlich auch entschlüsseln kann.
Der Standardtrick sieht also so aus, als würde er hier nicht funktionieren. Die erste Frage, die Sie sich stellen müssen, ist:
- Was ist mein Bedrohungsmodell / wo steht dieses Projekt auf der
Secure <--> Convenient
Skala?
Letztendlich denke ich, dass Sie dies entweder entscheiden müssen security > convenience
und einen Menschen nach jedem Start die Anmeldeinformationen eingeben lassen müssen (etwa mit der Antwort von @ BenceKaulics ), oder Sie entscheiden dies security < convenience
und legen die Anmeldeinformationen einfach auf dem Gerät ab, möglicherweise unter Verwendung einer Verschleierung, falls Sie dies wünschen Das macht den Unterschied.
Dies ist ein schweres Problem, das durch die Art der IoT-Geräte erschwert wird.
Der Vollständigkeit halber lautet die vollständige industrielle Lösung für dieses Problem:
- Geben Sie jedem IoT-Gerät zur Herstellungszeit einen eindeutigen öffentlichen RSA-Schlüssel. Notieren Sie diesen öffentlichen Schlüssel in einer Datenbank mit der Seriennummer des Geräts.
- Speichern Sie die vertraulichen Anmeldeinformationen auf einem geeigneten Server, nennen wir es ein "Gateway".
- Wenn sich ein IoT-Gerät beim Gateway authentifiziert (unter Verwendung seines RSA-Schlüssels), öffnet das Gateway eine Sitzung für dieses Gerät unter Verwendung der gespeicherten Anmeldeinformationen und gibt das Sitzungstoken an das Gerät zurück.
- Aus Sicherheitsgründen ist das Gateway ein physisches Gateway (oder VPN-Gateway), sodass der gesamte Datenverkehr vom IoT-Gerät durch das Gateway geleitet wird und Sie mehr Kontrolle über Firewall-Regeln und andere Dinge haben. Zugang zum Internet.
Auf diese Weise kann ein Angreifer, der ein Gerät kompromittiert, eine Sitzung eröffnen, hat jedoch nie direkten Zugriff auf die Anmeldeinformationen.