meda123: Datenbank dynamisch verschlüsseln

Hallo zusammen,

ich schreibe momentan eine Arbeit über Web-Sicherheit.
Dafür habe ein eine Datenbank in welcher die Daten mittels "blowfish" verschlüsselt wurden. Der entsprechende Key dafür ist im Klartext in einer Datei im Webserver abgespeichert.
Ich persönlich finde das zu unsicher, da ja wer Zugriff auf den Webserver hat, so auch automatisch Zugriff auf die Dateien der Datenbank hat, bzw. diese entschlüsseln kann.

Welche Möglichkeiten gibt es Datenbanken dynamisch zu verschlüsseln?
Ich habe dazu Literatur gesucht, da dass absolutes Neuland für mich ist, bisher aber nichts gefunden.
Könnt ihr mir Tips für Literatur geben, oder insgesamt Ratschläge wie man das ganze umsetzen könnte,

LG,

  1. Hakuna matata!

    Dafür habe ein eine Datenbank in welcher die Daten mittels "blowfish" verschlüsselt wurden. Der entsprechende Key dafür ist im Klartext in einer Datei im Webserver abgespeichert.
    Ich persönlich finde das zu unsicher, da ja wer Zugriff auf den Webserver hat, so auch automatisch Zugriff auf die Dateien der Datenbank hat, bzw. diese entschlüsseln kann.

    Das ist richtig, das Problem ist, dass Blowfish ein symmetrisches Verschlüsselungsverfahren ist.

    Welche Möglichkeiten gibt es Datenbanken dynamisch zu verschlüsseln?

    Ich weiß nicht, was du mit "dynamisch" meinst, aber vermutlich ist asymmetrische Verschlüsselung die Lösung zu deinem Problem.

    Ich habe dazu Literatur gesucht, da dass absolutes Neuland für mich ist, bisher aber nichts gefunden.

    Bist du dir sicher, dass du als Anfänger wirklich eine Arbeit über ein so heikles Thema verfassen möchtest? Das könnte tierisch in die Hose gehen.

    Könnt ihr mir Tips für Literatur geben, oder insgesamt Ratschläge wie man das ganze umsetzen könnte,

    Jetzt hast du hoffentlich die nötigen Stichworte für deine weitere Recherche.

    --
    “All right, then, I'll go to hell.” – Huck Finn
    1. Ich weiß nicht, was du mit "dynamisch" meinst, aber vermutlich ist asymmetrische Verschlüsselung die Lösung zu deinem Problem.

      Oh, da hab ich mich wohl falsch ausgedrückt, ich meinte eine dynamische Generierung des Schlüssels, so dass beispielsweiße beim Anlegen eines neuen Benutzers, pro User ein neuer Schlüssel generiert wird. :)

      1. Hakuna matata!

        Ich weiß nicht, was du mit "dynamisch" meinst, aber vermutlich ist asymmetrische Verschlüsselung die Lösung zu deinem Problem.

        Oh, da hab ich mich wohl falsch ausgedrückt, ich meinte eine dynamische Generierung des Schlüssels, so dass beispielsweiße beim Anlegen eines neuen Benutzers, pro User ein neuer Schlüssel generiert wird. :)

        Wichtig ist, dass der Systemadministrator keinen Zugriff auf den Schlüssel hat, mit dem er die Daten entschlüsseln könnte. Der Schlüssel darf also nicht auf dem Server erzeugt werden oder dort abgelegt werden. Bei asymmetrischer Verschlüsselung dürfte der Server allerdings den Publik-Key kennen, denn damit können Daten nur verschlüsselt werden, aber nicht entschlüsselt. Der Private-Key müsste auch hier vom Nutzer geheim gehalten werden.

        --
        “All right, then, I'll go to hell.” – Huck Finn
  2. Liebe Mitdenker,
    liebe Wissende,
    liebe Neugierige,

    ja!

    eine Datenbank, die Arbeitsdaten enthält zu verschlüsseln, ist technisch nahezu nicht möglich. Dazu müsste die ganze Engine neu geschrieben werden, denn mindestens im Hauptspeicher müssen die Daten dann unverschlüsselt vorliegen. Wie willst Du sonst damit arbeiten?

    Der Hauptspeicher müsste so groß sein, dass er ganze Indexe halten kann. Das ist selbst heute noch relativ unmöglich.

    Da ist es billiger, einen Tresor um die Datenbankmaschinen herum zu bauen, und den Administrator gleich mit einzuschließen. Nach außen gibts dann nur fein säublerich gesiebte Daten, keinen direkten Zugriff auf die Datenbanktabellen (nur über spezielle Funktionen) usw.

    Spirituelle Grüße
    Euer Robert

    --
    Möge der Forumsgeist wiederbelebt werden!
    1. Hakuna matata!

      eine Datenbank, die Arbeitsdaten enthält zu verschlüsseln, ist technisch nahezu nicht möglich. Dazu müsste die ganze Engine neu geschrieben werden, denn mindestens im Hauptspeicher müssen die Daten dann unverschlüsselt vorliegen. Wie willst Du sonst damit arbeiten?

      Ich dachte hier ging es nur darum verschlüsselte Daten persistieren und wieder abholen zu können. Ich bin erstmal nicht davon ausgengangen, dass die Daten auf dem Server weiterverarbeitet werden, sondern auf dem lokalen Rechner des Anwenders. Wenn bereits auf dem Server mit den Daten gerechnetet werden soll, dann müssten diese ja zwangsläufig entschlüsselt werden, und dann ist der ganze Aufwand hinfällig, weil jeder Serveradministrator sich Einblick verschaffen könnte.

      --
      “All right, then, I'll go to hell.” – Huck Finn
      1. Liebe Mitdenker,
        liebe Wissende,
        liebe Neugierige,

        ja!

        eine Datenbank, die Arbeitsdaten enthält zu verschlüsseln, ist technisch nahezu nicht möglich. Dazu müsste die ganze Engine neu geschrieben werden, denn mindestens im Hauptspeicher müssen die Daten dann unverschlüsselt vorliegen. Wie willst Du sonst damit arbeiten?

        Ich dachte hier ging es nur darum verschlüsselte Daten persistieren und wieder abholen zu können. Ich bin erstmal nicht davon ausgengangen, dass die Daten auf dem Server weiterverarbeitet werden, sondern auf dem lokalen Rechner des Anwenders. Wenn bereits auf dem Server mit den Daten gerechnetet werden soll, dann müssten diese ja zwangsläufig entschlüsselt werden, und dann ist der ganze Aufwand hinfällig, weil jeder Serveradministrator sich Einblick verschaffen könnte.

        Und ich habe die Frage für mich frei übersetzt:
        "Welche Möglichkeiten gibt es Datenbanken dynamisch zu verschlüsseln?"
                                           1          2              3

        1.: Die Daten in einem DBMS, Funktionen, Tabellendefinitionen, also alle Komponenten
        2.: während der Arbeit damit
        3.: für Fremde nicht lesbar machen

        Wer ist nun aber in Bezug auf die Daten und Tabellen und Funktionen einer Datenbank ein Fremder?

        Ist die DB-Engine schon eine Fremde?
        An welcher Stelle darf die Verschlüsselung aufgehoben werden?

        Um eine Tabelle (mein Beispiel war ein Index) durchsuchen zu können, muss sowohl der Suchbegriff als auch die Tabelle unverschlüsselt vorliegen. Bei einem Index über 80.000.000 Datensätze (die berühmte Bundesbürgerdatenbank) muss also eine Tabelle mit ca. 320MB unverschlüsselt im Speicher liegen. Das ist noch nicht unbedingt das Problem. Aber die Tabelle mit den Datensätzen ist ja auch verschlüsselt. Sie ist also keine Tabelle mehr, sondern nur noch eine Datei. Bei einer guten Verschlüsselung von Massendaten liegt der gesuchte Datemnsatz auf keinen Fall in geschlossener Form an der Position XYZ vor, sondern ist breit über die gesamte Datei verstreut. Um aus der Datei wieder eine Tabelle machen zu können (1. Schritt = Datenhaufen zu Datensätzen zurückverwandeln) muss die also auch entschlüsselt werden. Da kann man schon mal ca. 4000 Bytes pro Datensatz ansetzen, wenn man einigermaßen Aussagekraft haben will.

        4000 * 80.000.000 = 320.000.000.000

        usw.
        Das war jetzt nur die eine Text-Tabelle. Nun wollen wir aber noch die Bilder von dem Typen haben und eine Stimmprobe und ...

        Unverschlüsselt auf die Platte zurückschreiben darf man das Gelumpe ja nicht einfach. Die könnte ja jemand mitnehmen und dann noch alte unverschlüsselte Fragmente darauf finden.

        "Dynamische" Verschlüsselung von Datenbanken ist daher mMn nach heutigen Erkenntnissen noch Unsinn und nicht durchführbar.

        Spirituelle Grüße
        Euer Robert

        --
        Möge der Forumsgeist wiederbelebt werden!
        1. Hi there,

          [...] Aber die Tabelle mit den Datensätzen ist ja auch verschlüsselt. Sie ist also keine Tabelle mehr, sondern nur noch eine Datei. Bei einer guten Verschlüsselung von Massendaten liegt der gesuchte Datemnsatz auf keinen Fall in geschlossener Form an der Position XYZ vor, sondern ist breit über die gesamte Datei verstreut.

          Eben. Am meisten dürft's an den Suchalgos haken. Wie sortiert man soetwas? Ein Index eines verschlüsselten Keys ist entweder für A und F oder aber er lässt, wenn er funktioniert, Rückschlüsse auf den Key selbst zu...;)

          1. Liebe Mitdenker,
            liebe Wissende,
            liebe Neugierige,

            ja!

            Hi there,

            [...] Aber die Tabelle mit den Datensätzen ist ja auch verschlüsselt. Sie ist also keine Tabelle mehr, sondern nur noch eine Datei. Bei einer guten Verschlüsselung von Massendaten liegt der gesuchte Datemnsatz auf keinen Fall in geschlossener Form an der Position XYZ vor, sondern ist breit über die gesamte Datei verstreut.

            Eben. Am meisten dürft's an den Suchalgos haken. Wie sortiert man soetwas? Ein Index eines verschlüsselten Keys ist entweder für A und F oder aber er lässt, wenn er funktioniert, Rückschlüsse auf den Key selbst zu...;)

            Nettes Beispiel. Den Ausdruck "für A und F" kannte ich noch nicht. Aber Dank der guten Indizierung des (für mich) verschlüsselten Ausdruckes konnte ich ihn in der großen Transformationstabelle (Google) sofort finden ;-)

            Spirituelle Grüße
            Euer Robert

            --
            Möge der Forumsgeist wiederbelebt werden!
            1. Liebe Mitdenker,

              Nettes Beispiel. Den Ausdruck "für A und F" kannte ich noch nicht. Aber Dank der guten Indizierung des (für mich) verschlüsselten Ausdruckes konnte ich ihn in der großen Transformationstabelle (Google) sofort finden ;-)

              DDR 1977, Grenze. Der Regimentskommandeur kam zur Kontrolle in den Abschnitt Ecklingerode und fragt den diensthabenden Unteroffizier, wie er seinen Posten am Postenpunkt Süßloch führe.

              Uffz. G.: "Der Posten ist ständig Emil über Friedrich, ansonsten Wilhelm Marta X plus 30, Genosse Oberst."

              Das saß. Etwas verstört aber freundlich fuhr der Oberst mit seiner Kontrolle fort und fragte später bei der Auswertung den Kompaniechef, was der Uffz. wohl damit sagen wollte.

              KC.: "Der Posten ist ständig auf Empfang über Funk und meldet sich ansonsten alle 30 Minuten wieder".

              Wir haben wochenlang darüber gelacht ;)

              Kryptografie an der Grenze: Es gab sog. Postentabellen mit vordefinierten Meldungen. Der Bereitschaftsposten vom UvD hatte täglich die Aufgabe, den Schlüssel, bestehend aus Buchstaben und Zahlen, mit einem Fettstift in die Tabellen einzutragen, die dann an jeden Posten ausgegeben wurden. Nach dem Dienst wurden die Tabellen mit Waschbenzin gereinigt. Der Schlüssel war natürlich geheim, aber niemand hat die Tabellen wirklich genutzt.

              Gemeldet hat sich ein Posten eher so:
              HS60 (das sogenannte Gummiohr, eine in wetterfesten Gummi eingepackte Spech- und Hörkapsel) in eine Buchse des GMN (Grenzmeldenetz) stecken und reinsprechen "Hier ist die 21, Otto Viktor (Ohne Vorkommnisse), Wilhem Marta (Wieder Melden) X 30 (in 30 Minuten)".

              Oder so: "Ein Beamter des GZG (Grenzzolldienst) mit NKD (Nahkampfdackel, Diensthund) steigt aus VW-Bus, polizeiliches KZ GÖ-4711".

              Der ganze Scheiß wurde außerdem in VS-Bücher gekritzelt. VS: Vertrauliche Verschlusssache. Uffz. F. hat mal eine Seite aus so einem Buch rausgerissen, weil das Klopapier alle war. Das gab mächtigen Ärger mit Einheit 2000 ;)

              ...

              Heute profilieren sich Politiker an ehemaligen Postenpunkten, machen schöne Bilder und verewigen sich auf Gedenktafeln. Meinen letzen Postengang habe ich hier verewigt. Heute telefoniere ich ab und zu mit einem meiner ehemaligen Feinde, bei meinem letzten Gespräch habe ich ihm zum Erhalt des Bundesverdienst Kreuz gratuliert.

  3. Moin!

    Hallo zusammen,

    ich schreibe momentan eine Arbeit über Web-Sicherheit.
    Dafür habe ein eine Datenbank in welcher die Daten mittels "blowfish" verschlüsselt wurden. Der entsprechende Key dafür ist im Klartext in einer Datei im Webserver abgespeichert.
    Ich persönlich finde das zu unsicher, da ja wer Zugriff auf den Webserver hat, so auch automatisch Zugriff auf die Dateien der Datenbank hat, bzw. diese entschlüsseln kann.

    Gegen welches Angriffsszenario soll die Verschlüsselung schützen? Ohne eine Diskussion dieser Frage kann man dein Ansinnen kaum sinnvoll beantworten, weil es essentiell ist, dass die Daten, egal ob sie im Persistenzspeicher verschlüsselt liegen oder nicht, für die eigentliche Verarbeitung unverschlüsselt vorliegen!

    Wenn die Daten auf dem Server also auch unverschlüsselt vorliegen müssen, ist die Diskussion über die Sicherheit der Verschlüsselung irrelevant. Ein Angreifer muss nicht die Verschlüsselung knacken, indem er irgendwo die Schlüsseldatei findet, sondern er greift die unverschlüsselten Daten ab, nachdem der Server sie ausgelesen und entschlüsselt hat.

    Ganz einfach, nicht?

    Deshalb ist die wichtigste Antwort: Welche Art von Missbrauch wird vermutet und soll verhindert bzw. erschwert werden?

    Bedenke auch, dass die Datenbank selbst nicht auf derselben Maschine liegen muss, wie das System zum Entschlüsseln.

    Welche Möglichkeiten gibt es Datenbanken dynamisch zu verschlüsseln?

    Wenige. Du kannst nur die Daten verschlüsseln, oder die Datenbank z.B. in eine verschlüsselte Partition unverschlüsselt speichern. Verschlüsselte Daten kann man nicht indizieren und durchsuchen - dafür braucht man also eigentlich gar keine Datenbank, weil die wichtigste Eigenschaft der Datenbank ad absurdum geführt ist. Man kann auch einfach einzelne Dateien mit dem Binärblob der verschlüsselten Information auf die Festplatte schreiben.

    Ich habe dazu Literatur gesucht, da dass absolutes Neuland für mich ist, bisher aber nichts gefunden.
    Könnt ihr mir Tips für Literatur geben, oder insgesamt Ratschläge wie man das ganze umsetzen könnte,

    Es ist grundsätzlich unmöglich, einen zentralen Server zu haben, der sowohl als Datenbank potentiell ALLE Datensätze durchsuchen kann, dies aber auf der anderen Seite nur für genau einen konkreten angemeldeten User mit nur dessen Datensätzen tun soll. Es ist prinzipiell unmöglich, diesem angemeldeten User irgendeine Garantie hinsichtlich Datensicherheit oder Abhörsicherheit zu geben, weil dieser User einem ihm unbekannten, von ihm nicht kontrollierbaren System vertrauen muss, dass eventuell nur vorgibt, sicher zu verschlüsseln.

    - Sven Rautenberg