Demo šifrování Firebird
Jak zašifrovat databázi Firebird pomocí pluginu IBSurgeon: instalace na server, připojení z aplikace, použití vývojářských nástrojů a šifrovaná záloha/obnova. Plný produkt: Encryption Framework.
Instalační skripty v 1 kroku
Windows: spusťte instalátor z GitHubu - Anglicky · Português.
Linux: použijte standardní instalátor Firebirdu z IBSurgeon/firebirdlinuxinstall s parametrem -crypt-only.
Předpoklady pro ruční instalaci
- Firebird 3.0.3 nebo vyšší (3.x, 4.x, 5.x). Starší verze nejsou tímto demem podporovány.
- Archivy zkušebních pluginů a příklady pro Delphi/Lazarus/.NET/PHP (níže).
- Zkušební DbCrypt.conf ve složce
plugins. - Uživatel SYSDBA. Pokud chybí: zastavte Firebird, spusťte
isql -user sysdba employee.fdb, proveďteCREATE USER SYSDBA PASSWORD 'masterkey';, spusťte službu.
Návod používá 64bitový Firebird. Pro 32bitovou verzi vezměte soubory z odpovídajícího archivu WINDOWS_32bit (nebo Linux 32-bit).
Stažení
ExampleApplications.zip - zkompilovaný demo klient a zdrojové kódy. DbCrypt.conf - zkušební klíč.
Krok 1 - Počáteční šifrování (příklad pro Windows)
Umístěte nešifrovanou databázi na vhodné místo, například C:\Temp\EMPLOYEE30\EMPLOYEE30.FDB.
1. Alias v databases.conf
crypt = C:\Temp\EMPLOYEE30\EMPLOYEE30.FDB
{
KeyHolderPlugin = KeyHolder
}
Chcete-li použít držitele klíčů pro všechny databáze, přidejte KeyHolderPlugin = KeyHolder do firebird.conf, nebo zkopírujte vzorový firebird.conf z archivu (krok 3).
2. Soubory do server/plugins
Z FB_NN_WINDOWS_64bit\Server\plugins:
DbCrypt.dllDbCrypt.conf(zkušební klíč)KeyHolder.dllKeyHolder.conf- textový soubor s klíči pouze pro vývoj. Nedodávejte jej koncovým uživatelům.
3. Soubory do kořenového adresáře Firebirdu
Z FB_NN_WINDOWS_64bit\Server: fbcrypt.dll, libcrypto-1_1-x64.dll, libssl-1_1-x64.dll, gbak.exe, firebird.msg a volitelně firebird.conf.
4. Šifrování pomocí 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; (nebo gstat -h) by mělo hlásit Database encrypted.
dbcrypt je název pluginu; red je klíč definovaný v KeyHolder.conf. Na Linuxu uvádějte názvy v uvozovkách a dodržujte velikost písmen:
alter database encrypt with "DbCrypt" key Red;
Po tomto kroku server uchovává klíče v KeyHolder.conf (režim vývoj / správa).
Co je na serveru vs. na klientovi
| Server | Klient |
|---|---|
plugins/dbcrypt.dll, plugins/keyholder.dll, DbCrypt.conflibssl-1_1-x64.dll, libcrypto-1_1-x64.dll, fbcrypt.dllŠifrovaný gbak: gbak.exe, firebird.msgVolitelně: plugins/KeyHolder.conf (vývojové klíče), firebird.conf
|
fbclient.dll, fbcrypt.dll, libcrypto-1_1.dllVolitelně: firebird.conf
|
Krok 2 - Připojení z klientské aplikace
Chcete-li simulovat prostředí zákazníka, přejmenujte nebo odstraňte plugins/KeyHolder.conf. Plugin pak očekává klíč od aplikace. ExampleApplications.zip obsahuje zkompilovaného klienta Delphi XE8 a vzorky pro Lazarus, .NET a PHP.
Před běžným připojením aplikace odešle klíč (několik dalších volání). Poté se použití Firebirdu nemění. Delphi demo je v Example_Delphi_EnhancedCryptTestClient\Win32\Debug:
- Nastavte cestu k databázi nebo alias v části „1. Setup Login“.
- Zadejte název klíče a hodnotu (pro klíč RED zkopírujte hodnotu z
KeyHolder.conf). - Můžete šifrovat/dešifrovat tímto klíčem - šifrování vyžaduje aktivní připojení a trvá určitou dobu.
- Klikněte na Execute query pro spuštění jednoduchého SELECT přes šifrované připojení.
Demo se připojuje pouze přes TCP/IP - XNET není podporováno. Vzorek ponechává kroky připojení, transakce a dotazu explicitní, abyste mohli vzor zkopírovat.
Krok 3 - Vývojářské nástroje a příkazový řádek
Od verze Encryption Framework v2021 může fbclient.dll načítat klíče sám. IBExpert, FlameRobin, SQLLY, Database Workbench, RedExpert, gfix, nbackup a podobné nástroje pak fungují bez změn kódu.
Přizpůsobte bitovou verzi klienta:
- Nástroje příkazového řádku Firebirdu (
isql,gfix,nbackup) odpovídají serveru - zkopírujteWindows_64bit\WindowsClientPart_64bitvedle těchto binárek. - Většina GUI nástrojů je 32bitová - zkopírujte
Windows_32bit\WindowsClientPart_32bitdo složky nástroje.
Nástroje příkazového řádku pak používají plugins\KeyHolder.conf vedle této kopie fbclient. Ostatní aplikace stále předávají klíč samy.
- Nástroj se spustí a načte
fbclient.dll. fbclientpřečtefirebird.conf, uvidíKeyHolderPlugin=KeyHoldera načteplugins\keyholder.dll.- KeyHolder přečte
KeyHolder.conf(např. klíč Red). isqlse připojí a může provéstSHOW DATABASE.
gbak: načtení klíče na straně klienta vytvoří nešifrovaný soubor .fbk. Použijte gbak z frameworku s explicitními parametry -KEYFILE / -KEYNAME / -KEY, aby záloha zůstala šifrovaná.
nbackup: inkrementální kopie zůstávají šifrované.
Krok 4 - Zálohování a obnova
Standardní gbak nemůže otevřít produkční šifrovanou databázi (žádné klíče na serveru, žádný klíč od klienta). Framework obsahuje gbak, který šifruje zálohu stejným klíčem jako databázi. gbak -? přidává:
-KEYFILE název souboru s klíči pro šifrování databáze a zálohy
-KEYNAME název klíče, který se má použít pro šifrování
-KEY hodnota klíče v zápisu "0x5A,"
Zálohování
Zadejte klíč, aby gbak mohl přečíst databázi a zašifrovat .fbk - buď soubor s klíči (stejné rozložení jako KeyHolder.conf), nebo explicitní hodnotu. Zálohování nešifrované databáze s těmito přepínači stále vytvoří šifrovanou zálohu.
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
S -KEY musíte stále zadat -KEYNAME.
Obnova
Stejný princip: soubor s klíči nebo explicitní klíč. Obnova nešifrované zálohy s těmito přepínači vytvoří šifrovanou databázi.
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