Đây là một cái gì đó tôi đã làm việc trên.
Tôi muốn "nhỏ" bên dưới nhỏ hơn nhiều so với những gì tiếp theo. Nhưng điều này sẽ phù hợp với mục đích của bạn đối với một tập hợp các chuỗi nhị phân $S$, hàm băm mật mã $H(x)$và khóa chia sẻ trước $k$.
$H(S)=\text{sort} \{H(x) | x \in S\}$. Gọi đây là nhân chứng công khai cho $S$. Bạn có thể ẩn kích thước của tập hợp bằng cách đưa các giá trị băm ngẫu nhiên vào một mô đun độ dài nhất định. Đây sẽ là một nhân chứng công khai không có tính chính trực, nhưng đưa ra ý tưởng cơ bản.
Giả sử kích thước của $x$ nói chung là lớn hơn nhiều so với $H(x)$, đại diện của nhân chứng $H(S)$ vì $S$ là nhỏ so với đại diện cho $S$.
Nếu bạn muốn hạn chế điều này đối với những người có khóa đối xứng được chia sẻ trước k: (Tôi sử dụng $+$ cho append để phân biệt với tập hợp "như vậy")
$H^2(k+S)=\text{sort} \{H(k+H(k+x)) | x \in S\}$. Nối một keyed-checksum để kiểm tra tính toàn vẹn.
$\text{nhân chứng cho S}: H^2(k+S) + H(k+H^2(k+S))$
Một lần nữa, để ẩn kích thước của $S$ bạn luôn có thể thêm các giá trị băm ngẫu nhiên vào kích thước tối đa hoặc (không hoàn hảo) vào mô đun kích thước.
Kiểm tra tư cách thành viên: gửi $(n,H(k+n) \bigoplus H(k+x))$ ở đâu $n$ là một số gia tăng (nó có thể được ngụ ý chẳng hạn như dấu thời gian). Người nhận có thể khám phá $H(k+x)$ và sau đó tính toán $H(k+H(k+x))$ để xem nó có trong tập nhân chứng hay không.