2008-09-29 3 views
7

Ich habe eine ASP.NET 2.0-Website, die mit einer SQL Server 2005-Datenbank verbunden ist. Die Website ist ziemlich einfach und speichert Informationen über Mitarbeiter, einschließlich Gehalt.Verschlüsseln von Gehaltswert in ASP .NET 2.0 und SQL Server 2005

Was ist der beste Weg, um den Gehaltswert zu verschlüsseln, so dass niemand (einschließlich mir selbst) jemals sehen kann, was es ist, außer für die autorisierten Mitarbeiter mit der Web-App?

Ich möchte nicht auf dem SQL Server verschlüsseln/entschlüsseln, weil ich nur SQL Profiler ausführen konnte, um die Informationen anzuzeigen, also nehme ich an, dass das Verschlüsseln/Entschlüsseln in der BLL auf dem Webserver geschieht?

Benötige ich auch SSL, um zu verhindern, dass jemand HTTP-Antworten zwischen dem Browser und dem Webserver schnüffelt?

Vielen Dank!

Anthony

Antwort

4

SSL ist wahrscheinlich die beste Wahl, jemanden zu halten von Schnupfen, aber bewusst sein, dass es noch möglich ist.

Für das andere Bit unterstützt SQL Server 2005 die Verschlüsselung auf Tabellenebene. Here's an article on it. Sie können eine SALARY-Tabelle erstellen, die mit einem Mitarbeiter verknüpft ist, und diese Tabelle verschlüsselt halten.

2

Es gibt viele Verschlüsselungsmethoden, die Sie hier in Ihrem Code verwenden könnten. Stellen Sie sicher, dass Sie eine auswählen, die einen Schlüssel und ein "Salz" (statt nur die gleiche Taste jedes Mal verwenden). Wenn Sie bei jedem Verschlüsseln eines Gehalts denselben Schlüssel (ohne Salz) verwenden, zeigen zwei Mitarbeiter mit demselben Gehalt denselben verschlüsselten Wert in der Datenbank an, wodurch die Sicherheit der Gehaltsinformationen beeinträchtigt wird.

Sie könnten die eindeutige ID jedes Mitarbeiters als Salz verwenden.

+0

Die Verschlüsselungsmethode muss kein Salz nehmen ... das Salz kann einfach zu den Daten hinzugefügt werden. –

+0

auch, ein Salz, das leicht herausgefunden werden kann, ist überhaupt kein Salz. Salze helfen, einen brutalen Angriff der Regenbogen-Tabelle zu verlangsamen, aber nur ein bisschen. Bei ausreichend paralleler Stromversorgung können die meisten Verschlüsselungstechniken routinemäßig erzwungen werden, wenn jemand es möchte. – stephenbayer

+0

Es geht darum, dass es sich nicht lohnt. –

2

Sie benötigen auf jeden Fall SSL, um den sensiblen Web-Datenverkehr (ganz zu schweigen von Logins) nicht zu schnüffeln, aber das löst nicht Ihr serverseitiges Verschlüsselungsproblem.

Um es Ihnen als Entwickler unmöglich zu machen, auf die Daten zuzugreifen, ist eine harte Nuss zu knacken. Damit es wirklich funktioniert, muss die gesamte Verschlüsselung/Entschlüsselung nur auf Rechnern durchgeführt werden, auf die Sie keinen Zugriff haben. Theoretisch müssten Sie eine Art Browser-Erweiterung erstellen, die die Gehaltsdaten auf den Client-Computern entschlüsselt. Ihr Arbeitgeber müsste Ihnen genug vertrauen, um keine Hintertür in den clientseitigen Code zu stecken (oder zumindest die Möglichkeit eines Code-Audits über Ihrem Kopf zu haben).

In den meisten Fällen ist es einfacher, dem Entwickler zu vertrauen, die Daten nicht zu veröffentlichen. Es ist eine gute Idee, es auf einer Notwendigkeit zu wissen, aber letztlich müssen einige Leute wissen. (Zum Beispiel, Buchhaltung Leute sehen Gehaltsdaten die ganze Zeit.)

2

Sie möchten auf jeden Fall SSL für die Transportsicherheit verwenden. Sie können IPSec auch für den Transport zwischen dem Webserver und dem Datenbankserver einrichten.

Wie in der Datenbank zu sichern, hat SQL Server 2005 mehrere Verschlüsselungsfunktionen:

1) EncryptByAsymKey - http://msdn.microsoft.com/en-us/library/ms186950.aspx
2) EncryptByKey - http://msdn.microsoft.com/en-us/library/ms174361.aspx
3) EncryptByPassPhrase - http://msdn.microsoft.com/en-us/library/ms190357.aspx
4) EncryptByCert - http://msdn.microsoft.com/en-us/library/ms188061.aspx

Offensichtlich haben alle diese eine Entschlüsselungsfunktion.

Sie können den Schlüssel oder was auch immer Sie auf dem Webserver speichern (in der machine.config oder web.config oder irgendwo) und dann an Ihre gespeicherten Prozeduren (oder zusammen mit Ihrem sql irgendwie) für die Verschlüsselung übergeben.

3

Entwickler der Webapp konnten immer noch auf die Gehaltszahlen zugreifen - es ist alles eine Frage des Vertrauens. Um dem entgegenzuwirken, könnten Sie zu dem Modell wechseln, bei dem die Verschlüsselung/Entschlüsselung auf der Client-Seite stattfindet, aber dies ist mühsamer und immer noch nicht 100% sicher. Sicherheit ist immer ein Kompromiss mit Bequemlichkeit.

Sie sollten TLS/SSL (d. H. HTTPS) verwenden, damit das Abhören des HTTP-Verkehrs schwieriger wird.

Ein Angriff, den Sie in Erwägung ziehen, ist, Ihre eigene verschlüsselte Gehaltszahl durch die der Person zu ersetzen, an der Sie interessiert sind. Rufen Sie dann die Buchhaltungsabteilung an und fragen Sie nach Ihrer aktuellen Gehaltszahl. Eine Möglichkeit, den Angriff zu negieren, besteht darin, dass der Inhalt des verschlüsselten Gehaltsfelds auf die Person verweist, zu der es gehört.