Questa pagina è stata tradotta automaticamente. Leggi l'originale in inglese. English

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, esegui CREATE 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.

Firebird Windows 32-bit Windows 64-bit Linux 32-bit Linux 64-bit
3.0 zip zip tar.xz tar.xz
4.0 zip zip tar.xz tar.xz
5.0 zip zip - tar.xz

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.dll
  • DbCrypt.conf (chiave di prova)
  • KeyHolder.dll
  • KeyHolder.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.conf
libssl-1_1-x64.dll, libcrypto-1_1-x64.dll, fbcrypt.dll
gbak crittografato: gbak.exe, firebird.msg
Opzionale: plugins/KeyHolder.conf (chiavi di sviluppo), firebird.conf
fbclient.dll, fbcrypt.dll, libcrypto-1_1.dll
Opzionale: 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:

  1. Imposta il percorso del database o l'alias in "1. Setup Login".
  2. Inserisci il nome della chiave e il valore (per la chiave RED, copia il valore da KeyHolder.conf).
  3. Puoi crittografare/decrittografare con quella chiave - la crittografia richiede una connessione attiva e richiede tempo.
  4. 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.

Client demo di crittografia: login, nome chiave ed esecuzione query
Client demo: login, chiave, crittografia/decrittografia, query di test.
Client demo di crittografia che mostra i passaggi di connessione a un database Firebird crittografato
Sequenza semplice di connessione / transazione / query.

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 - copia Windows_64bit\WindowsClientPart_64bit accanto a quei binari.
  • La maggior parte degli strumenti GUI è a 32 bit - copia Windows_32bit\WindowsClientPart_32bit nella 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.

isql connesso a un database crittografato tramite KeyHolder lato client
Caricamento chiave lato client: fbclient → KeyHolder → KeyHolder.conf.
  1. Lo strumento si avvia e carica fbclient.dll.
  2. fbclient legge firebird.conf, vede KeyHolderPlugin=KeyHolder e carica plugins\keyholder.dll.
  3. KeyHolder legge KeyHolder.conf (ad es. chiave Red).
  4. isql si connette e può eseguire SHOW DATABASE.
FlameRobin connesso a un database Firebird crittografato usando chiavi lato client
Stesso modello con FlameRobin.

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