Esta página fue traducida automáticamente. Lee el original en inglés. English

Cómo cifrar una base de datos Firebird con el plugin de IBSurgeon: instalar en el servidor, conectar desde una aplicación, usar herramientas de desarrollo y realizar copias de seguridad/restauración cifradas. Producto completo: Encryption Framework.

Scripts de instalación en 1 paso

Windows: ejecute el instalador desde GitHub - English · Português.

Linux: use el instalador estándar de Firebird de IBSurgeon/firebirdlinuxinstall con -crypt-only.

Requisitos previos para una instalación manual

  • Firebird 3.0.3 o superior (3.x, 4.x, 5.x). Las versiones anteriores no son compatibles con esta demo.
  • Archivos de plugin de prueba y ejemplos de Delphi/Lazarus/.NET/PHP (abajo).
  • DbCrypt.conf de prueba en plugins.
  • Un usuario SYSDBA. Si falta: detenga Firebird, ejecute isql -user sysdba employee.fdb, ejecute CREATE USER SYSDBA PASSWORD 'masterkey';, inicie el servicio.

El tutorial usa Firebird de 64 bits. Para 32 bits, tome los archivos del archivo WINDOWS_32bit correspondiente (o Linux de 32 bits).

Descargas

ExampleApplications.zip - cliente demo compilado y fuentes. DbCrypt.conf - clave de prueba.

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

Paso 1 - Cifrado inicial (ejemplo en Windows)

Coloque una base de datos sin cifrar en un lugar conveniente, por ejemplo C:\Temp\EMPLOYEE30\EMPLOYEE30.FDB.

1. Alias en databases.conf

crypt = C:\Temp\EMPLOYEE30\EMPLOYEE30.FDB
{
KeyHolderPlugin = KeyHolder
}

Para aplicar el key holder a todas las bases de datos, agregue KeyHolderPlugin = KeyHolder en firebird.conf, o copie el firebird.conf de muestra del archivo (paso 3).

2. Archivos en server/plugins

Desde FB_NN_WINDOWS_64bit\Server\plugins:

  • DbCrypt.dll
  • DbCrypt.conf (clave de prueba)
  • KeyHolder.dll
  • KeyHolder.conf - archivo de texto con claves solo para desarrollo. No lo distribuya a usuarios finales.

3. Archivos en la raíz de Firebird

Desde FB_NN_WINDOWS_64bit\Server: fbcrypt.dll, libcrypto-1_1-x64.dll, libssl-1_1-x64.dll, gbak.exe, firebird.msg y opcionalmente firebird.conf.

4. Cifrar 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) debe informar Database encrypted.

dbcrypt es el nombre del plugin; red es una clave definida en KeyHolder.conf. En Linux, use comillas y respete mayúsculas/minúsculas:

alter database encrypt with "DbCrypt" key Red;

Después de este paso, el servidor guarda las claves en KeyHolder.conf (modo desarrollo / administración).

Qué va en el servidor vs el cliente

Servidor Cliente
plugins/dbcrypt.dll, plugins/keyholder.dll, DbCrypt.conf
libssl-1_1-x64.dll, libcrypto-1_1-x64.dll, fbcrypt.dll
gbak cifrado: gbak.exe, firebird.msg
Opcional: plugins/KeyHolder.conf (claves de desarrollo), firebird.conf
fbclient.dll, fbcrypt.dll, libcrypto-1_1.dll
Opcional: firebird.conf

Paso 2 - Conectar desde una aplicación cliente

Para simular un sitio de cliente, renombre o elimine plugins/KeyHolder.conf. El plugin entonces espera la clave desde la aplicación. ExampleApplications.zip incluye un cliente compilado en Delphi XE8 más ejemplos de Lazarus, .NET y PHP.

Antes de la conexión habitual, la aplicación envía la clave (unas pocas llamadas adicionales). Después de eso, el uso de Firebird no cambia. La demo de Delphi está en Example_Delphi_EnhancedCryptTestClient\Win32\Debug:

  1. Establezca la ruta de la base de datos o el alias en “1. Setup Login”.
  2. Ingrese el nombre y valor de la clave (para la clave RED, copie el valor de KeyHolder.conf).
  3. Puede cifrar/descifrar con esa clave - el cifrado requiere una conexión activa y toma tiempo.
  4. Haga clic en Execute query para ejecutar un SELECT simple a través de la conexión cifrada.

La demo se conecta solo por TCP/IP - XNET no es compatible. El ejemplo mantiene los pasos de conexión, transacción y consulta explícitos para que pueda copiar el patrón.

Cliente demo de cifrado: inicio de sesión, nombre de clave y ejecución de consulta
Cliente demo: inicio de sesión, clave, cifrar/descifrar, consulta de prueba.
Cliente demo de cifrado mostrando pasos de conexión contra una base de datos Firebird cifrada
Secuencia sencilla de conexión / transacción / consulta.

Paso 3 - Herramientas de desarrollo y línea de comandos

Desde Encryption Framework v2021, fbclient.dll puede cargar claves por sí mismo. IBExpert, FlameRobin, SQLLY, Database Workbench, RedExpert, gfix, nbackup y herramientas similares funcionan sin cambios de código.

Haga coincidir la arquitectura del cliente:

  • Las herramientas de línea de comandos de Firebird (isql, gfix, nbackup) coinciden con el servidor - copie Windows_64bit\WindowsClientPart_64bit junto a esos binarios.
  • La mayoría de las herramientas GUI son de 32 bits - copie Windows_32bit\WindowsClientPart_32bit en la carpeta de la herramienta.

Las herramientas de línea de comandos usan entonces plugins\KeyHolder.conf junto a esa copia de fbclient. Otras aplicaciones aún pasan la clave por sí mismas.

isql conectándose a una base de datos cifrada mediante KeyHolder del lado del cliente
Carga de clave del lado del cliente: fbclient → KeyHolder → KeyHolder.conf.
  1. La herramienta se inicia y carga fbclient.dll.
  2. fbclient lee firebird.conf, ve KeyHolderPlugin=KeyHolder y carga plugins\keyholder.dll.
  3. KeyHolder lee KeyHolder.conf (por ejemplo, clave Red).
  4. isql se conecta y puede ejecutar SHOW DATABASE.
FlameRobin conectado a una base de datos Firebird cifrada usando claves del lado del cliente
Mismo patrón con FlameRobin.

gbak: la carga de clave del lado del cliente produce un .fbk sin cifrar. Use el gbak del framework con -KEYFILE / -KEYNAME / -KEY explícitos para que la copia de seguridad permanezca cifrada.

nbackup: las copias incrementales permanecen cifradas.

Paso 4 - Copia de seguridad y restauración

El gbak estándar no puede abrir una base de datos cifrada en producción (sin claves en el servidor, sin clave desde el cliente). El framework incluye un gbak que cifra la copia de seguridad con la misma clave que la base de datos. gbak -? añade:

-KEYFILE   nombre de un archivo con la(s) clave(s) de cifrado de BD y copia de seguridad
-KEYNAME   nombre de una clave a utilizar para el cifrado
-KEY       valor de clave en notación "0x5A,"

Copia de seguridad

Proporcione la clave para que gbak pueda leer la base de datos y cifrar el .fbk - ya sea un archivo de claves (misma estructura que KeyHolder.conf) o un valor explícito. Hacer una copia de seguridad de una base de datos no cifrada con estos interruptores aún produce una copia de seguridad cifrada.

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 aún debe pasar -KEYNAME.

Restauración

Misma idea: archivo de claves o clave explícita. Restaurar una copia de seguridad no cifrada con estos interruptores crea una base de datos cifrada.

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