Block-Cipher
如何計算/生成 Kuznyechik 分組密碼的逆 S 盒?
假設我想通過選擇一個隨機的 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)