Tôi không rõ (không nhìn thấy mã của bạn) vấn đề hiện tại của bạn là gì.
Liếc qua tờ giấy, tôi thấy (ví dụ trong hình 1):
(đối tượng tùy ý) $c_1,\dots, c_v$ và $s_1,\dots, s_v$
băm của các đối tượng này, được viết $hc_i = H(c_i)$ và $hs_i = H(s_i)$ (tối đa một hoán vị được áp dụng cho $s_i$).
Tất cả các hoạt động còn lại là về mặt $hc_i$ và $hs_i$, có vẻ như (từ ngữ cảnh) trong $\mathbb{Z}_p^*$, tức là số học là tiêu chuẩn (mặc dù có khả năng là bạn phải chọn $p$ đủ lớn sao cho bài toán logarit rời rạc là khó, do đó $\gg 1000$ chút ít. Đặc biệt, bạn có thể nên sử dụng bigint thay vì u64.
Tôi chưa đọc kỹ để biết rằng họ đang giả định độ cứng của giả định kiểu DL trong $\mathbb{Z}_p^*$ Tuy nhiên).
Lướt qua các số liệu khác, tôi thấy một câu chuyện tương tự, cụ thể là tất cả các phép tính số học được thực hiện trên các phần tử được băm của $\mathbb{Z}_p^*$, thay vì chuỗi phụ tùy ý trong $\{0,1\}^*$.
Tôi không thấy ví dụ cụ thể của bạn:
$$1â¤iâ¤v:a_i'=(a_i)^{Râ²_s}$$
như là một vấn đề.Ví dụ, điều này dường như xảy ra trong hình 4, trước đó tôi thấy $a_i = (hs_i)^{R_s'}$.
Trong hình này tôi không thấy định nghĩa $hs_i = H(s_i)$, và tôi chỉ đọc lướt qua, nhưng rất có thể cách giải thích này đang được giả định, tức là $hs_i$ là băm của một chuỗi byte tùy ý $s_i$, và được chứa trong $\mathbb{Z}_p^*$ (còn hơn là $\{0,1\}^*$).
Câu trả lời chung cho
Tôi chỉ cần thực hiện thao tác tương tự này cho mọi byte trong trường?
sẽ là "không" (trừ khi có điều gì đó đặc biệt yêu cầu thực hiện việc này). Thông thường, các giao thức mật mã hoạt động trên các đối tượng toán học được xác định rõ (chẳng hạn các chuỗi bit trong $\{0,1\}^*$) và "cắt nhỏ" những thứ này để cố gắng buộc mọi thứ hoạt động (khi điều này không được chỉ định như một phần của giao thức) có thể dễ dàng dẫn đến các vấn đề bảo mật.