Firebird暗号化のデモ
IBSurgeonプラグインでFirebirdデータベースを暗号化する方法:サーバーへのインストール、アプリケーションからの接続、開発者ツールの使用、暗号化バックアップ/リストアの実行。完全版製品:Encryption Framework。
1ステップインストールスクリプト
Windows:GitHubからインストーラーを実行 - English · Português。
Linux:IBSurgeon/firebirdlinuxinstallの標準Firebirdインストーラーを-crypt-onlyオプション付きで使用します。
手動インストールの前提条件
- Firebird 3.0.3以上(3.x、4.x、5.x)。このデモでは旧バージョンはサポートされていません。
- トライアルプラグインアーカイブとDelphi/Lazarus/.NET/PHPのサンプル(下記)。
plugins内のトライアルDbCrypt.conf。- SYSDBAユーザー。ない場合:Firebirdを停止し、
isql -user sysdba employee.fdbを実行してCREATE USER SYSDBA PASSWORD 'masterkey';を実行し、サービスを起動します。
このチュートリアルでは64ビットFirebirdを使用します。32ビットの場合は、対応するWINDOWS_32bit(またはLinux 32ビット)アーカイブからファイルを取得してください。
ダウンロード
ExampleApplications.zip - コンパイル済みデモクライアントとソースコード。DbCrypt.conf - トライアルキー。
ステップ1 - 初期暗号化(Windowsの例)
暗号化されていないデータベースを適当な場所に配置します。例:C:\Temp\EMPLOYEE30\EMPLOYEE30.FDB。
1. databases.confのエイリアス
crypt = C:\Temp\EMPLOYEE30\EMPLOYEE30.FDB
{
KeyHolderPlugin = KeyHolder
}
すべてのデータベースにキーホルダーを適用するには、firebird.confにKeyHolderPlugin = KeyHolderを追加するか、アーカイブ(ステップ3)からサンプルのfirebird.confをコピーします。
2. server/pluginsへのファイル配置
FB_NN_WINDOWS_64bit\Server\pluginsから:
DbCrypt.dllDbCrypt.conf(トライアルキー)KeyHolder.dllKeyHolder.conf- 開発専用のキーが含まれるテキストファイル。エンドユーザーには配布しないでください。
3. Firebirdルートへのファイル配置
FB_NN_WINDOWS_64bit\Serverから:fbcrypt.dll、libcrypto-1_1-x64.dll、libssl-1_1-x64.dll、gbak.exe、firebird.msg、および必要に応じてfirebird.conf。
4. 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;(またはgstat -h)でDatabase encryptedと表示されるはずです。
dbcryptはプラグイン名、redはKeyHolder.confで定義されたキーです。Linuxでは名前を引用符で囲み、大文字小文字を一致させてください:
alter database encrypt with "DbCrypt" key Red;
このステップの後、サーバーはKeyHolder.conf(開発/管理者モード)にキーを保持します。
サーバーとクライアントの役割分担
| サーバー | クライアント |
|---|---|
plugins/dbcrypt.dll、plugins/keyholder.dll、DbCrypt.conflibssl-1_1-x64.dll、libcrypto-1_1-x64.dll、fbcrypt.dll暗号化対応 gbak:gbak.exe、firebird.msgオプション: plugins/KeyHolder.conf(開発用キー)、firebird.conf
|
fbclient.dll、fbcrypt.dll、libcrypto-1_1.dllオプション: firebird.conf
|
ステップ2 - クライアントアプリケーションからの接続
顧客環境を再現するには、plugins/KeyHolder.confの名前を変更するか削除します。プラグインはアプリケーションからキーを受け取るようになります。ExampleApplications.zipには、コンパイル済みのDelphi XE8クライアントに加えて、Lazarus、.NET、PHPのサンプルが含まれています。
通常の接続の前に、アプリはキーを送信します(数回の追加呼び出し)。その後、Firebird の使用は変わりません。Delphi デモは Example_Delphi_EnhancedCryptTestClient\Win32\Debug にあります:
- 「1. Setup Login」でデータベースのパスまたはエイリアスを設定します。
- キー名と値を入力します(キー RED の場合、
KeyHolder.confから値をコピーします)。 - そのキーで暗号化/復号化ができます - 暗号化にはアクティブな接続が必要で、時間がかかります。
- 「Execute query」をクリックして、暗号化された接続を通じて簡単な SELECT を実行します。
デモは TCP/IP のみで接続します - XNET はサポートされていません。サンプルでは、接続、トランザクション、クエリの手順を明示的に示しているので、パターンをコピーできます。
ステップ 3 - 開発者ツールとコマンドライン
Encryption Framework v2021 以降、fbclient.dll はキーを自分で読み込むことができます。IBExpert、FlameRobin、SQLLY、Database Workbench、RedExpert、gfix、nbackup などのツールは、コード変更なしで動作します。
クライアントのビット数を合わせます:
- Firebird コマンドラインツール(
isql、gfix、nbackup)はサーバーに合わせます -Windows_64bit\WindowsClientPart_64bitをそれらのバイナリの隣にコピーします。 - ほとんどの GUI ツールは 32 ビットです -
Windows_32bit\WindowsClientPart_32bitをツールのフォルダにコピーします。
コマンドラインツールは、その fbclient のコピーの隣にある plugins\KeyHolder.conf を使用します。他のアプリは引き続きキーを自分で渡します。
- ツールが起動し、
fbclient.dllを読み込みます。 fbclientがfirebird.confを読み取り、KeyHolderPlugin=KeyHolderを確認して、plugins\keyholder.dllを読み込みます。- KeyHolder が
KeyHolder.confを読み取ります(例:キー Red)。 isqlが接続し、SHOW DATABASEを実行できます。
gbak: クライアント側のキー読み込みでは、暗号化されていない .fbk が生成されます。フレームワークの gbak を明示的な -KEYFILE / -KEYNAME / -KEY とともに使用して、バックアップを暗号化したままにします。
nbackup: 増分コピーは暗号化されたままです。
ステップ 4 - バックアップと復元
標準の gbak は、本番の暗号化データベースを開くことができません(サーバーにキーがなく、クライアントからもキーが渡されないため)。フレームワークには、データベースと同じキーでバックアップを暗号化する gbak が同梱されています。gbak -? で以下が追加されます:
-KEYFILE DB およびバックアップの暗号化キーを含むファイルの名前
-KEYNAME 暗号化に使用するキーの名前
-KEY "0x5A," 形式のキー値
バックアップ
gbak がデータベースを読み取り、.fbk を暗号化できるようにキーを指定します - キーファイル(KeyHolder.conf と同じレイアウト)または明示的な値のいずれかです。これらのスイッチを使用して 暗号化されていない データベースをバックアップしても、暗号化されたバックアップが生成されます。
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
-KEY を使用する場合でも、-KEYNAME を渡す必要があります。
復元
同じ考え方です:キーファイルまたは明示的なキー。これらのスイッチを使用して暗号化されていないバックアップを復元すると、暗号化されたデータベースが作成されます。
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