Bản demo mã hóa Firebird
Cách mã hóa cơ sở dữ liệu Firebird bằng plugin IBSurgeon: cài đặt trên máy chủ, kết nối từ ứng dụng, sử dụng công cụ dành cho nhà phát triển và thực hiện sao lưu/khôi phục được mã hóa. Sản phẩm đầy đủ: Encryption Framework.
Tập lệnh cài đặt 1 bước
Windows: chạy trình cài đặt từ GitHub - Tiếng Anh · Português.
Linux: sử dụng trình cài đặt Firebird tiêu chuẩn từ IBSurgeon/firebirdlinuxinstall với tùy chọn -crypt-only.
Điều kiện tiên quyết để cài đặt thủ công
- Firebird 3.0.3 trở lên (3.x, 4.x, 5.x). Các phiên bản cũ hơn không được hỗ trợ bởi bản demo này.
- Các kho lưu trữ plugin dùng thử và các ví dụ Delphi/Lazarus/.NET/PHP (bên dưới).
- Tệp DbCrypt.conf dùng thử trong thư mục
plugins. - Người dùng SYSDBA. Nếu thiếu: dừng Firebird, chạy
isql -user sysdba employee.fdb, thực thiCREATE USER SYSDBA PASSWORD 'masterkey';, khởi động dịch vụ.
Hướng dẫn sử dụng Firebird 64-bit. Đối với 32-bit, lấy tệp từ kho lưu trữ WINDOWS_32bit (hoặc Linux 32-bit) tương ứng.
Tải xuống
ExampleApplications.zip - ứng dụng khách demo đã biên dịch và mã nguồn. DbCrypt.conf - khóa dùng thử.
Bước 1 - Mã hóa ban đầu (ví dụ Windows)
Đặt cơ sở dữ liệu chưa mã hóa ở vị trí thuận tiện, ví dụ C:\Temp\EMPLOYEE30\EMPLOYEE30.FDB.
1. Bí danh trong databases.conf
crypt = C:\Temp\EMPLOYEE30\EMPLOYEE30.FDB
{
KeyHolderPlugin = KeyHolder
}
Để áp dụng key holder cho mọi cơ sở dữ liệu, thêm KeyHolderPlugin = KeyHolder vào firebird.conf, hoặc sao chép tệp firebird.conf mẫu từ kho lưu trữ (bước 3).
2. Các tệp vào server/plugins
Từ FB_NN_WINDOWS_64bit\Server\plugins:
DbCrypt.dllDbCrypt.conf(khóa dùng thử)KeyHolder.dllKeyHolder.conf- tệp văn bản chứa khóa chỉ dành cho phát triển. Không phân phối cho người dùng cuối.
3. Các tệp vào thư mục gốc Firebird
Từ FB_NN_WINDOWS_64bit\Server: fbcrypt.dll, libcrypto-1_1-x64.dll, libssl-1_1-x64.dll, gbak.exe, firebird.msg và tùy chọn firebird.conf.
4. Mã hóa bằng 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; (hoặc gstat -h) sẽ báo Database encrypted.
dbcrypt là tên plugin; red là khóa được định nghĩa trong KeyHolder.conf. Trên Linux, đặt tên trong dấu ngoặc kép và khớp chữ hoa/chữ thường:
alter database encrypt with "DbCrypt" key Red;
Sau bước này, máy chủ giữ khóa trong KeyHolder.conf (chế độ phát triển / quản trị).
Những gì nằm trên máy chủ so với máy khách
| Máy chủ | Máy khách |
|---|---|
plugins/dbcrypt.dll, plugins/keyholder.dll, DbCrypt.conflibssl-1_1-x64.dll, libcrypto-1_1-x64.dll, fbcrypt.dllgbak được mã hóa: gbak.exe, firebird.msgTùy chọn: plugins/KeyHolder.conf (khóa phát triển), firebird.conf
|
fbclient.dll, fbcrypt.dll, libcrypto-1_1.dllTùy chọn: firebird.conf
|
Bước 2 - Kết nối từ ứng dụng khách
Để mô phỏng môi trường khách hàng, đổi tên hoặc xóa plugins/KeyHolder.conf. Plugin sau đó sẽ nhận khóa từ ứng dụng. ExampleApplications.zip chứa ứng dụng khách Delphi XE8 đã biên dịch cùng các mẫu Lazarus, .NET và PHP.
Trước khi kết nối thông thường, ứng dụng gửi khóa (một vài lệnh gọi bổ sung). Sau đó, việc sử dụng Firebird không thay đổi. Bản demo Delphi nằm trong Example_Delphi_EnhancedCryptTestClient\Win32\Debug:
- Đặt đường dẫn hoặc bí danh cơ sở dữ liệu trong mục “1. Setup Login”.
- Nhập tên khóa và giá trị (đối với khóa RED, sao chép giá trị từ
KeyHolder.conf). - Bạn có thể mã hóa/giải mã bằng khóa đó - mã hóa cần kết nối đang hoạt động và mất thời gian.
- Nhấp Execute query để chạy một câu lệnh SELECT đơn giản qua kết nối được mã hóa.
Bản demo chỉ kết nối qua TCP/IP - XNET không được hỗ trợ. Mẫu giữ các bước kết nối, giao dịch và truy vấn rõ ràng để bạn có thể sao chép mẫu này.
Bước 3 - Công cụ dành cho nhà phát triển và dòng lệnh
Từ Encryption Framework v2021, fbclient.dll có thể tự tải khóa. IBExpert, FlameRobin, SQLLY, Database Workbench, RedExpert, gfix, nbackup và các công cụ tương tự hoạt động mà không cần thay đổi mã.
Khớp kiến trúc bit của máy khách:
- Các công cụ dòng lệnh Firebird (
isql,gfix,nbackup) khớp với máy chủ - sao chépWindows_64bit\WindowsClientPart_64bitvào cạnh các tệp nhị phân đó. - Hầu hết công cụ GUI là 32-bit - sao chép
Windows_32bit\WindowsClientPart_32bitvào thư mục của công cụ.
Các công cụ dòng lệnh sau đó sử dụng plugins\KeyHolder.conf bên cạnh bản sao fbclient đó. Các ứng dụng khác vẫn tự truyền khóa.
- Công cụ khởi động và tải
fbclient.dll. fbclientđọcfirebird.conf, thấyKeyHolderPlugin=KeyHoldervà tảiplugins\keyholder.dll.- KeyHolder đọc
KeyHolder.conf(ví dụ khóa Red). isqlkết nối và có thểSHOW DATABASE.
gbak: tải khóa phía máy khách tạo ra tệp .fbk không được mã hóa. Sử dụng gbak của framework với các tùy chọn -KEYFILE / -KEYNAME / -KEY rõ ràng để bản sao lưu vẫn được mã hóa.
nbackup: các bản sao tăng dần vẫn được mã hóa.
Bước 4 - Sao lưu và phục hồi
gbak thông thường không thể mở cơ sở dữ liệu đã mã hóa trong sản xuất (không có khóa trên máy chủ, không có khóa từ máy khách). Framework đi kèm một gbak mã hóa bản sao lưu bằng cùng khóa với cơ sở dữ liệu. gbak -? bổ sung:
-KEYFILE tên tệp chứa khóa mã hóa DB và bản sao lưu
-KEYNAME tên khóa được sử dụng để mã hóa
-KEY giá trị khóa ở dạng ký hiệu "0x5A,"
Sao lưu
Cung cấp khóa để gbak có thể đọc cơ sở dữ liệu và mã hóa tệp .fbk - hoặc dùng tệp khóa (cùng định dạng như KeyHolder.conf) hoặc giá trị khóa tường minh. Sao lưu cơ sở dữ liệu chưa mã hóa với các tùy chọn này vẫn tạo ra bản sao lưu đã mã hóa.
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
Với -KEY bạn vẫn phải truyền -KEYNAME.
Phục hồi
Ý tưởng tương tự: tệp khóa hoặc khóa tường minh. Phục hồi bản sao lưu chưa mã hóa với các tùy chọn này sẽ tạo ra cơ sở dữ liệu đã mã hóa.
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