Demonstração Firebird Encryption
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, executeCREATE 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.
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.dllDbCrypt.conf(chave de teste)KeyHolder.dllKeyHolder.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.conflibssl-1_1-x64.dll, libcrypto-1_1-x64.dll, fbcrypt.dllgbak criptografado: gbak.exe, firebird.msgOpcional: plugins/KeyHolder.conf (chaves de desenvolvimento), firebird.conf
|
fbclient.dll, fbcrypt.dll, libcrypto-1_1.dllOpcional: 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:
- Defina o caminho do banco de dados ou alias em “1. Setup Login”.
- Informe o nome e o valor da chave (para a chave RED, copie o valor do
KeyHolder.conf). - Você pode criptografar/descriptografar com essa chave - a criptografia requer uma conexão ativa e leva tempo.
- 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.
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 - copieWindows_64bit\WindowsClientPart_64bitao lado desses binários. - A maioria das ferramentas GUI é de 32 bits - copie
Windows_32bit\WindowsClientPart_32bitpara 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.
- A ferramenta inicia e carrega o
fbclient.dll. - O
fbclientlê ofirebird.conf, vêKeyHolderPlugin=KeyHoldere carrega oplugins\keyholder.dll. - O KeyHolder lê o
KeyHolder.conf(por exemplo, chave Red). - O
isqlconecta e pode executarSHOW DATABASE.
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