Портативная база данных для хранения секретов - PullRequest
4 голосов
/ 17 февраля 2009

Я занимаюсь разработкой приложения, которому нужно хранить секреты в базе данных.

Мне нужна портативная база данных (например, Firebird, Sqlite и т. Д.), Где данные будут храниться в зашифрованном виде или защищены паролем, или оба ...

Давайте возьмем в качестве примера , который я хочу создать менеджер паролей. Мне нужно будет сохранить эти пароли в базе данных. Я привык использовать Embed Firebird, но не для секретных данных.

Другим решением является естественное использование базы данных и шифрование файла базы данных, когда я не подключен к файлу, но я не уверен в последствиях для безопасности или производительности.

Какой лучший метод вы рекомендуете?

Ответы [ 7 ]

6 голосов
/ 17 февраля 2009

Вы также можете взглянуть на выпуск SQL Server Compact, который требует только DLL и будет хранить данные в одном файле, как SQLite или Access, Firebird и т. Д.

Он также имеет встроенные возможности шифрования.

Некоторые ссылки:

Шифрование пароля

Смотрите мой ответ на ваш другой вопрос о SO .

5 голосов
/ 17 февраля 2009

Существует проект под названием sqlite-crypt . Какой должен быть ваш лучший выбор. sqlite db со всеми данными на диске в зашифрованном виде.

3 голосов
/ 29 июня 2009

Я настоятельно рекомендую вам проверить SQLCipher (полное раскрытие, я один из разработчиков!) Это бесплатная и открытая реализация прозрачного шифрования на уровне страниц для SQLite. Реализация довольно надежная, она находится в активной разработке и очень проста в использовании (условно говоря).

3 голосов
/ 17 февраля 2009

Встроенная поддержка REALbasic для работы с зашифрованными базами данных SQLite хорошо работает для меня в нескольких проектах.

3 голосов
/ 17 февраля 2009

Я согласен с CJM, но если вы не можете писать самостоятельно, вы должны зашифровать поток во время записи и расшифровать его во время чтения. Любой опубликованный алгоритм, который несколько силен, должен обеспечивать безопасность.

3 голосов
/ 17 февраля 2009

Честно? Используйте TrueCrypt или KeePass .

0 голосов
/ 27 января 2012

Я второе предложение использовать 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();
...