Портативная база данных для хранения секретов
-
23-08-2019 - |
Вопрос
Я разрабатываю приложение, которому необходимо хранить секреты в базе данных.
Мне нужна переносимая база данных (например, Firebird, Sqlite и т. д.), где данные будут храниться в зашифрованном виде или защищены паролем, или и то, и другое...
Давайте как пример что я хочу создать менеджер паролей. Мне нужно будет сохранить эти пароли в базе данных.Я привык использовать Embed Firebird, но не для секретных данных.
Другое решение — использовать базу данных естественным образом и шифровать файл базы данных, когда я не подключен к файлу, но я не уверен в последствиях для безопасности или производительности.
Какой лучший метод вы рекомендуете?
Решение
Есть проект под названием sqlite-крипта.Что должно быть вашим лучшим выбором.sqlite db со всеми зашифрованными данными на диске.
Другие советы
Вы также можете взглянуть на версию SQL Server Compact, для которой требуется только DLL и которая будет хранить данные в одном файле, как SQLite или Access, Firebird и т. д.
Он также имеет встроенные возможности шифрования.
Некоторые ссылки:
- Безопасность и шифрование для SQL Server Compact
- Учебные пособия по использованию SQL Server Compact Edition (второй и третий разделы внизу страницы).
Шифрование пароля
Смотри мой ответ на твой другой вопрос, т.к..
Я согласен с CJM, но если вы решительно настроены писать свои собственные, вам следует зашифровать поток во время записи и расшифровать его во время чтения.Любой опубликованный и достаточно надежный алгоритм должен обеспечивать безопасность.
Встроенная поддержка REALbasic для работы с зашифрованными базами данных SQLite хорошо сработала для меня в нескольких проектах.
Я настоятельно рекомендую вам проверить SQLCipher (полная информация, я один из разработчиков!) Это бесплатная реализация прозрачного шифрования на уровне страниц для SQLite с открытым исходным кодом.Реализация достаточно надежна, находится в активной разработке и очень проста в использовании (условно говоря).
Я поддерживаю предложение использовать KeePass.Это отличное хранилище конфиденциальных данных, предоставляющее довольно хороший API.Вот пример чтения стандартной базы данных Keypass 2:
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();