SHA-256算法单向Hash函数是密码学和信息安全领域中的一个非常重要的基本算法,它是把任意长的消息转化为较短的、固定长度的消息摘要的算法。

SHA安全加密标准,是至今国际上使用最为广泛的较为安全的压缩算法之一,由美国NIST和NSA两个组织共同开发的,此算法于1993年5月11日被美国NIST和NSA设定为加密标准。为了提高Hash函数的安全性能,陆续发布了改进的Hash密码算法SHA-1、SHA-224、SHA-256、SHA-384及SHA-512等。但随着2004年中国密码专家王小云教授研究小组宣布对MD5、SHA-1等加密算法的破解,随着密码学研究的不断深入和计算机技术的快速发展,美国政府计划从2010年起不再使用SHA-1,全面推广使用SHA-256、SHA-384和SHA-512等加密算法。

SHA-256算法的安全性分析
Hash函数的安全性很大程度上取决于抗强碰撞的能力,即攻击者找出两个涓息M和M'(M≠M'),使得H(M)=HM'。因此,评价一个Hash函数的安全性,就是看攻击者在现有的条件下,是否能找到该函数的一对碰撞。目前已有的对Hash函数攻击的方法包括生日攻击、彩虹表攻击、差分攻击等。

生日攻击
生日攻击是一种可用于攻击任何类型Hash函数的攻击方法。从攻击原理上看,它没有利用Hash函数的结构和任何代数弱性质,只依赖于Hash值的长度。因此,抵御生日攻击最有效的方法是Hash值必须有足够的长度。

生日攻击步骤:
发送方用私钥对256位的Hash值加密,并将加密结果附于消息之后一并提交给接收者,攻击者可按如下步骤实施攻击:

1)攻击者生成出消息M的2128种不同的消息变形,每一种消息变形都与原消息M具有相同的含义,同时攻击者再伪造一个假冒的消息M',并对假冒的消息生成出2128个不同消息,其目的是试图用假冒的消息替代真实消息。

2)比较上述两个集合,找出具有相同Hash值的一对消息Mi和M'j,依照生日悖论原理,攻击者找到碰撞的概率大于0.5。如果没找到,则重新伪造一个消息,并生成2128个变形,直至找到碰撞为止。

3)攻击者将消息Mi(与伪造消息M'j有相同Hash值)提交给A请求签名,后将该签名连同伪造消息M'j一起发送给接收者。

差分攻击
差分攻击是目前破译迭代Hash函数最有效的手法之一,其基本方法是利用明文的输入差值对输出差值的影响,运用差分的高概率的继承或者消除来产生最终的相同输出。一个Hash函数的安全性高低最终要看能否找到函数的整体碰撞,由于SHA-256算法具有迭代型结构,根据迭代算法的雪崩效应,随着轮数的增加,相应的整体碰撞复杂度会急剧上升,这就使得找到整体碰撞变得非常困难,直至目前现有的攻击还无法找到SHA-256的一个整体碰撞。因此,SHA-256算法被认为是目前最安全的Hash函数之一。