2009-05-22 9 views
1

Ich habe eine Desktop-Anwendung, die Daten aus einer Datenbank lesen muss, beide auf dem Client-Computer installiert.Datenbankverschlüsselung

Diese Daten in der Datenbank müssen verschlüsselt werden, um den Clientzugriff zu verweigern und Daten zu schützen.

Ich muss wissen, welche Art von Datenbank zu verwenden, die Verschlüsselung unterstützt, weil die Menge der Daten in einigen Tabellen sehr groß sein wird, werde ich auch Effizienz benötigen.

Ich lese etwas darüber im Web und vielleicht SQL Server Compact Edition wird eine gute Wahl sein.

Kann mir jemand mit diesem Punkt helfen?

Dank

Antwort

1

SQLite hat eine Encryption Extension (SEE), die eine Anwendung verschlüsselte Datenbank-Dateien lesen und schreiben kann: http://www.hwaci.com/sw/sqlite/see.html

Diese DB eine gute Passform für eine Desktop-Anwendung sein kann, und ist weit verbreitet . Zum Beispiel glaube ich, FireFox verwendet es intern.

+0

Das klingt interessant. Wissen Sie, ob es die Verschlüsselung/Entschlüsselung auf Seitenebene unterstützt, oder hat es den Nachteil, dass Sie die gesamte Datei auf einmal entschlüsseln müssen? –

2

SQL Server 2008 enthält eine Funktion namens Transparent Data Encryption, die genau das tut, was Sie brauchen. Ich weiß nicht, ob die Compact Edition diese Funktion enthält. Ein wenig googeln mit diesen Keywords sollte Ihnen den Einstieg erleichtern. Ich befürworte normalerweise nicht die Verwendung von SQL Server, aber in diesem Fall sind mir keine ähnlichen Funktionen von anderen DB-Anbietern bekannt (aber sie müssen existieren ...).

Wie gesagt, was erhoffen Sie sich von der Verschlüsselung der Daten? Wenn dies vollständig clientseitig ist, wird der Client den Schlüssel zum Entschlüsseln der Daten haben. Im besten Fall machen Sie eine kleine Hürde für Leute, die sich mit Ihren Datenbankinhalten befassen. Es wird durch keine sinnvolle Definition sicher sein.

1

SQL Server CE unterstützt keinerlei Verschlüsselung. Sie können die Datenbankdatei bestenfalls mit den Verschlüsselungseinrichtungen des Host-Betriebssystems verschlüsseln. Die Verschlüsselung auf Dateiebene funktioniert nicht für Datenbanken, da zum Lesen von Seite X in der Datei alle Seiten 1 ... X-1 entschlüsselt werden müssen, um den Verschlüsselungsschlüssel in den geeigneten Zustand zu bringen (Erreichen des richtigen CBC-Blockzustands). BitLocker auf der anderen Seite funktioniert gut, da es Seiten in der Datei einzeln entschlüsseln/verschlüsseln kann. Aber BitLocker ist eine Option auf Partitionsebene, nicht auf Dateiebene. Diese allgemeinen Überlegungen gelten für jeden Plan zur Verschlüsselung der gesamten Datenbankdatei, unabhängig vom betroffenen Produkt (SQL CE, SQL Express, MySQL, Access, alles).

SQL Server verfügt über Verschlüsselung auf Datenbankebene. Am einfachsten zu verwenden ist TDE, Transparent Data Encryption, aber dies erfordert Enterprise Edition. Die andere Option besteht darin, die kryptografischen Funktionen und manage the encryption yourself zu verwenden. Kaum bedienbar, aber in der kostenlosen Express Edition erhältlich.

+1

BTW jedes Verschlüsselungsschema der Datenbank wird wieder unbefugten Zugriff durch einen anderen Benutzer schützen. Es kann nicht vor dem legitimen Benutzer schützen, der auf die Daten von einer anderen Anwendung zugreift. Um die Daten davor zu schützen, von außerhalb Ihrer eigenen Anwendung zugegriffen zu werden, ist DRM, und Sie müssen DRM-Infrastruktur dafür verwenden. Eine Datenbank hat nach meinem Wissen noch keine DRM-Unterstützung. –

2

Sie können nicht verhindern, dass ein bestimmter Angreifer auf den Entschlüsselungsschlüssel zugreift und auf die Datenbank zugreift. Dies ist effektiv ein Kopierschutzschema, und sie sind alle gebrochen.


Update: Die Frage lautet: "Die Daten in der Datenbank verschlüsselt werden müssen, Client den Zugriff verweigern, und Daten schützen" Wenn der Client Zugriff auf eine Anwendung hat, die auf die Datenbank zugreifen kann, hat er Zugriff auf den von der Anwendung verwendeten Schlüssel und kann die Anwendung für den direkten Zugriff auf die Datenbank umgehen.

Wenn die unausweichliche Logik keinen Reiz hat, betrachten Sie die anekdotischen Beweise für fehlgeschlagene Kopierschutzprogramme, die versucht haben, Musik, Spiele und andere digitale Assets zu schützen.

0

Darf ich SQLCipher empfehlen? Es ist eine freie und Open-Source-Implementierung von SQLite, die transparente Verschlüsselung auf Seitenebene unterstützt. Es ist ähnlich wie SEE, es ist in aktiver Entwicklung und hat experimentelle Unterstützung für eine Reihe von verschiedenen Verschlüsselungen, da es OpenSSL für einige seiner Implementierungen verwendet. Vollständige Offenlegung: Ich bin einer der Entwickler! Wir haben a tutorial on using it in iPhone applications, die Ihnen eine grundlegende Vorstellung davon geben, wie es funktioniert, und es gibt einen Kommentarthread, der einige verwandte Themen erweitert. Offensichtlich ist die Verwendung in Visual Studio ein bisschen anders als XCode, aber Sie sollten in der Lage sein, die Verknüpfung zu verknüpfen und in einer Windows-Umgebung zum Laufen zu bringen.