

新闻资讯
哈希游戏| 哈希游戏平台| 哈希游戏APP哈希游戏- 哈希游戏平台- 哈希游戏官方网站
函数对矩阵a执行24圈的操作,每一圈包括5个步骤,每个步骤通过置换或代替操作对状态矩阵进行更新。 每圈的操作除了最后一步之外全都相同,最后一步通过使用不同的圈常数使得各圈操作互不相同。 5个步骤的操作可以表示成函数的复合形式: R=τ。x。π。ρ。θ θ步函数 对于位于第x列、第y行的第z位: 首先对于x列的各纵的XOR异或运算如下: C[x]=L[x,0]⊕L[x,1]⊕L[x,2]⊕L[x,3]⊕L[x,4] 第一个式子中的求和项是对于第(x-1)mod 4列中的所有纵进行按位异或运算,得到64位的纵C[x-1]; 第二个求和项是对于第(x+1)mod 4列中的所有纵进行按位异或运算,然后在64位纵内部进行循环移位使得原位置第z位映射到第z+1 mod 64位,从而得到纵ROT(C[x+1],1)。 密码学Hash函数 11.1 Hash函数的应用 11.2 简单的Hash函数 11.3 需求和安全性 11.4安全Hash算法 11.5 SHA-3 Hash函数H将可变长度的数据块M作为输入,产生固定长度的hash值h=H(M) “好”的Hash函数的特点:对于大的输入集合使用该函数,产生的输出结果均匀地分布且看起来随机 Hash函数的首要目标:保证数据完整性,对于M任何一位或几位的改变,都将极大可能改变其Hash码 在安全应用中使用的Hash函数称为密码学Hash函数 密码学Hash函数常被用于判断数据是否被篡改过,因为其具有单向性和抗碰撞性 碰撞是存在的。因为消息是无限的,而散列值是有限的,所以不同的消息有可能产生同一个散列值。 11.1 密码学Hash函数的应用 11.1.1 消息认证 消息认证是用来验证消息完整性的一种机制或服务。确保收到的数据确实和发送时的一样,没有修改、插入、删除或重放,还要确保发送方声称的身份是真实有效的。 Hash函数用于消息认证的简化示例 11.1 密码学Hash函数的应用 11.1.2 数字签名 在进行数字签名过程中,使用用户的私钥加密消息的Hash值,其他任何用户知道该用户的公钥的人都能够通过数字签名过程来验证消息的完整性。 11.2 简单的Hash函数 最简单的Hash函数之一,是将每个分组相应位异或(XOR),这个函数可如下描述为: Ci=bi1⊕bi2⊕...⊕bim 其中,Ci=Hash码的第i位,1≤i≤n m=n位输入分组的个数 bij=第j个分组的第i位 ⊕=异或运算 改进方法是,每处理完一个分组后,将Hash值平移一位或循环移位一位(RXOR),过程如下: (1)n位Hash值得初值为0; (2)如下处理每个n位的分组: (a)将当前的Hash值循环左移一位; (b)将该分组与Hash值异或。 11.3 需求和安全性 对于Hash函数h=H(x),称x是h的原像,即把数据块x作为输入,使用Hash函数H得到h。 如果x≠y,且H(x)=H(y),则称出现碰撞。 安全性需求 需求 描述 输入长度可变 H可应用于任意大小的数据块 输出长度固定 H产生定长的输出 效率 对任意给定的x,计算H(x)比较容易,用硬件和软件均可实现 抗原像攻击(单向性) 对任意给定的Hash码h,找到满足H(y)=h的y在计算上是不可行的 抗第二原像攻击(抗弱碰撞性) 对任意给定的分块x,找到满足x≠y且H(x)=H(y)在计算上是不可行的 抗碰撞攻击(抗强碰撞性) 找到任何满足H(x)=H(y)的偶对(x,y)在计算上是不可行的 伪随机性 H的输出满足伪随机性测试标准 11.3.1 安全性需求 一个函数如果是抗强碰撞的,那么也同时是抗弱碰撞的,但反之则不一定成立。 弱Hash函数:满足输入长度可变、输出长度可变、效率、抗原像攻击、抗第二原像攻击; 强Hash函数:满足输入长度可变、输出长度可变、效率、抗原像攻击、抗第二原像攻击、抗碰撞攻击。 11.3.2 穷举攻击 穷举攻击不依赖于任何算法的细节,仅与相应的长度相关。对于Hash函数,穷举攻击仅与算法所产生的Hash值的长度相关。 原像攻击和第二原像攻击:对于给定的Hash值h,攻击者随机选择y,直到满足H(y)=h。对于m位的Hash值,穷举规模大约是2m,平均尝试次数为2m-1. 碰撞攻击:攻击者试图找到两个消息或数据块x和y,满足H(x)=H(y)。对于m位的Hash值,随机选择数据块,大约需要尝试2m/2次。 通过生日悖论进行碰撞攻击的策略: (1)发送方A准备对文本消息x进行签名,其使用的方法是:用A的私钥对m位的Hash码加密并将加密后的Hash码附于消息之后; (2)攻击者产生该合法消息x的2m/2种变式x,且每一种变式表达相同的意义,将这些消息以及对应的Hash值存储起来; (3)攻击者准备伪造一条消息y,并想获取A的签名; (4)攻击者再产生该伪造消息y的消息变式y,每个变式y与y表达相同的意义。对每个y,攻击者计算H(y),并与任意的H(x)对比,重复这一过程,直到找到一个y与某一个x具有相同的Hash值; (5)攻击者将该合法消息变式x提供给A签名,将该签名附于伪造消息的有效变式y后并发给预期的接收方。 11.3.2 密码分析 密码分析依赖于具体算法的设计缺点。 Hash函数可归纳如下: CV0=IV=初始n位值 CVi=f(CVi-1,Yi-1) 1≤i≤L H(M)=CVL 链接变量的初值由算法在开始时指定,其终值即为Hash值,通常bn,因此称为压缩。 对Hash函数的密码分析主要集中在对f的内部结构进行分析,并试图找到能由f的单步执行产生碰撞的有效方法,如果能找到这种方法,那么它必定考虑固定值IV。要攻击f,攻击者就必须分析轮与轮之间位变化的模式。 11.4 安全Hash算法(SHA) SHA-512逻辑 输入2128,输出512位,以1024位分组处理 寄存器初始值 a = 6A09E667F3BCC908 b = BB67AE8584CAA73B c = 3C6EF372FE94F82B d = A54FF53A5F1D36F1 e = 510E527FADE682D1 f = 9B05688C2B3E6C1F g = 1F83D9ABFB41BD6B h = 5BE0CD19137E2179 SHA--512的运算如下: H0=IV Hi=SUM64(Hi-1,abcdefghi) MD=HN 其中,IV=第三步中定义的abcdefgh缓冲区的初始值; abcdefghi=第i个消息分组处理的最后一轮的输出; N=消息(包括填充和长度域)中分组数; SUM64=对输入对中的每个字进行独立的模264加; MD=最后的消息摘要值。 SHA--512轮函数 每一轮的方程定义如下: 其中,t为步骤数,0≤t≤79 64位的字Wt从1024位消息中导出的方法: 11.5 SHA--3 SHA--3的基本迭代结构称为海绵结构。在海绵函数中,输入消息被分块为固定长度的分组,每个分组逐次作为每轮迭代的输入,同时上轮迭代的输出也反馈至下轮的迭代中,最终产生一组输出块。 海绵函数由三组参数定义: f=内部函数,用于处理每轮的输入分组 r=输入分组的位长度,称其为位速率 pad=填充算法 海绵函数允许输入长度和输出长度都可变。 两种填充方案: (1)简单填充:用pad10*表示,用一个1后面跟若干个0进行填充,0的个数是使得总长度为分组长度整倍数的最小值。 (2)多重位速率填充:用pad10*1表示,用一个1后面跟若干个0,再跟一个1进行填充,0的个数是使得总长度为分组长度整倍数的最小值。 海绵结构对于长度为b=r+c位的状态变量s进行操作,s的初值全部置为0,其值在每轮迭代中更新。 数值r称为位速率,是输入消息的分组长度;r越大,海绵结构处理消息的速度就越快。 数值c称为容量,本质上容量是度量海绵结构能够达到的复杂程度以及安全度。 海绵结构包括两个结构:吸水阶段和挤压阶段。 吸水阶段:对于每轮迭代,通过填充若干个0,将输入数据块的长度从r位扩展为b位;然后将扩展后的消息分组和s进行XOR异或得到b位的结果,并作为迭代函数f的输入;f函数的输出作为下一轮迭代中s的取值。 判断海绵结构是否进入挤压阶段的条件:如果需要的输出长度满足e≤b,那么在吸水阶段完成后,则返回s的前e位,海绵结构的运行结束。否则,海绵结构进入挤压阶段。 挤压阶段:首先,s的前e位被保留作为输出分组Z0,然后在每轮迭代中通过重复执行f函数来更新s的值,s的前e位被依次保留作为输出分组Zi,并与前面已生成的分组连接起来。该处理过程共需要(j-1)次迭代,直到满足(j-1)xre≤jxr。此时,将各输出分组连接Z的前e位作为输出返回。 SHA--3迭代函数f 在f的内部处理过程中,输入状态变量s(1600位)被排列为5x5x64的矩阵a. 64位单元被称为纵,使用符号a[x,y,z]表示状态矩阵中单独的一位。 将5x5矩阵记为L[x,y],L中的每个元素都是64位的纵。 状态变量s中的位和符号a的对应关系如下: s[64(5y+x)+z]=a[x,y,z] 矩阵a从y=0行开始逐行被s的所有位填满。