Dễ dàng nhận ra rằng, để có thể xây dựng được một giao thức đảm bảo các yêu cầu của Query Assurance trong trường hợp tổng quát là một công việc cực kỳ khó khăn. Do vậy, một hướng tiếp cận mới để giải quyết bài toán này một cách tương đối hoàn chỉnh là đi vào giải quyết nó trong từng trường hợp dữ liệu, truy vấn cụ thể..
Radu Sion, Bogdan Carbunar [12] trình bày một giao thức dùng để truy vấn các dữ liệu mã hóa dựa trên từ khóa có thể đảm bảo các yêu cầu privacy cũng như query assurance.
Các tài liệu được lưu thành những vùng riêng lẻ (file), mỗi tài liệu sẽ có một số lượng từ khóa (keyword) nhất định. Số các từ khóa cho mỗi tài liệu đã được liệt kê trước khi được đưa lên server. Bài toán đặt ra là có thể thực hiện truy vấn tài liệu dựa và một hay nhiều từ khóa cho trước.
Mỗi tài liệu được gán với một con số định danh di ngẫu nhiên, duy nhất, không liên quan đến nội dung của tài liệu đó. Do số lượng từ khóa đã được xác định trước, ứng với mỗi từ khóa này, xây dựng một tập các định danh của tài liệu có chứa từ khóa, gọi là KDS (keyworddocumentsets). Các KDS có thểđược đặt tại chính các querier. Hay có thể được đặt ở server. Lúc này, các KDS cần được mã hóa và được chứng thực. Mỗi KDS có thể được mã hóa bởi một khóa khác nhau. Khóa này có thể được tính như sau: Keyi = H(key || ki), trong đó: H() là hàm băm một chiều; key : là khóa dùng chung; ki là từ khóa tương ứng với KDSi. Để tránh trường hợp server có thể loại bỏ
một entry trong KDS, mỗi KDS cần được bổ sung thêm một giá trị dùng để kiểm tra, giá trị này được tính toán như sau: Hcheck = H(d4||H(d3||H(d2||H(d1||0)))), với giả thiết KDS = {d4, d3, d2, d1}.
Một phương thức để lưu trữ các KDS là dưới dạng ma trận, cột là các định danh của tất cả tài liệu, dòng là tất cả các từ khóa, mỗi cell trong ma trận sẽ nhận giá trị 0 hay 1 tùy vào tài liệu có chứa từ khóa đó hay không. Ma trận này, gọi là ma trận C, sẽ qua một phép biến đổi để trở thành C’ như sau:
C’i,j = last_bit(F(ki , Rj , Cij))
trong đó: F là hàm bitwise pseudo-random function, Rj là một số ngẫu nhiên phát sinh bởi hàm sinh số ngẫu nhiên G với một random seed R cốđịnh.
Câu truy vấn query = {k1, k2,…, kq} được thực hiện bằng cách gởi yêu cầu đến server
để lấy về các hàng tương ứng với các từ khóa. Querier lần lượt phát sinh lại các giá trị
Rj, và thực hiện tính lại ma trận Cij như sau: nếu last_bit(F(ki , Rj ,0)) = Cij thì Cij = 0,
ngược lại Cij= 1. Sau khi tính lại được ma trận C, querier hoàn toàn có thể xác định chính xác có danh sách các định danh tài liệu cần tìm. Từ các định danh, querier có thể yêu cầu server trả vềđúng các tài liệu yêu cầu.
Do querier biết được chính xác danh sách các định danh tài liệu cần lấy, nên, một cách hoàn toàn tự nhiên, có thể kiểm tra được tính đầy đủcủa kết quả trả về. Đểđảm bảo tính privacy, có thể sử dụng các PIR-like protocol.