Điểm:2

Phép nhân không ghi nhớ so với phép nhân trong $GF(2^k)$

lá cờ tf
Tom

Tôi đã triển khai phép nhân ít mang theo bằng cách sử dụng tập lệnh CLMUL. Điều này tương tự như phép nhân modulo đơn giản. Nhưng tính toán mod kết quả một số đa thức vẫn còn rất chậm. Tôi làm theo cách này:

for (unsign int i = 32; i--> 0; )
{
    nếu (c & (1L << (i + 32)))
    {
        c ^= 1L << (i + 32);
        c ^= (uint64_t)p << i;
    }
}

Trong đó c là sản phẩm không mang 64 bit và p là một số đa thức 32 bit bất khả quy. Tôi không chắc mã đó có đúng không. Chúng ta có thể làm điều này nhanh hơn không?

Nếu tôi đúng rằng chúng ta vẫn phải thực hiện quy trình khá tốn kém này sau khi tính tích, thì tôi bắt đầu tự hỏi liệu có hợp lý không khi chỉ thực hiện phép nhân không mang số liệu mod $2^k$. Có chế độ nhân ít mang theo $2^k$ chính nó cũng có những ưu điểm tương tự như đa thức mod nhân ít mang?

Nó có thể là thời gian không đổi, nhưng nó có được phân phối đồng đều không? Nói chung là phép nhân ít mang theo thay thế hợp lý cho phép nhân trong $GF(2^k)$?

kelalaka avatar
lá cờ in
Bạn có cần bảo mật kênh phụ không?
Tom avatar
lá cờ tf
Tom
@kelalaka Tôi không chắc lắm. Tôi đang làm một số PRNG dựa trên phép nhân. Là một giải pháp thay thế cho sản phẩm không mang theo chế độ nhân 2^n dường như đủ tốt, đặc biệt là tôi đang cắt bớt hoặc trộn các bit thấp. Nhưng PRNG này có tiềm năng mã hóa, vì nó hoạt động như ánh xạ ngẫu nhiên không thể đảo ngược, có thể được tham số hóa bằng không gian khóa khổng lồ cho các luồng độc lập. Trong trường hợp này, sẽ tốt hơn nếu nó có khả năng chống kênh bên.
kelalaka avatar
lá cờ in
Mục tiêu của bạn không hoàn toàn rõ ràng. Có rất nhiều phương pháp để đạt được. Thủ thuật đầu tiên là chọn [đa thức bất khả quy có trọng số thấp ($p$)](https://www.hpl.hp.com/techreports/98/HPL-98-135.pdf) như đã thảo luận [tại đây](https:/ /crypto.stackexchange.com/a/77958/18298)
Điểm:2
lá cờ ru

Đầ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

Tom avatar
lá cờ tf
Tom
Vâng, p đại diện cho các hệ số bit cho các đơn thức, như bạn đã viết. Vì vậy, trong trường hợp đó là chính xác, phải không?
Tom avatar
lá cờ tf
Tom
Nhân tiện, tôi đã đọc về thuật toán Gueron và Kounavis, đã giới thiệu cách hiệu quả bằng cách sử dụng pclmulqdq, để giảm mod 128-bit trong GCM: https://www.sciencedirect.com/science/article/abs/pii/S002001901000092X.Và bây giờ tôi đã hiểu rõ hơn - phép nhân GF, đặc biệt là không có pclmulqdq rất đắt so với phép nhân bình thường. Ngay cả với pclmulqdq, nó đắt tiền, nó vẫn yêu cầu 32 lần lặp lại chỉ cho đa thức mod trong trường hợp số 32 bit. Đó là lý do tại sao chúng tôi đang sử dụng một số thủ thuật để làm cho nó nhanh hơn, như trong thuật toán Gueron và Kounavis, với đa thức đặc biệt GF(2^128).

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.