Frage

Ich habe für die Verschlüsselung von sensiblen Daten in meinem Unternehmen der PHP mcrypt Modul im Einsatz. Das hat gut funktioniert. Allerdings habe ich ein neues Master-Passwort erstellen forderte die in der Lage sein sollte, alle Daten zu entschlüsseln. Das Problem ist, dass dieses Master-Passwort in einer Skriptdatei fest einprogrammiert werden müßte. Bitte korrigieren Sie mich, wenn ich falsch bin aber der einzige sichere Weg scheint einen öffentlichen Schlüssel in dem Skript zu codieren und es verwendet, um Daten zu verschlüsseln, während die privaten Schlüssel sicher zu halten, und verwenden Sie es nur zu entschlüsseln, wenn nötig.

mcrypt scheint nicht eine Implementierung für eine solche Regelung zu haben. Weiß jemand, der eine Bibliothek (PHP-Modul oder reinen PHP), die dies tun würden?

War es hilfreich?

Lösung

Ich schlage vor, einen Blick auf den PHP OpenSSL Bindungen nehmen, insbesondere auf die openssl_public_encrypt () Funktion. Man könnte in der Tat einen Master öffentliche Schlüssel in die Skript einbetten und hat das Skript zu verschlüsseln jeden AES-Schlüssel des Benutzers mit diesem öffentlichen Schlüssel. Halten Sie die entsprechenden Master privaten Schlüssel im Unternehmen sicher.

Sollten müssen Sie die Master-Entschlüsselungsfunktion, würden Sie die verschlüsselten Benutzerschlüssel ziehen, entschlüsseln sie mit dem privaten Schlüssel Master und dann die ursprünglichen Daten entschlüsseln.

Andere Tipps

Es gibt eine PECL-Erweiterung für die. http://us2.php.net/manual/en/book.gnupg. php

Sie können auch gnupg Kommandozeilen-Tool von PHP verwenden, wenn es nicht sehr schnell sein muss: http://devzone.zend.com/article/1265

Ich habe beiden Methoden nicht versucht.

Ich sehe nicht, wie das funktionieren würde. Jede Zwei-Wege-Verschlüsselungsfunktion wird nur dann, wenn das spezifische Passwort zugeführt entschlüsseln, verwendet zum Verschlüsseln (es sei denn, Sie die NSA sind und Sie setzen Hintertüren in den Algorithmen). Sie können nicht zwei Passwörter die gleiche Datei zu entschlüsseln (es sei denn, es gibt Hash-Kollisionen, aber das ist nicht etwas, das man leicht passieren kann).

Was Ihr Master-Passwort im Programm zu speichern, wäre es viel besser, es zu speichern, in einer separaten Datei in dem Programm liest, so dass Sie straffe OS-Level-Sicherheit für die Datei verwenden können.

im Auge mcrypt Halten Sie ist nicht mit öffentlichen Schlüsseln. Mit Public Key-Kryptographie, könnten Sie in der Lage sein zu tun, was Sie wollen, though. Zum Beispiel mit PGP / GPG, können Sie eine Datei verschlüsseln, so dass drei verschiedene Benutzer sie entschlüsseln können ihre privaten Schlüssel verwenden, ohne sich gegenseitig die privaten Schlüssel zu kennen. So können Sie einen virtuellen Benutzer mit dem Master-Passwort haben, das alles entschlüsseln kann.

Eine andere Möglichkeit wäre, zwei Kopien aller verschlüsselten Daten zu halten; ein mit dem Passwort des Benutzers verschlüsselt, und eine mit dem Master-Passwort verschlüsselt.

Nur um sicherzugehen Ihre Anforderung dieses Master-Passwort ,

  1. Ist es voraussichtlich nur noch als verwendet werden ‚ encrypt this ‘ Befehl, das wird ‚Siegel‘ etwas
    die dann nur von einer Person geöffnet werden, um die privaten Schlüssel in Frage zu kennen? Oder,
    • Ist es etwas, das Sie erwarten jede Verschlüsselung im Unternehmen getan zu öffnen?
    • Ich will nur Ihre Phrasierung sicher sein wird in dieser zweiten Art und Weise interpretiert werden
    • Ihr Ausdruck ' decrypt any data ' klingt gefährlich
      (Und nicht machbar / praktisch mit asymmetrischen Schlüsseln-Verschlüsselung)

Update auf den Kommentar basiert.

  • Sie planen für zwei Kopien der Daten mit jeweils unterschiedlichen Schlüsseln verschlüsselt
    • eine Kopie ist mit dem Master öffentlich verschlüsselt werden Schlüssel
      • kann mit jemand mit der Master Privat entschlüsselt werden Taste
        der private Schlüssel Master muss dann gesichert werden (öffentlicher Schlüssel ist nicht kritisch)
    • zweite Kopie ist mit dem Rijndael 256 Schlüssel verschlüsselt werden
  • Zweck ist, den Master zu erlauben, die Daten zu entschlüsseln, wann immer erforderlich
    in Abwesenheit des Individuums vor allem, die sie verschlüsselt

Dieser Ansatz funktioniert für, einen einfachen Zugang der Daten durch die einzelnen mit dem Rijndael-Taste,
ohne Notwendigkeit einer Intervention durch den Master privaten Schlüssel Eigentümer.
Und wenn der Meister privaten Schlüssel Eigentümer mit der Geheimhaltung der Daten vertrauenswürdig ist.

Ihr Programm muß die Master-Kopie (Löschen der älteren und neu Verschlüsseln einen neuen) jedes Mal aktualisieren, die Benutzer ihre Kopie aktualisiert.


Wenn jedoch die Benutzerdaten werden mit dem Master vertraut (wie eindeutig der Fall ist hier),

  • ein einfacher Ansatz wäre den Rijndael-Schlüssel aus dem Master zur Ausgabe von
  • Der Meister konnte halten Sie es mit dem Master-öffentlichen Schlüssel selbst
  • verschlüsselt
  • Die Daten können dann nur mit dem ausgegebenen Rijndael-Schlüssel verschlüsselt werden
    • es wird immer mit dem Master-privaten Schlüssel
      zugänglich sein welche der Rijndael Schlüssel des Benutzers öffnen

Wenn der Benutzer braucht, um die Daten zu unterschreiben, die separat in dem Verfahren erreicht werden können.
Es wird Sie von halten doppelte Kopien speichern und ihre Beibehaltung.


Um die Daten signieren , könnte der Benutzer ein ein Schlüsselpaar von ihnen erzeugt.

  • Bevor die Daten mit dem Rijndael privaten Schlüssel
  • Verschlüsselung
  • Master-Public-Key verschlüsselt mit dem Benutzer-private-key können angehängt werden
  • Benutzer Öffentliche Schlüssel mit dem Master geteilt (mindestens)
    wird ausreichend sein, zu authentifizieren, dass der Benutzer die Daten zur Verfügung gestellt hat
  • In einem Worst-Case-Szenario, wenn der Benutzer nicht verfügbar ist und die Schlüssel Bestätigung fehlschlägt,
    der Master kann auf die Echtheit der Daten vertraut werden - die noch entschlüsselt werden kann
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top