Điểm:2

Làm cách nào để tính toán/tạo hộp S nghịch đảo của mật mã khối Kuznyechik?

lá cờ pf

Giả sử tôi muốn sửa đổi Mật mã khối Kuznyechik bằng cách chọn một S-box ngẫu nhiên (lấy từ /dev/random chẳng hạn).

Làm cách nào tôi có thể tính toán/tạo hộp chữ S nghịch đảo?

Có ai biết công thức hoặc thuật toán được sử dụng để làm điều này không?

Điểm:2
lá cờ cn

Giả sử hộp S là một hoán vị.

Đây là ví dụ trong Python:

S = (2, 0, 1)
nghịch đảo = [0] * len(S)

cho tôi trong phạm vi (len (S)):
    nghịch đảo[S[i]] = tôi

in (nghịch đảo)

Đây là ví dụ trong C:

không dấu int S[256] = {...};
nghịch đảo int không dấu [256];

cho (int i = 0; i < 256; i++)
{
    nghịch đảo[S[i]] = i;
}
phantomcraft avatar
lá cờ pf
Khá đơn giản, tôi đã không nhận ra rằng nó sẽ dễ dàng như vậy. Cảm ơn!
Điểm:2
lá cờ in

hiền triết Gói SBox là bạn của những người học/thiết kế SBox.

Đối với SBox có thể đảo ngược;

# 0 1 2 3 4 5 6 7 #index
S = SBox([0, 1, 3, 6, 7, 4, 5, 2]) #output
Sinv = S.inverse()
in(Sinv)

đầu ra

(0, 1, 7, 2, 5, 6, 3, 4)

Trên thực tế, việc thực hiện nghịch đảo không khó; chỉ đảo ngược quan hệ chỉ số-đầu ra. Hãy nhớ rằng, SBox khả nghịch chỉ là một hoán vị.


Lưu ý rằng mã nguồn của SageMath SBox là đây và là một thư viện tốt, trước tiên nó kiểm soát SBox có phải là hoán vị hay không và trả về một đối tượng SBox;

        nếu không phải là self.is_permutation():
            tăng TypeError("S-Box phải là hoán vị")

        cdef Py_ssize_t tôi
        danh sách cdef L = [self._S_list[i] for i in range(1 << self.m)]

        return SBox([L.index(i) for i in range(1 << self.m)],
                    big_endian=self._big_endian)
phantomcraft avatar
lá cờ pf
Cảm ơn vi đa trả lơi. Bạn có biết một số gói/chương trình tương tự trong C/C++ giống với gói Sagemath SBox không?
kelalaka avatar
lá cờ in
@phantomcraft Tôi không biết về nó, tuy nhiên, bạn có thể sử dụng nó trong [Python](https://stackoverflow.com/q/61408795/1820553)
phantomcraft avatar
lá cờ pf
Tôi đã nhận được, cảm ơn bạn.
phantomcraft avatar
lá cờ pf
Xin lỗi, tôi đã chọn câu hỏi khác là "hữu ích" vì tôi quan tâm đến việc triển khai C.
kelalaka avatar
lá cờ in
@phantomcraft sau đó bạn đang hỏi sai [vì vậy] trang web.Đây không phải là trang web lập trình và bạn đã hỏi `Có ai biết công thức hoặc thuật toán được sử dụng để làm điều này không?` vì vậy tôi đã đưa cho bạn cách dễ nhất và thuật toán đơn giản `đảo ngược quan hệ chỉ số-đầu ra.`. Nếu không có câu trả lời của tôi, câu hỏi này sẽ lạc đề hơn. Chúc vui vẻ.
kelalaka avatar
lá cờ in
Như bạn có thể thấy từ mã nguồn SageMath, trực tiếp tìm nghịch đảo không phải là cách đúng. Đừng tin tưởng một cách mù quáng vào SBox được tải xuống từ internet là không thể đảo ngược...

Đă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.