Демо шифрування Firebird
Як зашифрувати базу даних Firebird за допомогою плагіна IBSurgeon: встановлення на сервері, підключення з застосунку, використання інструментів розробника та виконання зашифрованого резервного копіювання/відновлення. Повний продукт: Encryption Framework.
Сценарії встановлення за 1 крок
Windows: запустіть інсталятор з GitHub - English · Português.
Linux: використовуйте стандартний інсталятор Firebird з IBSurgeon/firebirdlinuxinstall з параметром -crypt-only.
Передумови для ручного встановлення
- Firebird 3.0.3 або вище (3.x, 4.x, 5.x). Старіші версії не підтримуються цим демо.
- Пробні архіви плагіна та приклади Delphi/Lazarus/.NET/PHP (нижче).
- Пробний DbCrypt.conf у
plugins. - Користувач SYSDBA. Якщо відсутній: зупиніть Firebird, виконайте
isql -user sysdba employee.fdb, виконайтеCREATE USER SYSDBA PASSWORD 'masterkey';, запустіть службу.
У посібнику використовується 64-бітний Firebird. Для 32-бітного беріть файли з відповідного архіву WINDOWS_32bit (або Linux 32-bit).
Завантаження
ExampleApplications.zip - скомпільований демо-клієнт та вихідні коди. DbCrypt.conf - пробний ключ.
Крок 1 - Початкове шифрування (приклад для Windows)
Розмістіть незашифровану базу даних у зручному місці, наприклад C:\Temp\EMPLOYEE30\EMPLOYEE30.FDB.
1. Псевдонім у databases.conf
crypt = C:\Temp\EMPLOYEE30\EMPLOYEE30.FDB
{
KeyHolderPlugin = KeyHolder
}
Щоб застосувати власника ключів до кожної бази даних, додайте KeyHolderPlugin = KeyHolder у firebird.conf або скопіюйте зразок firebird.conf з архіву (крок 3).
2. Файли у server/plugins
З FB_NN_WINDOWS_64bit\Server\plugins:
DbCrypt.dllDbCrypt.conf(пробний ключ)KeyHolder.dllKeyHolder.conf- текстовий файл з ключами лише для розробки. Не передавайте його кінцевим користувачам.
3. Файли в корінь Firebird
З FB_NN_WINDOWS_64bit\Server: fbcrypt.dll, libcrypto-1_1-x64.dll, libssl-1_1-x64.dll, gbak.exe, firebird.msg та за бажанням firebird.conf.
4. Шифрування за допомогою isql
isql localhost:C:\Temp\EMPLOYEE30\EMPLOYEE30.FDB -user SYSDBA -pass masterkey
SQL> alter database encrypt with dbcrypt key red;
SQL> show database;
show database; (або gstat -h) має показати Database encrypted.
dbcrypt - це назва плагіна; red - ключ, визначений у KeyHolder.conf. На Linux беріть назви в лапки та враховуйте регістр:
alter database encrypt with "DbCrypt" key Red;
Після цього кроку сервер зберігає ключі у KeyHolder.conf (режим розробки / адміністрування).
Що знаходиться на сервері, а що на клієнті
| Сервер | Клієнт |
|---|---|
plugins/dbcrypt.dll, plugins/keyholder.dll, DbCrypt.conflibssl-1_1-x64.dll, libcrypto-1_1-x64.dll, fbcrypt.dllЗашифрований gbak: gbak.exe, firebird.msgЗа бажанням: plugins/KeyHolder.conf (ключі розробки), firebird.conf
|
fbclient.dll, fbcrypt.dll, libcrypto-1_1.dllЗа бажанням: firebird.conf
|
Крок 2 - Підключення з клієнтського застосунку
Щоб імітувати сайт клієнта, перейменуйте або видаліть plugins/KeyHolder.conf. Тоді плагін очікуватиме ключ від застосунку. ExampleApplications.zip містить скомпільований клієнт Delphi XE8, а також зразки Lazarus, .NET та PHP.
Перед звичайним підключенням застосунок надсилає ключ (кілька додаткових викликів). Після цього використання Firebird не змінюється. Демонстраційний приклад Delphi знаходиться у Example_Delphi_EnhancedCryptTestClient\Win32\Debug:
- Вкажіть шлях до бази даних або аліас у розділі «1. Setup Login».
- Введіть назву ключа та його значення (для ключа RED скопіюйте значення з
KeyHolder.conf). - Ви можете шифрувати/дешифрувати цим ключем - шифрування потребує активного з'єднання та займає час.
- Натисніть Execute query, щоб виконати простий SELECT через зашифроване з'єднання.
Демонстраційний приклад підключається лише через TCP/IP - XNET не підтримується. Приклад робить кроки підключення, транзакції та запиту явними, щоб ви могли скопіювати цей шаблон.
Крок 3 - Інструменти розробника та командний рядок
Починаючи з Encryption Framework v2021, fbclient.dll може завантажувати ключі самостійно. IBExpert, FlameRobin, SQLLY, Database Workbench, RedExpert, gfix, nbackup та подібні інструменти тоді працюють без змін у коді.
Зіставте розрядність клієнта:
- Інструменти командного рядка Firebird (
isql,gfix,nbackup) відповідають серверу - скопіюйтеWindows_64bit\WindowsClientPart_64bitпоруч із цими виконуваними файлами. - Більшість графічних інструментів є 32-бітними - скопіюйте
Windows_32bit\WindowsClientPart_32bitу папку інструмента.
Інструменти командного рядка тоді використовують plugins\KeyHolder.conf поруч із цією копією fbclient. Інші застосунки все ще передають ключ самостійно.
- Інструмент запускається та завантажує
fbclient.dll. fbclientчитаєfirebird.conf, бачитьKeyHolderPlugin=KeyHolderі завантажуєplugins\keyholder.dll.- KeyHolder читає
KeyHolder.conf(наприклад, ключ Red). isqlпідключається та може виконатиSHOW DATABASE.
gbak: завантаження ключа на стороні клієнта створює незашифрований .fbk. Використовуйте gbak із фреймворку з явними параметрами -KEYFILE / -KEYNAME / -KEY, щоб резервна копія залишалася зашифрованою.
nbackup: інкрементальні копії залишаються зашифрованими.
Крок 4 - Резервне копіювання та відновлення
Стандартний gbak не може відкрити робочу зашифровану базу даних (немає ключів на сервері, немає ключа від клієнта). Фреймворк постачає gbak, який шифрує резервну копію тим самим ключем, що й базу даних. gbak -? додає:
-KEYFILE назва файлу з ключем(ами) шифрування БД та резервної копії
-KEYNAME назва ключа, який буде використано для шифрування
-KEY значення ключа у форматі "0x5A,"
Резервне копіювання
Надайте ключ, щоб gbak міг прочитати базу даних і зашифрувати .fbk - або файл ключа (така сама структура, як у KeyHolder.conf), або явне значення. Резервне копіювання незашифрованої бази даних із цими параметрами все одно створює зашифровану резервну копію.
gbak.exe -b -KEYFILE h:\Firebird\examplekeyfile.txt -KEYNAME RED localhost:h:\employee_30.fdb h:\testenc4.fbk -user SYSDBA -pass masterkey
gbak -b -KEY 0xec,0xa1,0x52,0xf6,0x4d,0x27,0xda,0x93,0x53,0xe5,0x48,0x86,0xb9,0x7d,0xe2,0x8f,0x3b,0xfa,0xb7,0x91,0x22,0x5b,0x59,0x15,0x82,0x35,0xf5,0x30,0x1f,0x04,0xdc,0x75, -keyname RED localhost:h:\employee30\employee30.fdb h:\testenc303.fbk -user SYSDBA -pass masterkey
З -KEY ви все одно повинні передати -KEYNAME.
Відновлення
Та сама ідея: файл ключа або явний ключ. Відновлення незашифрованої резервної копії з цими параметрами створює зашифровану базу даних.
gbak -c -v -keyfile h:\Firebird\examplekeyfile.txt -keyname white h:\testenc4.fbk localhost:h:\employeeenc4.fdb -user SYSDBA -pass masterkey
gbak -c -v -key 0xec,0xa1,0x52,0xf6,0x4d,0x27,0xda,0x93,0x53,0xe5,0x48,0x86,0xb9,0x7d,0xe2,0x8f,0x3b,0xfa,0xb7,0x91,0x22,0x5b,0x59,0x15,0x82,0x35,0xf5,0x30,0x1f,0x04,0xdc,0x75, -keyname RED h:\testenc4.fbk localhost:h:\employeeenc4.fdb -user SYSDBA -pass masterkey