Sichere Passwortverschlüsselung / Entschlüsselung von Strings in PHP

8

Ich wollte wissen, ob es eine etwas einfache, aber sichere Methode gibt, Strings (nicht Passwörter) mit einem Passwort zu verschlüsseln, das nicht auf dem Server in PHP gespeichert ist.

Ich habe eine reversible Passwort-Verschlüsselungsroutine für PHP überprüft , aber ich bin mir nicht sicher, ob es das tut ist sicher genug, wenn Eindringlinge Zugriff auf den Server und die Quelle haben.

Wir sprechen von einem automatischen System, bei dem ein Computer eine Anfrage an einen Server sendet, der Informationen in einem Protokoll speichert. Ich denke also, ich könnte das Verschlüsselungspasswort im Anforderungsheader senden, vorzugsweise verschlüsselt, aber dann wäre es schwierig, es zu entschlüsseln, ohne das Passwort irgendwie auf dem Server zu speichern. Warten Sie, ich denke, ich könnte die Dinge ein wenig zu viel verkomplizieren, aber ich hoffe, Sie bekommen die Idee ... Es ist beabsichtigt, die Informationen sicher zu halten, auch wenn Hacker die volle Kontrolle über den Server haben.

    
Nicolas A. T. 04.08.2011, 15:18
quelle

3 Antworten

4

Wenn ich Sie richtig verstehe, zielen Sie auf ein Protokoll ab, das vom Server verschlüsselt wird. Die Anfragen werden einfach gesendet, aber Sie möchten etwas wie Zugriffsstatistiken pro Benutzer oder Ähnliches protokollieren und halten diese Daten für vertraulich. Sie sollten daher vom Server verschlüsselt und vom Server entschlüsselt werden notwendig.

Wenn das der Fall ist, ist es eigentlich nicht allzu kompliziert.

  • Erstellen Sie einen Verschlüsselungsschlüssel (AES wäre eine gute Wahl), der vom Server verwendet werden soll.
  • Sie speichern diesen Schlüssel in einer Datei.
  • Stellen Sie sicher, dass die Anwendung und nur einige ausgewählte Personen Zugriff auf diesen Speicherort haben. Im schlimmsten Fall wäre es in Ihren öffentlichen Dateien und jeder könnte es aus dem Internet herunterladen. Also legen Sie es in einen Ordner weit weg von Ihren öffentlichen Ressourcen:)
  • Verschlüsseln Sie diese Datei mit einer kennwortbasierten Verschlüsselung z. PBKDF2 in RFC 2898 .

Dann werden Sie feststellen, dass Sie ein Hühnerei-Problem erstellt haben - die Datei benötigt wieder ein Passwort, damit der Server auf den darin gespeicherten Schlüssel zugreifen kann. Aber hier ist der Trick - Sie müssen den Schlüssel beim Serverstart manuell eingeben, und das ist die ephemere Komponente, die Sie brauchen. Das Passwort für die Datei sollte Out-of-Band-Informationen sein (z. B. in einem physischen Tresor) und nirgendwo auf dem Computer selbst.

Eine Alternative (aber möglicherweise weniger sicher, da das Kennwort in einer physischen Form vorliegen würde) besteht darin, sich auf betriebssystemspezifische "Passwort-Depots" wie Windows 'Isolated Storage .

    
emboss 04.08.2011, 22:37
quelle
2

Eine Option hierfür, die Ihren Anforderungen entsprechen würde, wäre die Verwendung der Kryptografie mit öffentlichem / privatem Schlüssel. Wenn der Benutzer die Zeichenfolge mit einem öffentlichen Schlüssel verschlüsseln würde und die verschlüsselten Daten auf dem Server gespeichert wären, könnte ein Angreifer die Daten nicht entschlüsseln.

Wenn / wenn Sie die Daten entschlüsseln müssen, kopieren Sie sie einfach an einen Speicherort, an dem Sie den privaten Schlüssel haben, und verwenden Sie diesen für die Entschlüsselung.

    
Rоry McCune 04.08.2011 20:28
quelle
0

Ich würde mit Mcrypt gehen, um Daten in PHP zu verschlüsseln / entschlüsseln.
Mein Algorithmus der Wahl wäre zweifach. Sie benötigen einen Schlüssel zum Verschlüsseln / Entschlüsseln von Daten und senden Sie es per Anfrage könnte ein Sicherheitsproblem sein, es sei denn Sie ssl implementiert haben. Wenn die Verschlüsselung auf Anfrage nicht Echtzeit-Sache sein sollte, könnte man einfach das Skript in der Konsole ausführen, damit das Passwort nicht auf dem Server gespeichert wird.

Der Code für die Verschlüsselung / Entschlüsselung ist einfach:

%Vor%     
Hubert_J 04.08.2011 20:20
quelle