Devanbu [20] đề xuất một ý tưởng mà có thể thuận lời để lưu giữ cơ sở dữ liệu quan hệ trên các nút không tin cậy. Ý tưởng cở bản như sau:
- Người sở hữu dữ liệu gửi quảng bá một thông điệp đến các nút mà họ sẽ truy vấn quan hệ. Thông điệp này được lấy từ gốc của một cây băm Merkle xây dựng trên quan hệ này. Một cây băm Merkle là một cây nhị phân mà nút lá thứ i có giá trị băm Hi thu được bằng cách áp dụng hàm băm h trên bộ thứ i. Tức là Hi = h(h(ti . A1) || h(ti . A2) || ... h(ti . An)) đối với một quan hệ có n thuộc tính. Các nút khác trên cây cũng được tạo ra bằng cách tính giá trị băm của các nút con của nó. Hình 2.1 cho thấy một ví dụ về một cây băm Merkle. Ở đây, có 4 bộ. H1 đến H4 là những giá trị băm của bốn bộ tương ứng từ t1 đến t4. Nút cha của t1và t2có giá trị băm được tính: H12 = h(H1|| H2).Thông điệp cho 4 bộ là Hr.
- Đối với một truy vấn, nút không tin cậy đánh giá truy vấn và trả về cùng với các bộ trả lời một đối tượng xác minh gọi là VO. Về bản chất, VO là một cây con được tạo ra từ cây băm Merkle trên quan hệ này. Để một truy vấn chính xác được trả về từ một bộ đơn cần tìm đường đi từ bộ đó đến gốc tương đương với việc tìm các nút trung gian giữa bộ đó với nút gốc, đó là một dạng của VO. Ví dụ, để tìm được t2, VO gồm các nút H1 và
H34. Đối với một truy vấn phức tạp, như có thể thấy truy vấn q trong hình 2.1(b),VO cũng rất phức tạp. Ở đây GLB(q) và LUB(q) biểu thị giá trị lớn nhất nhỏ hơn so với câu trả lời của q và giá trị nhỏ nhất lớn hơn các câu trả lời của q. LCA(q) là giá trị giao nhau của các cây con và nó giới hạn những câu trả lời từ GLB(q) đến LUB(q).VOtrong trường hợp này bao gồm các nút cần thiết để xác định 3 đường: từ GLB(q) đến LCA(q), từ LUB(q) đến
LCA(q) và từ LCA(q) đến gốc.
- Khi nhận được câu trả lời và VO, nút truy vấn sẽ xác minh tính đúng đắn của câu trả lời bằng cách tính lại thông điệp sử dụng câu trả lời và VO.
Hình 2.1(b): Miền xác thực liên tục
Chúng ta lưu ý rằng các giá trị GLB(q) và LUB(q) cần thiết để xác minh tính đầy đủ của các câu trả lời. Nếu kết quả thu được giống với kết quả cung cấp bởi chủ sở hữu, thì câu trả lời trả về bởi nút không tin cậy là chính xác và đầy đủ. Tiếp tục với ví dụ trên, để xác minh t2 không bị giả mạo, client làm các công việc sau: đầu tiên nó tính H2’; với
H1 và H2’ có thể xác định được H12’; và cuối cùng, kết hợp H12’ và H34 để tính Hr’. Nếu
Hr = Hr’ thì t2 không bị giả mạo. Lưu ý ở đây là client đã được giả định là đã có Hr từ chủ sở hữu. Ngoài ra, Hr có thể được ký bởi chủ sở hữu (với khóa riêng của họ) và được coi như một phần của VO; trong trường hợp này, client có thể tự xác minh xem Hr’ có giống với chữ ký Hr (với khóa công khai của chủ sở hữu) hay không.
Davanbu[20] và các đồng nghiệp của mình cũng trình bày cách xác định VO cho các thao tác SQL như selection, projection, join và set có thể được tính bằng cách sử dụng kỹ thuật này. Tuy nhiên với kỹ thuật này cũng đặt ra 3 điểm hạn chế:
1. Do các cách sắp xếp khác nhau của các bộ trong một bảng dẫn đến các cây băm Merkle khác nhau, khi sự sắp xếp các bộ thay đổi, nó cần tái tạo lại cây băm Merkle theo sự sắp xếp trong bảng. Kết quả là hệ thống phải chịu chi phí cao cho việc cập nhật dữ liệu. Hơn nữa, nếu bảng được sắp xếp theo các cách khác nhau, nó sẽ tạo ra các cây băm Merkle khác nhau, vì thế tổng phí để lưu trữ các cây băm Merkle là rất lớn.
2. Vì đối tượng xác minh VO cho một kết quả truy vấn chứa tất cả các nút trong đường đi từ nút chứa kết quả truy vấn đến nút gốc dẫn đến kích thước của VO là tỷ lệ thuận với kích thước của kết quả truy vấn và bằng logarit kích thước của bảng. Kết quả là nếu kích thước của kết quả truy vấn lớn thì kéo theo kích thước của VO
cũng sẽ lớn.
3. Vì hàm băm được áp dụng trên tất cả các bộ, để xác định VO của một kết quả truy vấn, nó cần gửi tất cả các bộ của kết quả truy vấn đến nơi phát ra truy vấn. Do đó việc xác minh được thực hiện tại nơi phát ra truy vấn có thể gây ra sự tiêu thụ tài nguyên rất lớn bộ lọc lọc ra các thuộc tính. Ngoài ra, yêu cầu gửi tất cả các bộ của kết quả truy vấn làm giới hạn kỹ thuật này trong việc hỗ trợ kiểm soát truy cập ở mức cột, tức là không thể cho phép một người dùng truy cập một số cột trong khi không cho người khác truy cập.
Để khắc phục những hạn chế trên, Pang và Tan [21] đã đưa ra một cây B xác thực (Verifiable B-Tree – VB-Tree). Giải pháp này có thể tạo ra một đối tượng VO của một truy vấn không phụ thuộc vào kích thước của kết quả truy vấn và độc lập với kích thước của bảng và cho phép việc xác minh được thực hiện tại các nút cung cấp kết quả truy vấn thay vì ở các nút phát ra truy vấn. Ngoài ra, giải pháp này cũng cho phép việc cập nhật được thực hiện tự động không vi phạm tính nhất quán của dữ liệu. Một ví dụ về một cây VB được thể hiện trong hình 2.2. Cấu trúc cây này được xây dựng trên ba ý tưởng cơ bản sau:
- Thứ nhất, cây VB tạo các ký tự chữ ký cho tất cả các thuộc tính trong một bộ và sử dụng các ký tự chữ ký để tính toán các ký tự chữ ký của bộ đó. Đặc biệt, để tạo ra một
ký tự chữ ký cho một thuộc tính, đầu tiên hệ thống sử dụng hàm băm một chiều như MD5 hoặc SHA-1 để băm chuỗi (tên của cơ sở dữ liệu, bảng, bộ, khóa của bộ, giá trị của thuộc
tính). Giá trị của kết quả này sau đó được ký với khóa bí mật của cơ sở dữ liệu. Bằng cách này, hệ thống cần có một máy chủ đáng tin cậy để lưu giữ các khóa công khai của cơ sở dữ liệu và một nguồn chứng thực như chứng thực cơ sở hạ tầng khóa công khai X.509 và CRL Profile [22], cho phép người dùng lấy khóa công khai của cơ sở dữ liệu để sử dụng trong việc tính ngược.
Hình 2.2: Cây VB
- Thứ hai, giải pháp này sử dụng hàm băm h(x) = gx mod q để tạo ra giá trị băm cho các nút trong cây VB. Vì hàm băm này có tính chất quan trọng đó là h(x+y) = h(y+x),
bằng cách sử dụng hàm băm này cho phép hệ thống tính các thông điệp của các nút trên cây ở một bậc tùy ý, do đó tránh được vấn đề đầu tiên trong hệ thống sử dụng cây băm Merkle để thực hiện tại nút giữ kết quả truy vấn và vì thế tránh được vấn đề thứ ba của hệ thống sử dụng cây băm Merkle.
- Cuối cùng, để giảm bớt vấn đề thứ hai của cây băm Merkle, đối tượng VO của một kết quả truy vấn trong một cây VB chỉ cần chứa các nút trên cây thuộc cây con nhỏ nhất bao gồm tất cả các kết quả truy vấn. Giải pháp này rất khả thi do hệ thống duy trì một thông điệp chữ ký cho mỗi nút trong cây VB. Một ví dụ để làm rõ cách mà một đối tượng xác minh VO được tạo ra như thế nào được thể hiện trong hình 2.3.
Hình 2.3: Quá trình tính đối tượng xác minh VO