it-swarm.com.de

Ist das Zuweisen entschlüsselter Schlüssel zu einer Variablen in der Anwendung sicher?

Angenommen, ich habe einen verschlüsselten geheimen Schlüssel vom Server abgerufen. Ich entschlüssele es, um den eigentlichen geheimen Schlüssel zu erhalten, und weise den entschlüsselten Schlüssel einer Variablen in meiner App zu. Etwas dazu:

const encryptedKey = fetchKeyFromServer();
const secretKey = decrypt(encryptedKey);
//Now, the variable secretKey has the actual secret key in memory

Ist dies eine Sicherheitsanfälligkeit? Gibt es eine Möglichkeit, dass jemand den geheimen Schlüssel durch Ablesen aus dem Speicher der App enthüllt, da ich den entschlüsselten Schlüssel im Speicher gespeichert habe?

Wie soll ich den Schlüssel verwenden, wenn ich den entschlüsselten Schlüssel jedoch keiner Variablen zuordne? Ich habe darüber nachgedacht, der Variablen den verschlüsselten Schlüssel zuzuweisen und ihn jedes Mal zu entschlüsseln, wenn ich ihn verwenden muss. Aber ich bin mir immer noch nicht sicher, ob dies der beste Weg ist, Dinge zu tun.

22
xenon

Ja, dies bedeutet, dass der Schlüssel im Speicher der Anwendung gespeichert wird. Ja, es besteht das Risiko, dass Malware (mit ausreichenden Berechtigungen) sie von dort aus lesen kann. Dieses Risiko ist schwer zu vermeiden. Wenn Sie den Schlüssel verwenden möchten, müssen Sie ihn speichern, genauso wie Sie Ihren Hausschlüssel nach dem Schließen der Tür in die Tasche stecken müssen.

Dies wird normalerweise aus einem Grund nicht als große Sache angesehen. Wenn auf einem Computer Malware mit Root-Rechten vorhanden ist, ist das Spiel ohnehin schon vorbei. Zu diesem Zeitpunkt gibt es keine Möglichkeit, etwas sicher zu verwahren. Selbst wenn Sie den Schlüssel nicht entschlüsseln, kann die Malware den Schlüssel, der für diese Entschlüsselung verwendet wird, von jedem Ort aus lesen, an dem er gespeichert ist.

Hier sind drei Dinge, die Sie tun können, um das Risiko zu minimieren:

  • Verwenden Sie eine Art von HSM . (Dank an DRF für den Hinweis.) Dies ist der beste Ansatz, aber die Machbarkeit hängt davon ab, auf welcher Plattform Sie arbeiten. Beachten Sie jedoch, dass Malware mit ausreichenden Berechtigungen zum Lesen des Speichers anderer Prozesse wahrscheinlich auch den HSM verwenden kann. Dies ist also nicht kugelsicher gegen eine Malware-Infektion.
  • Minimieren Sie die Zeit, in der sich der Schlüssel im Speicher befindet, um das Angriffsfenster zu verkleinern, indem Sie den Speicher überschreiben, nachdem Sie fertig sind. (Wie MSalters hervorhebt, ist dies möglicherweise nicht so einfach, wie es sich anhört. Beispielsweise entfernt das Optimierungsprogramm in C++ möglicherweise einen nicht gelesenen Schreibvorgang und in Java Zeichenfolgen sind unveränderlich, sodass sie nicht überschrieben werden können.)
  • Markieren Sie, wie Vitor vorschlägt, die Speicherseite, auf der der Schlüssel gespeichert ist, als nicht austauschbar, damit er niemals auf die Festplatte geschrieben wird.
32
Anders