Một lợi thế trong lược đồ thủy vân đề xuất của Hamed K. và cộng sự [26] là khả năng khôi phục dữ liệu gốc tại các ô bị thay đổi cơ sở dữ liệu quan hệ. Khi phát hiện lỗi tấn công đơn, thuật toán này có thể khôi phục được dữ liệu gốc. Vấn
đề khôi phục dữ liệu có thể thực hiện được trong thuật toán do sử dụng toán tử XOR có khả năng nhớ giá trị của các ô dữ liệu trong cơ sở dữ liệu quan hệ gốc. Toán tử XOR được sử dụng trong phần nhúng thủy vân. Khi nhúng thủy vân thuộc tính, sử dụng toán tử XOR như là một hàm băm sinh mã thủy vân thuộc tính. Các
giá trị đầu vào của toán tử XOR dùng để sinh ra thủy vân thuộc tính thứ j (W1j) là
các giá trị thuộc tính thứ j của nhóm và giá trị đầu ra của toán tử này đã được nhúng vào các giá trị của thuộc tính thứ p(j) của nhóm. Vì vậy, khi giá trị của một ô trong các giá trị của thuộc tính thứ j tại một bộ trong nhóm bị sửa đổi thì có thể trích ra thủy vân thuộc tính gốc thứ j của nhóm (W*1j). Sau đó sử dụng tính chất của toán tử XOR, có thể khôi phục giá trị gốc của ô đã bị sửa đổi. Quá trình khôi phục dữ liệu gốc được thể hiện trong thuật toán khôi phục sau đây.
Thuật toán khôi phục
Input: Nhóm Gk, khóa thủy vân K
Output: ô đã bị sửa được khôi phục
1. for j= 1 to do 2. if (!V1j) then 3. cot_bi_thay_doi = j 4. Break 5. end if 6. end for 7. for i = 1 to qk do 8. if (!V2i) then 9. hang_bi_thay_doi = i 10. Break 11. end if 12.end for
13.S = K // K là khóa thủy vân
14.for i= 1 to qk do
15. if (i hang_bi_thay_doi) then
16. S = S XOR ri.Acot_bi_thay_doi //trừ 2 bit LSB của
ri.Acot_bi_thay_doi khi thực hiện XOR
17. end if
19. for i = 1 to qk do
20. W*1cot_bi_thay_doi(i)= bit LSB của ri.Ap(cot_bi_thay_doi)
21. end for
22. rhang_bi_thay_doi.Acot_bi_thay_doi = W*1cot_bi_thay_doi XOR S
Trong thuật toán này, sau khi khoanh vùng cơ sở dữ liệu, sẽ tìm được các vị
trí của hàng bị thay đổi và cột bị thay đổi nhờ V1j = false và V2i = false.
Ở đây, thuật toán chỉ có thể khôi phục lại dữ liệu tại một ô dữ liệu.
Sau khi xác định thủy vân, sẽ tìm ra hàng và cột bị thay đổi nhờ 2 vòng lặp
for đầu tiên.
Gán giá trị cần khôi phục chính là chuỗi bit của khóa thủy vân.
Tiếp theo, với ô bị thay đổi, tiến hành XOR chuỗi bit của khóa thủy vân với tất cả các giá trị ở ô có thuộc tính là cột bị thay đổi trừ ra chính ô bị thay đổi và 2 bit ít ý nghĩa nhất.
Tìm lại giá trị thủy vân chính là bit ít ý nghĩa nhất của ri.Ap(j) với p(j) đã
được tìm ở thuật toán trước và j chính là cột bị thay đổi.
Tiến hành XOR giá trị của chuỗi thủy vân với giá trị đã XOR ở trên tìm được giá trị của ô bị thay đổi nhưng thiếu đi 2 bit ít ý nghĩa nhất. Hai giá trị này sẽ được cho thêm vào hoặc đặt mặc định (00). Khi đó, kết quả chính là giá trị cần tìm.