我正在尝试理解Ethereum的哈希算法Keccak。Keccak在散列过程中使用排列。有人能解释一下这个排列是什么样子或者它是怎么工作的吗?我只知道数学上的排列,这里也是一样的吗?abc的一个排列是: abc,acb,cab,bac,bca,cba是同样的逻辑应用于Keccak?
发布于 2018-09-27 22:22:19
我只知道数学上的排列,这里也是一样的吗?abc的一个排列是: abc,acb,cab,bac,bca,cba是同样的逻辑应用于Keccak?
这是一个稍微不同的意义上的排列,在这里发挥作用。维基百科条目的第一句涉及到以下内容:
在数学中,置换的概念涉及将集合的所有成员排列成某种序列或顺序的行为,或者如果集合已经被排序,则重新排列(重新排序)其元素,这是一个称为置换的过程。
在您的示例中,集合是\{a, b, c\},它已经被排序为abc,所以其他字符串是集合和字符串的排列。
在密码学中,当我们谈论排列时,通常我们是指一些固定长度的二进制字符串的集合(符号:\{0,1\}^n),而置换是一个双射函数,该集合既是域又是共域。在抽象代数中使用这个术语的意义是相同的:
在代数中,特别是在群论中,集合S的置换定义为从S到其自身的双射。也就是说,它是一个从S到S的函数,每个元素都作为图像值出现一次。这与S元素的重新排列有关,其中每个元素s被相应的f(s)替换。
或者,由于集合\{0,1\}^n的元素可以被读取为数字,所以可以将其读取为提供集合的隐式规范排序,其中第一个元素是零的数字,第二个元素是一个数字,以此类推。在这种设置中,置换可以写成集合中所有数字的非重复序列,这样集合的正则序中的i第th元素被替换为表示置换的序列的i第th元素。
因此,Keccak规范定义了某些排列,它们只是固定长度的二进制字符串上的一些标准化函数(规范定义了几个长度,但最常见的是1600位字符串)。这些函数被设计成尽可能像从同一集合的所有可能排列的集合中随机选择的排列,但可以有效地计算。但是,要解释Keccak的工作原理,一种方法是假装置换是随机选择的。再一次,如果我们把Keccak置换操作的集合中的位串看作二进制数字,那么函数所做的就是,如果其中任何一个作为输入,计算它在随机洗牌集合中所占的位置。
发布于 2018-09-27 10:00:12
是的,Keccak中的置换只是状态立方体中可能的位排列之一。FIPS酒吧202的文件很好地反映了州的变化(第13-14页)。
https://crypto.stackexchange.com/questions/62675
复制相似问题