Frage

Ich habe gerade über Stack-Überlauf und Ich überprüfe gerade, ob es Ideen für eine Einschränkung, die ich mit einem paar Freunden in einem Projekt habe, obwohl dies eher eine theoretische Frage ist, zu dem ich gewesen bin versuchen, eine Antwort für einige Zeit zu finden.

Ich bin nicht viel in der Kryptographie gegeben, aber wenn ich nicht klar genug bin, werde ich versuchen, zu bearbeiten / Kommentar Fragen zu klären.

Der Versuch, sich kurz zu fassen, ist die Umgebung so etwas wie folgt aus:

  • Eine Anwendung, bei der das Front-End als Zugang zum Verschlüsseln / Entschlüsseln Schlüssel und das Back-End für die Speicherung und Abfragen nur verwendet werden.

  • mit einer Datenbank, auf die Sie keinen Zugriff für ein paar Felder zum Beispiel haben die „Adresse“ sagen wir mal, die Text / varchar wie es üblich ist.

  • Sie haben keinen Zugriff auf den Schlüssel, um die Information zu entschlüsseln, und alle Informationen gelangen in die Datenbank bereits verschlüsselt.

Das Hauptproblem etwas so ist, wie konsequent Abfragen in der Datenbank zu machen, es ist unmöglich, Dinge zu tun, wie „wo Adresse wie‚% F§YU / '~ # JKSks23%‘“. (Wenn es jemand ist dafür mit einer Antwort Gefühl fühlt sich frei, es zu schießen).

Aber ist es ok where address='±!NNsj3~^º-:' zu tun? Oder wäre es auch essen vollständig die Datenbank?

Ein weiterer zurückhalten, dass anwenden könnte, ist, dass das vordere Ende nicht viel Rechenleistung zur Verfügung hat, so bereits Verschlüsselung / Entschlüsselung Informationen beginnt es an seine Grenzen zu stoßen. (Mit diesen Worten nur Antworten zu vermeiden, wie „Exportieren eines an dem vorderen Ende der Tabellen verknüpfen und abzufragen es dort“.)

Könnte jemand zeigen Sie mir in einer Richtung um es zu halten denken?


Nun Dank für so schnell Antworten auf 04.00, zum ersten Mal Nutzung Ich fühle mich mit dieser Gemeinschaft wirklich beeindruckt. (Oder vielleicht bin ich es nur für die anderen Zeitzone)

Fütterung nur einige Informationen:

Das Hauptproblem ist ganz um eine teilweise Übereinstimmung. Als zwingende Voraussetzung in den meisten Datenbanken ist teilweise Übereinstimmungen zu ermöglichen. Die wichtigste Einschränkung ist eigentlich der Besitzer der Datenbank nicht für Informationen in der Datenbank suchen erlaubt würde. Während der letzten 10 Minuten habe ich mit einer möglichen Lösung zu kommen, die wiederum erweitert, um mögliche Datenbankprobleme, zu denen werde ich hinzufügen, hier:

Mögliche Lösung zu ermöglichen, halbTeilÜberEinstimmung:

  • Das Passwort + ein paar öffentlichen Bereichen des Benutzers sind tatsächlich der Schlüssel für die Verschlüsselung. Für die Authentifizierung ist die Idee, einen statischen Wert zu verschlüsseln und es innerhalb der Datenbank vergleichen.
  • einen neuen Satz von Tabellen erstellen, wo Informationen in einer geparsten Weise gespeichert sind, was bedeutet, so etwas wie: „4th Street“ würde zwei verschlüsselte Zeilen (einen für ‚4.‘ eine andere für ‚Street‘) wird. Dies würde bereits erlauben halbTeilÜberEinstimmung als eine Suche bereits auf den separaten Tabellen durchgeführt werden kann.

Neue Frage:

  • essen würde dies wahrscheinlich wieder den Datenbankserver, oder glaubt jemand es eine tragfähige Lösung für das partielle Matching-Problem ist?

Post Scriptum:. Ich habe nicht akzeptiert die Antwort von Cade Roux nur für die weitere Diskussion zu ermöglichen, und speziell eine mögliche Antwort auf die neue Frage

War es hilfreich?

Lösung

Sie können ihm die Art und Weise tun Sie beschreiben - effektiv die Hash-Abfrage, sagt sie, aber es gibt nicht viele Systeme mit dieser Anforderung, da zu diesem Zeitpunkt der Sicherheitsanforderungen mit anderen Anforderungen stören das System nutzbar zu sein - dh keinen Teil Streichhölzer, da die Verschlüsselung, die aus regiert. Es ist das gleiche Problem mit Kompression. Vor Jahren, in einem sehr kleinen Umgebung, hatte ich die Daten zu komprimieren, bevor sie in das Datenformat setzen. Natürlich könnten diese Felder nicht leicht durchsucht werden.

