Đầu tiên, mã của bạn gần như chính xác cho phép nhân trong $GF(2^{32})$ miễn là $p$ đại diện cho các hệ số bit cho các đơn thức $x^{31},x^{30},\ldots,x^2,x,1$ trong một đa thức bất khả quy bậc 32. Có một vấn đề hàng rào mà $i$ nên chạy từ 31 xuống 0.
Bây giờ, mod nhân không mang theo $2^k$ không tương ứng với phép nhân trong một trường mà thay vào đó là vòng $\mathbb Z[x]/x^k\mathbb Z[x]$. Đây không phải là đối tượng toán học tốt để thực hiện mật mã. Ví dụ, bit thấp của đầu ra chỉ là một chức năng của các bit thấp của đầu vào. Bằng phép nhân so sánh trong $GF(2^k)$ tất cả các bit đầu ra là một chức năng của tất cả các bit đầu vào. Một thuộc tính khác của phép nhân trường là nó có thể đảo ngược đối với các đầu vào khác không, nhưng trong vòng của chúng ta, hàm này không thể đảo ngược đối với các đầu vào không có bit thấp được đặt.
Nếu chúng ta xem xét tất cả các cặp đầu vào, thì đầu ra không được phân bổ đồng đều. Ví dụ: chỉ 25% đầu vào sẽ tạo ra đầu ra với bộ bit thấp. Nếu chúng ta cố định một trong các đầu vào và đảm bảo rằng bit thấp của nó được đặt thì đầu ra được phân phối đồng đều, nhưng bit thấp của đầu ra sẽ chỉ phụ thuộc vào bit thấp của đầu vào. Nói tóm lại, nó không phải là một sự thay thế tốt.
Về câu hỏi trước đó của bạn, có một số khả năng tăng tốc. Nếu bạn tính toán trước mã cho $c$ lấy các giá trị 1<<32, 1<<33,..., 1<<63 và lưu các giá trị này dưới dạng $x[0],\ldots,x[31]$ sau đó mã có thể được thay thế bằng
for (int i = 31; i-- >= 0; )
{
nếu (c & (1L << (i + 32)))
c ^= x[i];
}
c %= 1<<32;
Nếu bạn vẫn muốn một cái gì đó nhanh hơn, bạn có thể muốn xem xét các cách khác để biểu diễn các trường, chẳng hạn như cơ sở bình thường tối ưu hoặc logarit Zech