Tragbare Datenbank für Geheimnisse Speicherung
-
23-08-2019 - |
Frage
Ich entwickle eine Anwendung, die Speicherung Geheimnisse in einer Datenbank benötigt.
Ich brauche eine portable Datenbank (zB Firebird, SQLite, usw.), wo die Daten verschlüsselt gespeichert oder passwortgeschützt oder beides ...
Lassen Sie uns nehmen als Beispiel , dass ich erstellen möchten ein Passwort-Manager. Ich muss speichern, dass Passwörter in einer Datenbank. Ich bin daran gewöhnt, einbetten Firebird zu verwenden, aber nicht für geheime Daten.
Eine andere Lösung ist die Datenbank natürlich zu verwenden und die Datenbank-Datei verschlüsseln, wenn ich eine Datei nicht verbunden, aber ich bin der Sicherheit oder Performance-Auswirkungen nicht sicher.
Was ist die beste Methode, die Sie empfehlen?
Lösung
Es gibt ein Projekt SQLite-crypt genannt. Welche sollte die beste Wahl sein. sqlite db mit allen Daten auf der Festplatte verschlüsselt.
Andere Tipps
Sie können auch einen Blick auf SQL Server Compact Edition haben, die nur eine DLL erfordert und die Daten in einer einzigen Datei speichern, wie SQLite oder Access, Firebird, etc.
Es hat auch Verschlüsselungsfunktionen eingebaut.
Einige Referenzen:
- Sicherheit und Verschlüsselung für SQL Server Compact
- Tutorials zur Verwendung von SQL Server Compact Edition (zweiten und dritten Abschnitt unten auf der Seite) .
Passwort-Verschlüsselung
Sehen Sie meine Antwort auf Ihre SO .
ich mit CJM zustimmen, aber wenn Sie Ihre eigenen auf das Schreiben dead-Set sind, sollten Sie den Strom an Schreibzeit und entschlüsseln es bei Lesezeit verschlüsseln. Alle veröffentlichten Algorithmus, der etwas stark ist sollte die Dinge sicher.
Realbasic integrierte Unterstützung für mit verschlüsselten SQLite-Datenbanken arbeiten gut für mich auf ein paar Projekte gearbeitet hat.
Ich empfehle Ihnen, überprüfen SQLCipher (Full Disclosure, ich bin einer von die Entwickler!) Es ist eine freie und Open-Source-Implementierung von transparenter, Seite-Level-Verschlüsselung für SQLite. Die Implementierung ist ziemlich robust, es ist unter dem aktiven Entwicklung, und es ist sehr einfach zu bedienen (relativ gesehen).
Ich schließe ich den Vorschlag KeePass zu verwenden. Es ist ein großer Speicher für sensible Daten und macht eine ziemlich gute API. Hier ist ein Beispiel dafür, wie eine Standard-Keypass 2-Datenbank zu lesen:
var dbpath = @"C:\path\to\passwords.kdbx";
var masterpw = "Your$uper$tr0ngMst3rP@ssw0rd";
var ioConnInfo = new IOConnectionInfo { Path = dbpath };
var compKey = new CompositeKey();
compKey.AddUserKey(new KcpPassword(masterpw));
var db = new KeePassLib.PwDatabase();
db.Open(ioConnInfo, compKey, null);
var kpdata = from entry in db.RootGroup.GetEntries(true)
select new
{
Group = entry.ParentGroup.Name,
Title = entry.Strings.ReadSafe("Title"),
Username = entry.Strings.ReadSafe("UserName"),
Password = entry.Strings.ReadSafe("Password"),
URL = entry.Strings.ReadSafe("URL"),
Notes = entry.Strings.ReadSafe("Notes")
};
db.Close();