Демонстрация шифрования в Firebird

Инструкция по использованию демонстрационной версии плагина шифрования Firebird Encryption Plugin Framework от IBSurgeon

В этом кратком руководстве находится описание тестирования демонстрационной версии IBSurgeon Firebird Encryption Plugin для шифрования ваших баз данных на сервере, и подключения к зашифрованным БД с клиента. Ограничение - демонстрационный пакет работает до 1 апреля 2017 г.

Исходные требования

  1. СУБД Firebird 3.0.1 – используйте официальный релиз 3.0.1, 64 бит (билд 32609). Либо загрузите готовый архив с 3.0.1 и плагином.
  2. В случае новой установки Firebird создайте пользователя SYSDBA (остановите Firebird, выполните «gsec -user sysdba -add SYSDBA -pw masterkey», запустите Firebird)
  3. Загрузите архив с файлами демонстрационной версии плагина и клиентского приложения

Шаг 1 – подготовка к шифрованию БД

У вас должна быть база данных, которую вы планируете зашифровать (в качестве такой БД можно использовать /examples/empbuild/employee.fdb.
Поместите базу в какой-нибудь каталог, например example c:\db\employee.fdb
  1. Создайте алиас в databases.conf
crypt = c:\db\employee.fdb
{
   KeyHolderPlugin = KeyHolder
}
  1. Поместите загруженные файлы в папку сервера plugins
    1. DbCrypt.dll
    2. KeyHolder.dll
    3. KeyHolder.conf  - этот файл содержит ключи, предназначенные только для тестирования. Не предоставляйте их конечным пользователям, и не используйте для вашего готового решения.
  2. Поместите следующие файлы openssl в корневую папку установки Firebird
    1. libeay32.dll – этот файл имеет разрядность 64бит, не смотря на то что содержит в своем наименовании число 32.
    2. ucrtbased.dll
    3. vcruntime140d.dll
  3. Запустите Firebird

Шаг 2 – шифрование БД

Подсоединитесь к БД при помощи isql и зашифруйте ее
isql localhost:crypt -user SYSDBA -pass masterkey
SQL>alter database encrypt with dbcrypt key red;
С этого момента БД будет зашифрована (на самом деле шифрование может занять некоторое время, если БД имеет размер гигабайт и более) используя серверную аутентификацию: ключи находятся в файле KeyHolder.conf.
Проверку статуса шифрования можно выполнить в isql командой show database. В конце выводимой информации вы увидите строку «Database encrypted». Если шифрование еще не завершилось, то вы увидите сообщение
Database encrypted, crypt thread not complete
Также можно проверить статус шифрования при помощи gstat, командой
gstat –h crypt
которая выдаст обычную информацию о заголовке БД, и в том числе
   Attributes              encrypted, plugin DBCRYPT
    Variable header data:
        Encoded option 5, length 28
        Key hash:       ask88tfWbinvC6b1JvS9Mfuh47c=
        Encryption key name:    RED
        *END*

Если база данных большая (десятки гигабайт и более), проверить статус шифрования (или дешифрования) можно запросом
select mon$crypt_page * 100.0 / mon$pages as Percent from mon$database
результатом запроса будет % зашифрованных (или дешифрованных) страниц в БД. Не забывайте, что для обновления данных из mon$ следует сделать commit перед повторным выполнением этого запроса.

Шаг 3 – проверка переноса зашифрованной БД на другой компьютер

Можно попробовать перенести БД на компьютер с отдельной установкой Firebird 3 (без плагина шифрования, но проще попробовать удалить или переименовать скопированные ранее файлы.
Останавливаем Firebird, переименовываем keyholder.conf, запускаем Firebird
Подсоединяемся при помощи isql. Будет выдана ошибка
D:\Firebird364>isql localhost:crypt -user SYSDBA -password masterkey
Statement failed, SQLSTATE = 08004
Key not set
-IProvider::attachDatabase failed when loading mapping cache
Use CONNECT or CREATE DATABASE to specify a database
SQL>

Любая другая программа выдаст такое же сообщение
Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements.
Key not set.
IProvider::attachDatabase failed when loading mapping cache.

Если удалить dbcrypt.dll, то сообщение будет несколько иным
Invalid token.
Crypt plugin DBCRYPT failed to load.
IProvider::attachDatabase failed when loading mapping cache.

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

Шаг 4 – подключение к БД из приложения с ключом

Если вы удалили (или переименовали) файл dbcrypt.dll, восстановите его. Файл keyholder.conf восстанавливать не нужно.
После шифрования БД предполагаем, что база будет скопирована в клиентскую среду, в которой доступ к БД будет осуществляться только при помощи какого-либо специального приложения. 
Приложение должно получить точно такой же ключ. Мы подготовили для вас пример приложения на Delphi XE8 , с тем же файлом keyholder.conf. Поместите файлы приложения в отдельную папку на этом же компьютере, где есть работающий Firebird 3 (с плагином dbcrypt.dll и без keyholder.conf)
Запустите приложение, нажмите кнопку. Вы увидите результат выполнения оператора SQL после подсоединения к БД. Никакой другой специфики от приложения для работы с базой не требуется.
В приведенном примере ключ передается из приложения на сервер. В этом случае только данное приложение может подсоединиться к БД. Любое другое приложение получит сообщение об ошибке (пример сообщений приведен выше).

Мини-FAQ

Вопрос: что будет, если попытаться дешифровать БД сразу после запуска шифрования (пока оно не завершилось)?
Ответ: Статус шифрования или дешифрования сохраняется в БД, поэтому пока шифрование или дешифрование не закончилось, повторный запуск той же (или противоположной) операции выдаст сообщение об ошибке и текущий статус шифрования/дешифрования.

Вопрос: что если Firebird терминировать (перегрузить сервер) в процессе шифрования/дешифрования?
Ответ: после подсоединения к БД процесс продолжится.

Подпишитесь на новости Firebird в России

Подписаться