Esta página foi traduzida por máquina. Leia o original em inglês. English

Como criptografar um banco de dados Firebird com o plugin IBSurgeon: instale no servidor, conecte-se a partir de um aplicativo, use ferramentas de desenvolvimento e execute backup/restauração criptografados. Produto completo: Framework de Cryptografia.

Scripts de instalação em 1 etapa

Windows: execute o instalador do GitHub - English · Português.

Linux: use o instalador Firebird padrão do IBSurgeon/firebirdlinuxinstall com -crypt-only.

Pré-requisitos para instalação manual

  • Firebird 3.0.3 ou superior (3.x, 4.x, 5.x). Versões mais antigas não são suportadas por esta demonstração.
  • Arquivos de plugin de teste e os exemplos Delphi/Lazarus/.NET/PHP (abaixo).
  • Arquivo de teste DbCrypt.conf em plugins.
  • Um usuário SYSDBA. Se não existir: pare o Firebird, execute isql -user sysdba employee.fdb, execute CREATE USER SYSDBA PASSWORD 'masterkey';, inicie o serviço.

O passo a passo usa Firebird 64 bits. Para 32 bits, pegue os arquivos do arquivo correspondente WINDOWS_32bit (ou Linux 32 bits).

Downloads

ExampleApplications.zip - cliente de demonstração compilado e fontes. DbCrypt.conf - chave de teste.

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

Etapa 1 - Criptografia inicial (exemplo Windows)

Coloque um banco de dados não criptografado em um local conveniente, por exemplo C:\Temp\EMPLOYEE30\EMPLOYEE30.FDB.

1. Alias em databases.conf

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

Para aplicar o key holder a todos os bancos de dados, adicione KeyHolderPlugin = KeyHolder no firebird.conf, ou copie o firebird.conf de exemplo do arquivo (etapa 3).

2. Arquivos em server/plugins

De FB_NN_WINDOWS_64bit\Server\plugins:

  • DbCrypt.dll
  • DbCrypt.conf (chave de teste)
  • KeyHolder.dll
  • KeyHolder.conf - arquivo de texto com chaves apenas para desenvolvimento. Não o distribua para usuários finais.

3. Arquivos na raiz do Firebird

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

4. Criptografar com 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; (ou gstat -h) deve informar Database encrypted.

dbcrypt é o nome do plugin; red é uma chave definida no KeyHolder.conf. No Linux, coloque os nomes entre aspas e respeite maiúsculas/minúsculas:

alter database encrypt with "DbCrypt" key Red;

Após esta etapa, o servidor mantém as chaves no KeyHolder.conf (modo desenvolvimento/administração).

O que fica no servidor vs no cliente

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

Etapa 2 - Conectar-se a partir de um aplicativo cliente

Para simular um site de cliente, renomeie ou remova o plugins/KeyHolder.conf. O plugin então espera a chave do aplicativo. O ExampleApplications.zip contém um cliente Delphi XE8 compilado, além de exemplos Lazarus, .NET e PHP.

Antes da conexão normal, o aplicativo envia a chave (algumas chamadas extras). Depois disso, o uso do Firebird permanece inalterado. A demonstração Delphi está em Example_Delphi_EnhancedCryptTestClient\Win32\Debug:

  1. Defina o caminho do banco de dados ou alias em “1. Setup Login”.
  2. Informe o nome e o valor da chave (para a chave RED, copie o valor do KeyHolder.conf).
  3. Você pode criptografar/descriptografar com essa chave - a criptografia requer uma conexão ativa e leva tempo.
  4. Clique em Execute query para executar um SELECT simples através da conexão criptografada.

A demonstração conecta apenas via TCP/IP - XNET não é suportado. O exemplo mantém as etapas de conexão, transação e consulta explícitas para que você possa copiar o padrão.

Cliente de demonstração de criptografia: login, nome da chave e execução de consulta
Cliente de demonstração: login, chave, criptografar/descriptografar, consulta de teste.
Cliente de demonstração de criptografia mostrando etapas de conexão com um banco de dados Firebird criptografado
Sequência simples de conexão / transação / consulta.

Etapa 3 - Ferramentas de desenvolvimento e linha de comando

A partir do Framework de Cryptografia v2021, o fbclient.dll pode carregar chaves por conta própria. IBExpert, FlameRobin, SQLLY, Database Workbench, RedExpert, gfix, nbackup e ferramentas semelhantes funcionam sem alterações de código.

Corresponda à arquitetura do cliente:

  • As ferramentas de linha de comando do Firebird (isql, gfix, nbackup) correspondem ao servidor - copie Windows_64bit\WindowsClientPart_64bit ao lado desses binários.
  • A maioria das ferramentas GUI é de 32 bits - copie Windows_32bit\WindowsClientPart_32bit para a pasta da ferramenta.

As ferramentas de linha de comando então usam plugins\KeyHolder.conf ao lado dessa cópia do fbclient. Outros aplicativos ainda passam a chave por conta própria.

isql conectando-se a um banco de dados criptografado via KeyHolder no lado do cliente
Carregamento de chave no lado do cliente: fbclient → KeyHolder → KeyHolder.conf.
  1. A ferramenta inicia e carrega o fbclient.dll.
  2. O fbclient lê o firebird.conf, vê KeyHolderPlugin=KeyHolder e carrega o plugins\keyholder.dll.
  3. O KeyHolder lê o KeyHolder.conf (por exemplo, chave Red).
  4. O isql conecta e pode executar SHOW DATABASE.
FlameRobin conectado a um banco de dados Firebird criptografado usando chaves no lado do cliente
Mesmo padrão com o FlameRobin.

gbak: o carregamento de chave no lado do cliente produz um .fbk não criptografado. Use o gbak do framework com -KEYFILE / -KEYNAME / -KEY explícitos para que o backup permaneça criptografado.

nbackup: as cópias incrementais permanecem criptografadas.

Etapa 4 - Backup e restauração

O gbak padrão não consegue abrir um banco de dados criptografado em produção (sem chaves no servidor, sem chave do cliente). O framework inclui um gbak que criptografa o backup com a mesma chave do banco de dados. gbak -? adiciona:

-KEYFILE   nome de um arquivo com chave(s) de criptografia do banco e do backup
-KEYNAME   nome de uma chave a ser usada para criptografia
-KEY       valor da chave na notação "0x5A,"

Backup

Forneça a chave para que o gbak possa ler o banco de dados e criptografar o .fbk - seja um arquivo de chave (mesmo layout do KeyHolder.conf) ou um valor explícito. Fazer backup de um banco de dados não criptografado com essas opções ainda produz um backup criptografado.

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

Com -KEY, você ainda deve informar -KEYNAME.

Restauração

Mesma ideia: arquivo de chave ou chave explícita. Restaurar um backup não criptografado com essas opções cria um banco de dados criptografado.

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