Безопасное использование зашифрованного файла
Я пишу приложение с файлом базы данных dBASE в Borland Delphi 7.
Примечание: я думаю, что этот вопрос связан с безопасностью файлов, и вы можете забыть о dBASE (рассматривайте его как файл TXT) в этом вопросе.
База данных должна быть доступна только приложением. Тогда это должно быть зашифровано. К сожалению, dBASE не поддерживает какой-либо механизм паролей, и мне пришлось самому шифровать файл (и я также ДОЛЖЕН использовать dBASE)
Какой подход вы предлагаете для защиты файла базы данных?
Самый простой:
- Шифрование файла базы данных и размещение его рядом с EXE-файлом приложения.
- Когда приложение запускается, оно должно расшифровать файл (с жестко заданным паролем) и скопировать результат во временный файл, который имеет
DeleteOnClose
а такжеNoSharingPermission
флаги. - При закрытии приложение должно зашифровать временный файл dBASE и заменить старый зашифрованный файл новым.
Я думаю, что это достаточно безопасный подход. Но у него есть две большие проблемы:
- С помощью инструмента восстановления пользователь может восстановить и получить доступ к удаленному временному файлу.
- Хуже того: при запуске приложения, если система внезапно перезагружается,
DeleteOnClose
флаг не установлен, и временный файл остается на жестком диске, и пользователь может получить к нему доступ.
Есть ли решение, по крайней мере, для второй части?
Есть ли другое решение?
2 ответа
Вы также можете попытаться создать файловый контейнер TrueCrypt, смонтировать его, а затем поместить файл dBase в смонтированный зашифрованный том. TrueCrypt бесплатен (в обоих смыслах) и доступен через параметры командной строки из вашего приложения (монтировать перед запуском, демонтировать перед завершением).
В зависимости от того, что вы делаете с базой данных, вы можете просто расшифровать записи, которые вам действительно нужны. Например, вы можете построить индексы на основе хеш-кодов (а не реальных данных); это уменьшит количество обращений в базу данных к меньшему набору данных. Каждая запись в подмножестве должна быть расшифрована, но это может быть намного лучше, чем расшифровка всей базы данных.