Dimostrazione della crittografia Firebird
Come crittografare un database Firebird con il plugin IBSurgeon: installazione sul server, connessione da un'applicazione, utilizzo degli strumenti per sviluppatori ed esecuzione di backup/ripristino crittografati. Prodotto completo: Encryption Framework.
Script di installazione in 1 passaggio
Windows: esegui l'installer da GitHub - English · Português.
Linux: usa l'installer Firebird standard da IBSurgeon/firebirdlinuxinstall con -crypt-only.
Prerequisiti per un'installazione manuale
- Firebird 3.0.3 o superiore (3.x, 4.x, 5.x). Le versioni precedenti non sono supportate da questa demo.
- Archivi dei plugin di prova ed esempi Delphi/Lazarus/.NET/PHP (sotto).
- DbCrypt.conf di prova nella cartella
plugins. - Un utente SYSDBA. Se manca: ferma Firebird, esegui
isql -user sysdba employee.fdb, eseguiCREATE USER SYSDBA PASSWORD 'masterkey';, avvia il servizio.
La guida utilizza Firebird a 64 bit. Per la versione a 32 bit, prendi i file dall'archivio corrispondente WINDOWS_32bit (o Linux a 32 bit).
Download
ExampleApplications.zip - client demo compilato e sorgenti. DbCrypt.conf - chiave di prova.
Passaggio 1 - Crittografia iniziale (esempio Windows)
Posiziona un database non crittografato in un percorso comodo, ad esempio C:\Temp\EMPLOYEE30\EMPLOYEE30.FDB.
1. Alias in databases.conf
crypt = C:\Temp\EMPLOYEE30\EMPLOYEE30.FDB
{
KeyHolderPlugin = KeyHolder
}
Per applicare il key holder a ogni database, aggiungi KeyHolderPlugin = KeyHolder in firebird.conf, oppure copia il firebird.conf di esempio dall'archivio (passaggio 3).
2. File in server/plugins
Da FB_NN_WINDOWS_64bit\Server\plugins:
DbCrypt.dllDbCrypt.conf(chiave di prova)KeyHolder.dllKeyHolder.conf- file di testo con le chiavi solo per sviluppo. Non distribuirlo agli utenti finali.
3. File nella directory principale di Firebird
Da FB_NN_WINDOWS_64bit\Server: fbcrypt.dll, libcrypto-1_1-x64.dll, libssl-1_1-x64.dll, gbak.exe, firebird.msg e opzionalmente firebird.conf.
4. Crittografa con 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; (o gstat -h) dovrebbe riportare Database encrypted.
dbcrypt è il nome del plugin; red è una chiave definita in KeyHolder.conf. Su Linux, racchiudi i nomi tra virgolette e rispetta le maiuscole/minuscole:
alter database encrypt with "DbCrypt" key Red;
Dopo questo passaggio, il server conserva le chiavi in KeyHolder.conf (modalità sviluppo/amministrazione).
Cosa risiede sul server rispetto al client
| Server | Client |
|---|---|
plugins/dbcrypt.dll, plugins/keyholder.dll, DbCrypt.conflibssl-1_1-x64.dll, libcrypto-1_1-x64.dll, fbcrypt.dllgbak crittografato: gbak.exe, firebird.msgOpzionale: plugins/KeyHolder.conf (chiavi di sviluppo), firebird.conf
|
fbclient.dll, fbcrypt.dll, libcrypto-1_1.dllOpzionale: firebird.conf
|
Passaggio 2 - Connettiti da un'applicazione client
Per simulare un sito cliente, rinomina o rimuovi plugins/KeyHolder.conf. Il plugin si aspetterà quindi la chiave dall'applicazione. ExampleApplications.zip contiene un client Delphi XE8 compilato oltre a esempi Lazarus, .NET e PHP.
Prima della connessione abituale, l'app invia la chiave (alcune chiamate extra). Dopodiché, l'uso di Firebird rimane invariato. La demo Delphi si trova in Example_Delphi_EnhancedCryptTestClient\Win32\Debug:
- Imposta il percorso del database o l'alias in "1. Setup Login".
- Inserisci il nome della chiave e il valore (per la chiave RED, copia il valore da
KeyHolder.conf). - Puoi crittografare/decrittografare con quella chiave - la crittografia richiede una connessione attiva e richiede tempo.
- Fai clic su Execute query per eseguire una semplice SELECT tramite la connessione crittografata.
La demo si connette solo tramite TCP/IP - XNET non è supportato. L'esempio mantiene espliciti i passaggi di connessione, transazione e query così puoi copiare il modello.
Passaggio 3 - Strumenti per sviluppatori e riga di comando
Dalla versione v2021 di Encryption Framework, fbclient.dll può caricare le chiavi da solo. IBExpert, FlameRobin, SQLLY, Database Workbench, RedExpert, gfix, nbackup e strumenti simili funzionano quindi senza modifiche al codice.
Abbina l'architettura del client:
- Gli strumenti da riga di comando di Firebird (
isql,gfix,nbackup) corrispondono al server - copiaWindows_64bit\WindowsClientPart_64bitaccanto a quei binari. - La maggior parte degli strumenti GUI è a 32 bit - copia
Windows_32bit\WindowsClientPart_32bitnella cartella dello strumento.
Gli strumenti da riga di comando usano quindi plugins\KeyHolder.conf accanto a quella copia di fbclient. Le altre app passano ancora la chiave da sole.
- Lo strumento si avvia e carica
fbclient.dll. fbclientleggefirebird.conf, vedeKeyHolderPlugin=KeyHoldere caricaplugins\keyholder.dll.- KeyHolder legge
KeyHolder.conf(ad es. chiave Red). isqlsi connette e può eseguireSHOW DATABASE.
gbak: il caricamento della chiave lato client produce un file .fbk non crittografato. Usa il gbak del framework con -KEYFILE / -KEYNAME / -KEY espliciti affinché il backup rimanga crittografato.
nbackup: le copie incrementali rimangono crittografate.
Passaggio 4 - Backup e ripristino
Il gbak standard non può aprire un database crittografato in produzione (nessuna chiave sul server, nessuna chiave dal client). Il framework include un gbak che crittografa il backup con la stessa chiave del database. gbak -? aggiunge:
-KEYFILE nome di un file con le chiavi di crittografia del DB e del backup
-KEYNAME nome di una chiave da utilizzare per la crittografia
-KEY valore della chiave in notazione "0x5A,"
Backup
Fornisci la chiave affinché gbak possa leggere il database e crittografare il file .fbk - tramite un file di chiavi (stessa struttura di KeyHolder.conf) o un valore esplicito. Il backup di un database non crittografato con questi parametri produce comunque un backup crittografato.
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
Con -KEY devi comunque passare -KEYNAME.
Ripristino
Stessa idea: file di chiavi o chiave esplicita. Il ripristino di un backup non crittografato con questi parametri crea un database crittografato.
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