In einer typischen Anwendung schließlich die Schlüssel werden in der Kette jemand zur Verfügung stehen -. Wahrscheinlich den Web-Server

Für Endbenutzerverkehr SSL schützt dieses Rohr. Einige Netzwerk-Switches kann es zwischen Web-Server und Datenbank schützen, und in der Datenbank verschlüsselt Daten zu speichern ist in Ordnung, aber Sie sind nicht auf verschlüsselten Daten wie das gehen abzufragen.

Und wenn die Daten angezeigt werden, es ist da draußen auf der Maschine, so dass jedes Allzweckcomputergerät kann an diesem Punkt umgangen werden, und Sie haben den Perimeterschutz außerhalb Ihrer Anwendung, die wirklich ins Spiel kommen.

Andere Tipps

warum nicht die Festplatte verschlüsselt die Datenbanktabellen zu halten, um die Datenbankverbindungen verschlüsseln, und lassen Sie die Datenbank normal arbeiten?

[i nicht wirklich verstehen, den Kontext / contraints, die dieses Maß an Paranoia erfordern]

EDIT: "Gesetz Einschränkungen" eh? Ich hoffe, dass Sie in etwas nicht involviert sind illegal, ich würde es hassen, ein versehentliches Zubehör sein ...; -)

, wenn die - ahem - rechtliche Beschränkungen - diese Lösung erzwingen, dann ist das alles, was es zu tun -. Keine wie Streichhölzer und langsame Reaktion, wenn die Client-Maschinen nicht verarbeiten können

Vor ein paar Monaten kam ich auf das gleiche Problem:. Die gesamte Datenbank (mit Ausnahme von Indizes) verschlüsselt und das Problem auf teilweise Übereinstimmungen angehoben

suchte ich im Internet nach einer Lösung suchen, aber es scheint, dass es nicht viel, um dies zu tun, aber eine „Abhilfe“.

Die Lösung, die ich schließlich angenommen habe, ist:

  1. Erstellen Sie eine temporäre Tabelle mit den Daten des Feldes für das die Abfrage durchgeführt wird, entschlüsselt und ein anderes Feld, das der Primärschlüssel der Tabelle ist (natürlich, dieses Feld muss nicht entschlüsselt werden wie Klartext).

  2. Führen Sie die teilweise Übereinstimmung agains dass temporäre Tabelle und rufen Sie die Kennungen.

  3. Abfrage der realen Tabelle für die Kennungen und das Ergebnis zurück.

  4. Löschen Sie die temporäre Tabelle.

Ich bin mir bewusst, dass dies eine nicht-triviale Kopf annimmt, aber ich habe nicht einen anderen Weg diese Aufgabe gefunden, wenn es zwingend notwendig ist, dass die Datenbank vollständig verschlüsselt ist.

auf jedem einzelnen Fall abhängig, können Sie möglicherweise die Anzahl der Zeilen filtern, die in die temporäre Tabelle eingefügt werden, ohne die Daten für das Ergebnis zu verlieren (nur die Zeilen betrachten, die dem Benutzer gehören, der die Abfrage ausführt, usw. ..).

Sie möchten Verwendung md5 Hashing tun. Im Grunde ist es braucht, um Ihren String und verwandelt es in einen Hash, der nicht wiedergegeben werden kann. Sie können es dann später gegen Dinge zu validieren verwenden. Zum Beispiel:

$salt = "123-=asd";
$address = "3412 g ave";

$sql = "INSERT INTO addresses (address) VALUES ('" . md5($salt . $address) . "')";
mysql_query($sql);

Dann eine Adresse in der Zukunft zu überprüfen:

$salt = "123-=asd";
$address = "3412 g ave";

$sql = "SELECT address FROM addresses WHERE address = '" . md5($salt . $address) . "'";
$res = mysql_query($sql);
if (mysql_fetch_row($res))
    // exists
else
    // does not

Jetzt ist es auf der Seite Datenbank verschlüsselt, damit niemand es herausfinden können - auch wenn sie in Ihrem Quellcode aussieht. Um jedoch das Salz zu finden, wird ihnen helfen, es aber zu entschlüsseln.

http://en.wikipedia.org/wiki/MD5

Wenn Sie sensible Daten speichern müssen, die Sie abfragen mögen, später würde ich empfehlen, es im Klartext zu speichern, so viel zu diesen Tabellen Zugang zu beschränken, wie Sie können.

Wenn Sie das nicht tun können, und Sie wollen nicht, Overhead im Frontend Sie eine Komponente im Backend machen, in einem Server ausgeführt wird, dass die Prozesse, die verschlüsselten Daten.

Herstellung querys auf verschlüsselte Daten? Wenn Sie einen guten Verschlüsselungsalgorithmus verwenden kann ich mir nicht vorstellen, wie das zu tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top