Block-Cipher

如何計算/生成 Kuznyechik 分組密碼的逆 S 盒?

  • March 23, 2022

假設我想通過選擇一個隨機的 S 盒(例如取自 /dev/random)來修改Kuznyechik 分組密碼。

如何計算/生成逆 S 盒?

有誰知道用於執行此操作的公式或算法?

Sagemath SBox Package是 SBox 學習者/設計師的朋友。

對於可逆 SBox;

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

輸出

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

實際上,逆的實現並不難;只需反轉索引輸出關係。請記住,可逆 SBox 只是一個排列。


請注意,SageMath SBox 的原始碼在這裡,作為一個好的庫,它首先控制 SBox 是否是排列並返回一個 SBox 對象;

       if not self.is_permutation():
           raise TypeError("S-Box must be a permutation")

       cdef Py_ssize_t i
       cdef list 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)

引用自:https://crypto.stackexchange.com/questions/99209