CHƯƠNG 1 : NGHIÊN CỨU TỔNG QUAN VỀ BẢO MẬT CƠ SỞ DỮ LIỆU
2.2 Kết hợp RSA-AES để mã hóa dữ liệu trong CSDL
2.2.1 Mô hình RSA-AES để mã hóa dữ liệu trong CSDL
Mô hình mã hóa RSA-AES đã trình bày ở phần trên được áp dụng để xây dựng giải pháp bảo vệ tính bí mật và tính riêng tư dữ liệu trong CSDL. Kết hợp hệ mã RSA- AES để mã hóa dữ liệu trong CSDL được thực hiện trên ứng dụng, vì thế dữ liệu được mã hóa trên ứng dụng trước khi truyền và ghi vào CSDL. Với giải pháp này, tính bí mật dữ liệu được đảm bảo vì dữ liệu đã được mã hóa trên đường truyền, trong hệ quản trị CSDL và trên tập tin lưu trên đĩa. Mô hình RSA-AES để mã hóa dữ liệu trong CSDL được thể hiện như sau:
Cipher Text: CP, CKAES
AES RSA KPR Decryption (CP , KAES) CP CKAES KAES Decryption ( CKAES , KPR) Plain Text (P)
37
Giải pháp kết hợp RSA-AES thực hiện quá trình mã hóa dữ liệu trong CSDL:
Hình 2.3 Mô hình RSA-AES để mã hóa dữ liệu trong CSDL.
DBMS
Table USER-EAES
USER-ID C1-USR C2-USR
USER1 CP CKAES ... ... Table USER-KPU USER-ID KPU USER1 KPU-USR1 ... APPLICATION Plain Text (P) KAES KPU CP=EAES (P, KAES)
CKAES =ERSA(KAES, KPU)
Public Key KPU Cipher Text CKAES
Cipher Text CP
STORAGE LAYER
Cipher Text CP
Cipher Text CKAES
Public Key KPU
Cipher Text CP , CKAES
Public Key KPU NETWORK USER Plain Text (P) Plain Text (P)
38
Giải pháp kết hợp RSA-AES thực hiện quá trình giải mã dữ liệu trong CSDL:
Hình 2.4 Mô hình RSA-AES để giải mã dữ liệu trong CSDL.
DBMS
Table USER-EAES
USER-ID C1-USR C2-USR
USER1 CP CKAES ... ... Table USER-KPU USER-ID KPU USER1 KPU-USR1 ... APPLICATION Plain Text (P) KPR DAES (CP , KAES) DRSA ( CKAES , KPR) KAES
Cipher Text CKAES Cipher Text CP
STORAGE LAYER
Cipher Text CP
Cipher Text CKAES
Public Key KPU
Cipher Text CP , CKAES Public Key KPU NETWORK USER Private Key KPR Plain Text (P) Private Key KPR Plain Text (P)
39
2.2.2 Giải pháp kết hợp RSA-AES để mã hóa dữ liệu trong CSDL
Phương pháp kết hợp hệ mã RSA và AES đã mã hóa được dữ liệu bí mật riêng tư của người dùng (hay chủ sở hữu dữ liệu khi thuê dịch vụ CSDL bên ngoài). Với phương thức này đã bảo vệ được dữ liệu mật, ngay cả người quản trị CSDL. Một vấn đề đặt ra là dữ liệu mật này đã được mã hóa và chỉ giải mã bởi khóa bí mật của người dùng, trong trường hợp người dùng quên hay làm mất khóa bí mật thì dữ liệu này được xử lý giải mã ra sao? Câu trả lời là không giải mã được. Để giải quyết trường hợp này, chúng tôi đề xuất các giải pháp cụ thể như sau:
Đề xuất một số nguyên tắt thực hiện:
- Khóa đối xứng KAES sau khi mã hóa trong hệ mã AES đã được mã hóa bằng hệ mã RSA, sẽ được hủy (không lưu) để bảo vệ dữ liệu mật đã được mã hóa AES. - Trên nguyên tắc mỗi lần mã hóa dữ liệu khác nhau có thể sinh ra cặp khóa RSA
mới (KPU, KPR ). Trong nội dung đề tài này, chúng tôi đề xuất sử dụng duy nhất một cặp khóa (KPU, KPR ) tương ứng với một User cho tất cả các lần mã hóa. - Xây dựng thêm một bộ khóa RSA dự phòng (backup) để backup tất cả người
dùng (user). Bộ khóa RSA dự phòng là (KPU-BKK, KPR-BKK ), bộ khóa RSA cho user là (KPU-USR, KPR-USR ). Khóa bí mật KPR-BKKđược lưu trong két sắt hoặc được quản lý bởi lãnh đạo cơ quan, công ty nhằm bảo vệ dữ liệu mật đã được mã hóa, ngay cả người quản trị CSDL (hay dịch vụ thuê CSDL bên ngoài). Khóa KPR-BKK
chỉ được sử dụng giải mã khi cần thiết, chẳng hạn như trong trường hợp cần giải mã dữ liệu nhưng khóa bí mật KPR-USR của người dùng bị mất,...
Các thuật toán được đề xuất thực hiện như sau:
- Thuật toán 1: Sinh ra khóa KAES mới cho mỗi lần mã hóa P. Như vậy khi User mã hóa KAES thì Backup cũng mã hóa KAES để dự phòng.
User mã hóa KAES : ERSA(KAES, KPU-USR ) Backup mã hóa KAES : ERSA(KAES, KPU-BKK )
40 Quá trình mã hóa và giải mã:
+ Đối với User: Mã hóa:
C1-USR1 = EAES (P, KAES)
C2-USR1 = ERSA (KAES, KPU-USR1) Giải mã:
KAES = DRSA (C2-USR1, KPR-USR1) P = DAES (C1-USR1, KAES)
+ Đối với Backup: Mã hóa:
C2-BKK = ERSA (KAES, KPU-BKK) Giải mã:
KAES = DRSA (C2-BKK, KPR-BKK) P = DAES (C1-USR1, KAES)
41
Hình 2.5 Mô hình mã hóa RSA-AES đối với User và Backup.
Hình 2.6 Mô hình giải mã RSA-AES đối với User và Backup. Cipher Text: Cipher Text:
C2-USR1 = ERSA (KAES, KPU-USR1) Plain Text (P) AES RSA KAES KPU-USR1 Cipher Text:
C1-USR1 = EAES (P, KAES) Encryption (P , KAES)
Encryption (KAES , KPU-USR1)
Cipher Text:
C2-BKK = ERSA (KAES, KPU-BKK) RSA
KPU-BKK
Encryption (KAES , KPU-BKK)
User Backup KPR-USR1 Cipher Text: C2-BKK AES RSA KPR-BKK
Decryption (C1-USR1, KAES) C1-USR1
C2-BKK
KAES
Decryption (C2-BKK, KPR-BKK) Plain Text (P) Cipher Text: C1-USR1
Backup User
AES Decryption (C1-USR1, KAES)
C1-USR1 C1-USR1
KAES
RSA Decryption (C2-USR1, KPR-USR1)
Cipher Text: C2-USR1 C2-USR1
42
* Dữ liệu mô phỏng được lưu trên các bảng như sau: Bảng 2.1 Table USER-KPU-1
USER-ID KPU
BKK KPU-BKK
USER1 KPU-USR1
USER2 KPU-USR2
...
Bảng 2.2 Table USER-EAES-1
USER-ID C1-USR C2-USR C2-BKK
USER1 C1-USR1 C2-USR1 C2-BKK
... ...
- Thuật toán 2: Khi bộ khóa RSA của User được sinh là (KPU-USR, KPR-USR ). Backup sử dụng khóa công khai KPU-BKKmã hóa khóa bí mật KPR-USRcủa User (việc mã hóa này chỉ thực hiện một lần duy nhất cho một User khi sinh bộ khóa KPU-USR,KPR-USR). Khi KPR-USR bị mất thì Backup sử dụng KPR-BKKđể giải mã khóa KPR-USR .
Backup sử dụng khóa công khai KPU-BKKmã hóa khóa bí mật KPR-USRcủa User: C KPR-USR = ERSA (KPR-USR , KPU-BKK)
Quá trình mã hóa và giải mã: + Đối với User:
Mã hóa:
43 C2-USR1 = ERSA (KAES, KPU-USR1) Giải mã:
KAES = DRSA (C2-USR1, KPR-USR1) P = DAES (C1-USR1, KAES)
+ Đối với Backup: Mã hóa:
Không thực hiện Giải mã:
KPR-USR1 = DRSA ( C KPR-USR1, KPR-BKK) KAES = DRSA (C2-USR1, KPR-USR1)
P = DAES (C1-USR1, KAES)
* Dữ liệu mô phỏng được lưu trên các bảng như sau: Bảng 2.3 Table USER-KPU-2
USER-ID KPU C-KPR-USR
BKK KPU-BKK
USER1 KPU-USR1 C KPR-USR1
USER2 KPU-USR2 C KPR-USR2
...
Bảng 2.4 Table USER-EAES-2
USER-ID C1-USR C2-USR
USER1 C1-USR1 C2-USR1
44
- Thuật toán 3: Sử dụng KAESduy nhất cho từng User để mỗi lần mã hóa P.
Khi sinh bộ khóa RSA của User là (KPU-USR, KPR-USR ) thì sinh luôn khóa KAES. Sau đó cả User và Backup sử dụng RSA mã hóa KAES bằng khóa KPU-USR , KPU-BKK tương ứng.
Mã hóa KAES đối với User: C KAES-USR = ERSA (KAES , KPU-USR) Mã hóa KAES đối với Backup: C KAES-BKK = ERSA (KAES , KPU-BKK) Quá trình mã hóa và giải mã:
+ Đối với User: Mã hóa:
KAES = DRSA ( C KAES-USR1 , KPR-USR1) C1-USR1 = EAES (P, KAES)
Giải mã:
KAES = DRSA ( C KAES-USR1 , KPR-USR1) P = DAES (C1-USR1, KAES)
+ Đối với Backup: Mã hóa:
Không thực hiện Giải mã:
KAES = DRSA ( C KAES-BKK , KPR-BKK) P = DAES (C1-USR1, KAES)
45
* Dữ liệu mô phỏng được lưu trên các bảng như sau: Bảng 2.5 Table USER-KPU-3
USER-ID KPU C-KAES-USR C-KAES-BKK
BKK KPU-BKK
USER1 KPU-USR1 C KAES-USR1 C KAES-BKK USER2 KPU-USR2 C KAES-USR2 C KAES-BKK ...
Bảng 2.6 Table USER-EAES-3
USER-ID C1-USR
USER1 C1-USR1
...
2.3 Giải pháp thay đổi khóa bí mật khi dữ liệu đã được mã hóa
Trong trường hợp User muốn thay đổi khóa bí mật KPR-USR , do khóa này bị lộ hay do nhu cầu cá nhân. Hiện tại tất cả dữ liệu mật đã được mã hóa và chỉ giải mã được bởi duy nhất khóa bí mật KPR-USR(ngoại trừ Backup). Như vậy vấn đề tiếp tục đặt ra là giải quyết như thế nào một khi KPR-USR đã thay đổi mới ? Chúng tôi đưa ra các giảipháp như sau:
- Giải pháp 1: Trước khi thay đổi khóa KPR-USR, User phải thực hiện giải mã tất cả dữ liệu đã được mã hóa. Sau khi thay đổi khóa KPR-USRthành công, User tiếp tục mã hóa lại dữ liệu theo khóa bí mật KPR-USR mới.
- Giải pháp 2: Lưu lại lịch sử dữ liệu cho mỗi lần thay đổi khóa KPR-USR theo từng User và thực hiện lấy dữ liệu cho lần lưu sau cùng (Input-time sau cùng) để lần tìm khóa KPR-USR gốc (cấp lần đầu, tương ứng với khóa KPU-USR đã mã hóa). Thuật toán được mô tả chi tiết như sau:
46
Do tất cả dữ liệu đã được mã hóa bằng khóa bí mật KPR-USR gốc (cấp lần đầu) nên bắt buộc hệ thống phải lưu lại KPR-USR này (dạng mã hóa để bảo mật) khi có thay đổi KPR-USR mới.
+ Khi thay đổi KPR-USRlần 1: ( KPR-USR-1 , KPU-USR-1 )
Thực hiện mã hóa KPR-USR gốc và lưu vào bảng USER-KPR-HISTORY trong CSDL:
C KPR-USR = ERSA (KPR-USR , KPU-USR-1) Trong đó:
o KPR-USR và ( KPR-USR-i , KPU-USR-i ) tương ứng KPR-USR gốc và (KPR-USR , KPU-USR) lần thay đổi thứ i (trường hợp này i=1).
Bảng 2.7 Table USER-KPR-HISTORY sau khi User1 thay đổi KPR-USR lần 1
USER-ID C-KPR-USR KPU-USR-I INPUT-TIME
USER1 C KPR-USR KPU-USR-1 22-OCT-2016 19:00
* Input-time: Hệ thống ghi nhận ngày giờ đã thực hiện thay đổi khóa bí mật KPR. Sau khi thay đổi khóa bí mật thành công, User đăng nhập vào hệ thống giải mã KPR- USR để sử dụnggiải mã dữ liệu theo các bước:
b1: KPR-USR = DRSA ( C KPR-USR, KPR-USR-1 ) b2: Sử dụng KPR-USR để giải mã dữ liệu. Trong đó:
47
o C KPR-USR ,KPU-USR-1 được lấy từ mẫu tin theo Input-time sau cùng tương ứng với User trong bảng USER-KPR-HISTORY.
o KPR-USR-1 là khóa bí mật hiện hành (đã thay đổi thành công lần 1). + Khi thay đổi KPR-USRlần 2: ( KPR-USR-2 , KPU-USR-2 )
Thực hiện giải mã rồi mã hóa lại KPR-USR gốc bằng KPU-USR-2 và lưu vào bảng USER-KPR-HISTORY trong CSDL:
KPR-USR = DRSA ( C KPR-USR, KPR-USR-1 ) C KPR-USR = ERSA (KPR-USR , KPU-USR-2) Trong đó:
o KPR-USR và ( KPR-USR-i , KPU-USR-i ) tương ứng KPR-USR gốc và (KPR-USR , KPU-USR) lần thay đổi thứ i (trường hợp này i=2).
o C KPR-USR ,KPU-USR-1 được lấy từ mẫu tin theo Input-time sau cùng tương ứng với User trong bảng USER-KPR-HISTORY
o KPR-USR-1 là khóa bí mật hiện hành (cũ) trước khi thay đổi khóa mới (lần 2). Bảng 2.8 Table USER-KPR-HISTORY sau khi User1 thay đổi KPR-USR lần 2
USER-ID C-KPR-USR KPU-USR-I INPUT-TIME
USER1 C KPR-USR KPU-USR-1 22-OCT-2016 19:00
USER1 C KPR-USR KPU-USR-2 22-OCT-2016 20:30
Sau khi thay đổi khóa bí mật thành công, User đăng nhập vào hệ thống giải mã KPR- USR để sử dụnggiải mã dữ liệu theo các bước:
b1: KPR-USR = DRSA ( C KPR-USR, KPR-USR-2 ) b2: Sử dụng KPR-USR để giải mã dữ liệu.
48 Trong đó:
o KPR-USR là KPR-USR gốc (giải mã được tất cả dữ liệu mã hóa).
o C KPR-USR ,KPU-USR-2 được lấy từ mẫu tin theo Input-time sau cùng tương ứng với User trong bảng USER-KPR-HISTORY.
o KPR-USR-2 là khóa bí mật hiện hành (đã thay đổi thành công lần 2).
+ Tương tự thực hiện thay đổi KPR-USR cho các lần 3,4,...và thực hiện tương tự cho các User khác.
* Để xác thực thông tin người dùng (UserName, Password, PrivateKey) hợp lệ trước khi hệ thống chấp nhận cho thay đổi khóa bí mật, chữ ký số sử dụng hệ mã hóa RSA được ứng dụng để giải quyết vấn đề này. Do khóa bí mật hệ thống không lưu, vì vậy giải pháp sử dụng kỹ thuật chữ ký số để xác nhận “Old PrivateKey” là đúng hay không theo các bước sau: Chữ ký số = ERSA (MD5(Username) , KPR) . Hệ thống kiểm tra: DRSA (Chữ ký số , KPU) = MD5(Username). Trong đó:
- ERSA . DRSA : Mã hóa, giải mã bằng hệ mã RSA. - MD5: Mã hóa bằng hàm băm MD5.
- KPR, KPU, Username và Password: Khóa bí mật, khóa công khai, tên đăng nhập và mật khẩu của Userđăng nhập.
49
Sơ đồ kiểm tra xác thực thông tin người dùng (Username, Password, PrivateKey) trước khi hệ thống chấp nhận cho thay đổi khóa bí mật:
Hình 2.7 Sơ đồ kiểm tra xác thực thông tin đăng nhập khi thay đổi khóa bí mật.
Tiểu kết chương 2
Kết hợp hệ mật mã khóa công khai (RSA) và hệ mật mã khóa đối xứng (AES) để mã hóa dữ liệu, được ứng dụng để xây dựng giải pháp bảo vệ tính bí mật và tính riêng tư dữ liệu trong CSDL bằng phương pháp mã hóa. Chúng tôi đã xây dựng giải pháp kết hợp RSA-AES để mã hóa dữ liệu trong CSDL và đưa ra 3 thuật toán theo giải pháp này. Giải pháp đề xuất đảm bảo tin cậy và hiệu quả vì những lý do sau:
User nhập: -Username -Password
-PrivateKey Hệ thống kiểm tra: Username và Password Hợp lệ ? Thoát: Đăng nhập không thành công Băm: MD5(Username) Mã hóa: ERSA (MD5(Username) , KPR) Username Username, Password PrivateKey (KPR) Đúng Sai Chữ ký số Hệ thống giải mã: DRSA (Chữ ký số , KPU) So sánh ? Kết thúc: Đăng nhập thành công Sai Đúng Hệ thống: PublicKey KPU
50
- Giải pháp kết hợp RSA-AES mang lại hiệu quả cao trong quá trình mã hóa và giải mã. Do tốc độ của thuật toán RSA chậm hơn rất nhiều so với thuật toán mã hóa khóa đối xứng AES, vì lý do này nên chúng tôi không sử dụng thuật toán RSA để xử lý (mã hóa và giải mã) trực tiếp trên dữ liệu mà kết hợp với một thuật toán AES để mã hóa và giải mã dữ liệu. Kết hợp RSA-AES cũng đã được đề xuất áp dụng trong [4], [13], [14], [15], [16].
- Trong phạm vi nghiên cứu của đề tài, tính bí mật và tính riêng tư của dữ liệu được lưu trong CSDL luôn đảm bảo trước mọi tấn công:
+ Truy cập vào CSDL trái phép (từ bên ngoài, nội bộ bên trong hay DBA): Do dữ liệu được lưu trữ trên các bảng trong CSDL (thể hiện trên “DBMS” trong hình 2.3, hình 2.4) đã bị mã hóa (ngoại trừ khóa công khai).
+ Lấy cấp tập tin CSDL: Do dữ liệu đã được mã hóa trên các tập tin được lưu trữ trên ổ đĩa (thể hiện trên “STORAGE LAYER” trong hình 2.3, hình 2.4). - Không chỉ trong CSDL, tính bí mật và tính riêng tư của dữ liệu cũngđược bảo
vệ trên đường truyền (dữ liệu đã được mã hóa thể hiện trên “NETWORK” trong hình 2.3, hình 2.4).
Ở trong chương 2, các giải pháp nhằm nâng cao tính tiện ích và giải quyết các vấn đề liên quancũng được trình bày:
+ Giải pháp dự phòng để giải mã dữ liệu mã hóa trong trường hợp khóa bí mật bị mất.
+ Giải pháp thay đổi khóa bí mật khi dữ liệu đã được mã hóa.
+ Sơ đồ kiểm tra xác thực thông tin đăng nhập khi thay đổi khóa bí mật bằng cách ứng dụng chữ ký số sử dụng hệ mã RSA.
Trong chương tiếp theo, chúng tôi sẽ xây dựng chương trình thử nghiệm theo các giải pháp và thuật toán đã đề xuất.
51
CHƯƠNG 3:
XÂY DỰNG CHƯƠNG TRÌNH VÀ KẾT QUẢ THỬ NGHIỆM
3.1 Xây dựng chương trình
3.1.1 Bài toán thực nghiệm
Xây dựng chương trình thực nghiệm theo các giải pháp đã đề xuất: bảo vệ tính bí mật dữ liệu vị trí kho (Location) của hàng hóa vận chuyển bằng đường hàng không (không vận đơn-Airway Bill).
Vị trí kho của lô hàng được vận chuyển bằng đường hàng không cần được bảo mật thông tin trong quá trình khai thác. Điều này đặc biệt quan trong đối với những lô hàng cần được bảo mật cao trong quá trình khai thác như: chống mất trộm đối với những hàng hóa quí hiếm, tránh sai sót trong quá trình khai thác đối với nhân viên không được giao nhiệm vụ, hàng hóa cần theo dõi nhằm mục đích điều tra,..Như vậy bài toán đặt ra là thông tin vị trí của lô hàng chỉ có nhân viên được giao nhiệm vụ hoặc đang khai thác lô hàng này mới biết được, thông tin này cũng cần được bảo mật ngay cảngười quản trịviên cơ sở dữ liệu.
Thông tin vịtrí kho cũng được lưu trong cơ sở dữ liệu chung với các thông tin khác của không vận đơn, thông tin này được bảo mật bằng phương pháp mã hóa. Đối với nhân viên được giao nhiệm vụ thì dữ liệu mã hóa theo khóa công khai của nhân viên này, đối với nhân viên đang khai thác lô hàng thì sử dụng chính khóa công khai của mình để mã hóa.
Do dữ liệu vị trí trí kho đã mã hóa và chỉ giải mã được từ khóa bí mật tương ứng của người dùng, như vậy chương trình cần phải có giải pháp dự phòng để giải mã dữ liệu khi người dùng quên mất khóa bí mật hay cơ quan có nhu cầu cần thiết giải mã. Nâng cao tiện ích, chương trình cũng cho phép người dùng thay đổi khóa bí