Hi!
Man meldet sich mit dem Schlüssel an und dann erst weiß mein PHP Script den Schlüssel zum entschlüsseln, entschhlüsselt die Dateinen und bearbeitet sie.
Jedoch scheint das eine Milchmädchenrechnung zu sein, denn der Schlüssel wird in reinform eingeben und übertragen (kein https) und ist die ganze session über in einer Variable gespeichert.
Das sind riesige Schwachstellen, richtig?
Auch ohne eine Speicherung in der Session bleibt das riskant.
Die Frage ist ja immer, wem man vertraut. Wenn du dem Server vertraust, beauftrage ihn mit der Entschlüsslung. Das machst du aber nicht, denn sonst wäre es ja nicht notwendig, die Daten verschlüsselt dort abzulegen. Wenn du den Schlüssel zum Server sendest, muss er dort in Klarform auftauchen, um die Daten zu entschlüsseln. Eine verschlüsselte Übertragung nützt dir nicht viel, denn die ist ja hinten und vorn offen. Der Serverbetreiber oder jemand mit unberechtigtem Zugang zu diesem Server kann dein Passwort oder deinen Schlüssel abfangen und ...
Schwerer kann man es nur machen, wenn nicht nur ein einziger Schlüssel für sämtliche Daten vorgesehen ist, dann dauert es eben länger, an alle Daten zu kommen. Aber immerhin kommt man an die Daten, die dir wichtig sind, denn die fragst du ja gelegentlich ab.
Einen Dritten, auf den im Falle einer Abfrage temporär die Daten und Schlüssel gebracht werden können, hast du nicht, denn dann hättest du ihn komplett zur Datenhaltung verwenden können. Denn wenn der sicher ist, warum dann noch die Unsicherheit mit den Servern in Kauf nehmen?
Bleibt noch der jeweilige Client, an dem du die Daten abrufen willst. Auch der kann verseucht sein, besonders wenn er nicht unter deiner ständigen Obhut steht. Mal angenommen, du vertraust dem Client, so müsstest du die verschlüsselten Daten zu ihm übertragen und in einem dort auszuführenden Programm entschlüsseln. Das Problem ist, das Programm dort laufen zu lassen. Wenn du eine .exe (oder Unix- und Mac-Äquivalente) verwenden kannst, kann man darin schonmal eine Menge Verschleierungsaufwand betreiben, damit die Daten nicht so einfach von anderen Programmen aus dem Speicher gelesen oder an Ausgabeschnittstellen abgefangen werden können.
Eine Alternative wäre, den Entschlüsslungscode in Javascript/Silverlight/Flash zu schreiben. Der nimmt dein Passwort entgegen und errechnet dir die Daten. Wie aber stellst du sicher, dass der Code auf dem Server nicht soweit manipuliert wurden, dass er das eingegebene Passwort im Hintergrund an den Server sendet?
Es gibt eine Menge Möglichkeiten, wie man so ein System aufsetzen kann, aber alle haben mehr oder weniger Schwachstellen. Du kannst hier nur alle Umstände und Vertrauenswürdigkeiten gegeneinander abwägen und den jeweiligen Aufwand gegen das was dir deine Daten wert sind ins Verhältnis setzen.
Lo!