Cơ sở dữ liệu quan hệ chứa các thuộc tính phân loại là cơ sở dữ liệu quan hệ mà các thuộc tính khơng chấp nhận được những thay đổi, khi thuộc tính bị thay đổi sẽ dẫn tới cơ sở dữ liệu quan hệ bị thay đổi. Vì vậy, thủy vân cơ sở dữ liệu quan hệ chứa các thuộc tính phân loại dựa trên ý tưởng đổi chỗ các bộ trong cơ sở dữ liệu quan hệ mà khơng làm thay đổi chính cơ sở dữ liệu quan hệ đĩ
Để nhúng thủy vân cho cơ sở dữ liệu quan hệ cĩ thuộc tính phân loại ta chia cơ sở dữ liệu quan hệ thành các nhĩm, sau đĩ thực hiện nhúng thủy vân cho từng nhĩm sử dụng phương pháp đổi chỗ các bộ trong nhĩm. Sau đây là bảng các ký hiệu được sử dụng trong lược đồ thủy vân cơ sở dữ liệu quan hệ chứa các thuộc tính phân loại
Bảng 2.1. Các ký hiệu và các tham số sử dụng trong lược đồ thủy vân cơ sở dữ liệu quan hệ chứa các thuộc tính phân loại
Ký hiệu Mơ tả
y Số thuộc tính của quan hệ
Số bộ dữ liệu của quan hệ
g Số nhĩm của bảng
V Số bộ trung bình trong một nhĩm
hi Giá trị hash của bộ thứ i trong bảng hoặc trong 1 nhĩm
Hi Giá trị hash của khĩa chính của bộ thứ i trong bảng hoặc trong 1 nhĩm
Gk Nhĩm thứ k
qk Số bộ trong nhĩm thứ k
ri Bộ dữ liệu thứ i trong bảng hoặc trong một nhĩm
ri.Aj Thuộc tính thứ j của bộ thứ i trong bảng hoặc trong một nhĩm
K Khĩa nhúng thủy vân
W Thủy vân được nhúng vào một nhĩm
W* Thủy vân được trích ra được từ một nhĩm đã được thủy vân
V Kết quả xác minh thủy vân
2.2.1.Thuật tốn nhúng thủy vân
Qui trình nhúng thủy vân được thực hiện bằng các thuật tốn 1 và 2, trong đĩ thuật tốn 2 dùng để nhúng thủy vân vào một nhĩm, thuật tốn 1 chia cơ sở dữ liệu thành g nhĩm và gọi thuật tốn 2 để nhúng thủy vân vào tất cả các nhĩm, HASH là một hàm băm mật mã.
Giả sử cĩ một cơ sở dữ liệu quan hệ với một khĩa chính là P và y thuộc tính được ký hiệu là T(P, A1, A2, …., Ay), số nhĩm cần chia là g và khĩa thủy
vân là một số nguyên bí mật K.
Thuật tốn 1: Nhúng thủy vân
1. for k = 1 to g do // khởi tạo chỉ số và các nhĩm
2. qk = 0
3. Gk =
4. end for
5. for i = 0 to do // chia các bộ thành g nhĩm
6. Hi = HASH (K, ri.P) // lấy giá trị hash của khĩa thủy
vân và giá trị khĩa chính của bộ
7. k = Hi mod g // xác định nhĩm
9. qk + +
10. end for
11. for k = 1 to g do
12. Gọi thuật tốn 2 để nhúng thủy vân vào nhĩm Gk
13. end for
Giải thích thuật tốn 1:
Đầu tiên, g chỉ số qk được khởi tạo bằng 0 để chứa số bộ của từng nhĩm và g nhĩm Gk được khởi tạo bằng rỗng để chứa các bộ thuộc nhĩm.
Tiếp theo là vịng lặp phân chia các bộ của quan hệ vào các nhĩm cĩ chỉ số bằng phần dư của phép chia của giá trị băm của khĩa nhúng thủy vân K ghép với giá trị khĩa chính của bộ dữ liệu cho g (lệnh thứ 6). Việc chia nhĩm này chỉ là một hoạt động ảo, khơng làm thay đổi vị trí vật lý của các bộ dữ liệu trong cơ sở dữ liệu quan hệ. Cuối cùng, là việc nhúng thủy vân vào trong từng nhĩm được thực hiện trong thuật tốn 2 (lệnh 12).
Thuật tốn 2: Nhúng thủy vân trong nhĩm Gk
1. Sắp qk bộ của Gk tăng dần theo giá trị hash của khĩa chính
2. for i=1 to qk do
3. hi = HASH( K, ri.A1, ri.A2, …., ri.Ay) // giá trị hash của bộ thứ i 4. end for
5. H = HASH (K, h1, h2, ...,hqk ) // giá trị hash của nhĩm Gk
6. W = ExtractBits(H,[qk /2]) // [qk /2] là phần nguyên
của qk /2
// W là chuỗi bit được trích từ H 7. for i = 1, i < qk , i = i +2 do
8. if (W[i/2]==1 and hi <hi+1 ) or (W[i/2]==0 and hi >hi+1) then
9. đổi thứ tự bộ ri cho bộ ri+1
11. end for
12. ExtractBits ( H, l ) {
13. if length (H) > l then
14. W được gán bằng l bit đầu tiên của H 15. else
16. m = l – length (H)
17. W được gán bằng H ghép với ExtractBits (H,m)
18. end if
19. return W }
Giải thích thuật tốn 2:
Thuật tốn 2 thực hiện việc nhúng thủy vân vào nhĩm Gk. Đầu tiên, các bộ trong nhĩm sẽ được sắp tăng dần theo giá trị hash của khĩa chính. Việc sắp xếp này chỉ là hoạt động ảo nghĩa là vị trí vật lý của các bộ dữ liệu trong cơ sở dữ liệu quan hệ khơng hề bị thay đổi.
Sau đĩ, các lệnh 2 - 4 tính các giá trị hash hi của khĩa thủy vân K ghép với các giá trị thuộc tính (trừ khĩa chính) của bộ dữ liệu ri đã sắp trong nhĩm
Gk. Vì các thuộc tính cĩ thể cĩ kiểu tùy ý nên chúng ta sẽ mã hĩa mỗi giá trị
thuộc tính bằng một số nguyên, ví dụ một thuộc tính kiểu xâu ký tự cĩ thể mã hĩa bằng cách ghép các mã ASCII của ký tự thành một xâu.
Tiếp theo, giá trị hash H của nhĩm Gk được tính bằng cách ghép khĩa thủy vân K với các giá trị hash hi của các bộ dữ liệu trong nhĩm Gk. Đến đây, một dãy bit W cĩ độ dài bằng một nửa số bộ của Gk sẽ được trích ra từ giá trị hash H của nhĩm Gk. W được gọi là thủy vân nhúng một cách danh nghĩa vào nhĩm Gk. Hàm ExtractBits được viết trong các lệnh từ 12 đến 19 thực hiện
việc trích ra l bít từ một chuỗi bít H hỗ trợ cho việc trích các bit thủy vân W. Cuối cùng, là việc nhúng thủy vân W một cách danh nghĩa vào nhĩm G . Việc nhúng thủy vân này thực chất chỉ là đổi chỗ các bộ dữ liệu cho nhau.
Việc đổi chỗ được thực hiện cho từng cặp bộ dữ liệu trong nhĩm Gk. Cĩ thể cĩ những cặp bị đổi chỗ hoặc khơng tùy theo giá trị bit của thủy vân W và giá trị hash của hai bộ dữ liệu trong cặp. Trong lược đồ này, tơi sử dụng điều kiện đổi chỗ như đã thực hiện trong thuật tốn, tuy nhiên cũng cĩ các cách sử dụng các điều kiện khác để thực hiện đổi chỗ. Việc chia nhĩm và phân loại dữ liệu là hai hoạt động rất quan trọng. Nĩ đảm bảo cho một số mối quan hệ giữa các bộ dữ liệu để nhúng thủy vân và trích xuất thủy vân được đồng bộ.
2.2.2. Thuật tốn phát hiện thủy vân
Sau khi nhúng thủy vân bằng các thuật tốn 1 và 2, chúng ta sẽ tiến hành tìm lại thủy vân để kiểm tra tính tồn vẹn của cơ sở dữ liệu quan hệ cũng như phát hiện xem cĩ các giả mạo nào trong cơ sở dữ liệu quan hệ đã nhúng thủy vân hay khơng.
Để tìm lại thủy vân, cần phải biết khĩa nhúng thủy vân K và số lượng
các nhĩm g. Các thuật tốn 3 và 4 mơ tả thuật tốn phát hiện thủy vân trong
dữ liệu phân loại:
Thuật tốn 3: Phát hiện thủy vân
1. for k=1 to g do 2. qk = 0 3. Gk = end for 4. for i = 0 to do 5. Hi = HASH( K, ri.P ) 6. k = Hi mod g 7. ri Gk // đưa bộ ri vào nhĩm Gk 8. qk + + 9. end for
11. Gọi thuật tốn 4 để phát hiện thủy vân trong Gk 12. end for
Giải thích thuật tốn 3: khi ta cĩ khĩa thủy vân K và số lượng nhĩm g,
ta bắt đầu các bước của thuật tốn 3.
Đầu tiên, khởi tạo Gk để lưu các bộ dữ liệu của nhĩm thứ k, khởi tạo qk để lưu số phần tử của nhĩm thứ k.
Tiếp theo, tính giá trị hash của khĩa thủy vân K ghép với giá trị khĩa
chính của từng bộ. Dựa vào giá trị hash này, các bộ của quan hệ sẽ được đưa vào các nhĩm tương ứng. Việc chia nhĩm chỉ là một hoạt động ảo khơng làm thay đổi vị trí vật lý của các bộ trong quan hệ.
Cuối cùng, việc phát hiện thủy vân trong nhĩm Gk sẽ được thực hiện bằng thuật tốn 4.
Thuật tốn 4: Phát hiện thủy vân trong nhĩm Gk
1. Sắp xếp các bộ dữ liệu trong Gk theo giá trị hash của khĩa chính 2. for i=1 to qk do
3. hi = HASH( K, ri.A1, ri.A2, …., ri.A ) // giá trị hash của bộ ri
4. end for
3. H = HASH (K, h1, h2, ...,hqk )
4. W = ExtractBits(H,[qk / 2] ) // [qk /2])là phần nguyên của qk /2
// W là chuỗi bit được trích từ H 5. for i = 1, i < qk , i = i +2 do 6. if hi < hi+1 then 7. W* [i/2] = 0 8. esle 9. W* [i/2] = 1 10. end if 11. end for
12. if W* == W then
13. V = true 14. esle
15. V = false 16. end if
Giải thích thuật tốn 4: Gần giống như thuật tốn 2, thuật tốn 4 cũng
thực hiện các q trình sắp xếp, tính các giá trị hash hi của các bộ và giá trị hash H của nhĩm. Dựa vào các giá trị hash này, một thủy vân W được trích ra bằng hàm ExtractBits (H, qk /2) ở đây qk /2 là số lượng các cặp bộ dữ liệu của nhĩm Gk. Sau đĩ, dựa vào điều kiện nhúng thủy vân trong thuật tốn 2, thuật tốn 4 trích ra giá trị của các thủy vân đã được nhúng trong Gk. Gọi thủy vân
này là W* . So sánh W với W*, nếu chúng trùng nhau tức là khơng cĩ giả mạo ngược lại thì cĩ giả mạo trong nhĩm Gk đang xét.
Ở đây, tơi cĩ một cải tiến cho phép xác định cụ thể hơn vị trí mà bắt đầu xảy ra giả mạo trong nhĩm Gk. Tuy nhiên, độ tin cậy của việc phát hiện ra vị trí giả mạo vẫn chưa cao. Nhưng đây cĩ thể là một hướng cĩ thể phát triển để khoanh vùng sát hơn trong từng nhĩm nhằm tăng cường khả năng tiếp tục sử dụng dữ liệu ngay cả khi phát hiện cĩ giả mạo trong một nhĩm nào đĩ.