- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
散列函数杂凑函数哈希函数
散列函数 h=H(m) 函数参数 输入:可以任意长度 输出:必须固定长度,一般64、128、160bits等 函数特性 单向性质 给定h,要找x使H(x)=h是困难的 弱抗碰撞特性 对于给定的y,找x,使H(x)=H(y)是困难的 强抗碰撞特性 找x和y,使H(x)=H(y)是困难的 如果碰撞则意味着容易伪造/欺骗 对散列函数的生日攻击 找x和y满足H(x)=H(y),则尝试多少个报文可以找到一对(假设散列值n比特) 显然,最多尝试2n+1个报文,必有一对冲突 其实,远在到达2n+1之前,很可能早就找到了(期望2n-1) 如果只要达到一定的概率(如1/2),约需尝试多少个不同报文 2n/2 MD系列 作者 Ronald Rivest /~rivest/ MD5 RFC1321 /rfc/rfc1321.txt 应用 曾经是最广泛的摘要算法 但是摘要太短(128bits) 而SHA有160bits MD5强度 特性 散列码(128b)的每一个比特是输入的每一个比特的函数 找两个冲突报文的计算量得2^64 找个给定报文冲突的计算量得2^128 攻击进展 在美国加州圣巴巴拉召开的国际密码学会议(Crypto2004)山东大学的致公党党员王小云教授做了破译MD5、HAVAL-128、 MD4和RIPEMD算法的报告,报告由王小云、冯登国、来学嘉、于红波四人共同完成,囊括了对MD5、HAVAL-128、 MD4和RIPEMD四个著名HASH算法的破译结果。 SHA1:Secure Hash Algorithm-1 基于MD4 所以类似MD5输入 任意报文(2^64) 输出 160bits 过程 填充报文、长度成512bits分组 初始化寄存器ABCDE E = C3D2E1F0 分组处理 … SHA系列 SHA-1,SHA-256,SHA-384,SHA-512 SHA-1,SHA-256的分组大小是512 SHA-384,SHA-512的分组大小是1024 SHA-1输出的摘要是160bit SHA-256输出的摘要是256 SHA-384输出的摘要是384 SHA-512输出的摘要是512 * 散列函数/杂凑函数/哈希函数 Hash Function MD5算法第一、二步 第一步:填充消息 使得消息的长度(bit为单位)模512为448。如果数据长度正好是模512为448,增加512个填充bit,也就是说填充的个数为1-512。 填充方法:第一个bit为1,其余全部为0。 第二步:补足长度 将数据长度转换为64bit的数值,如果长度超过64bit所能表示的数据长度的范围,值保留最后64bit,增加到前面填充的数据后面,使得最后的数据为512bit的整数倍。 然后对每个512bit按每组32bit进行分组,可分为16组。 512=32*16 MD5算法第三步 第三步:初始化变量 用到4个变量,分别为A、B、C、D,均为32bit长。初始化为: A= 01 23 45 67 B=89 ab cd ef C=fe dc ba 98 D=76 54 32 10 MD5算法第四步 第四步:数据处理,共进行四轮。 设对512bit按每组32bit进行分组为M[0],M[1],……, M[15]。 第一轮的辅助函数: F(X,Y,Z) = (X ∧ Y) ∨(~X ∧ Z ) X ∧ Y表示按位与,X ∨ Y表示按位或, ~ X表示按位取反。 第一轮的操作: ff(a,b,c,d, M[j],s, t[i])表示 a=b+((a+(f(b,c,d)+M[j]+t[i]))s) 其中: M[j]表示第j个分组, s表示循环左移s位 t[i] 是给定的常数, t[i]=ox(int(232*sin(i)). MD5算法计算t[1] 计算t[1] x=sin(1)=0.8414709848078965066525023216303 y=2^32=4294967296 z=x*y=2^32*sin(1)=3614090360.2828283386251439079649 int(z)=3614090360=oxD76AA478 MD5算法第一轮循环 ? FF (a, b, c, d, M[ 0], 7, 0xd76aa478); /* 1 */ ? FF (d, a, b, c, M[ 1], 12, 0xe8c7b756); /* 2 */ ? FF (c, d, a, b, M[ 2], 17, 0x242070db); /* 3 */ ? FF (b, c, d, a, M[ 3], 22, 0xc1bdceee); /* 4 */ ? FF (a, b,
文档评论(0)