SHA家族

SHA家族安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函式家族,是FIPS所认证的安全散列算法 。能计算出一个数字讯息所对应到的,长度固定的字元串(又称讯息摘要)的算法 。且若输入的讯息不同,它们对应到不同字元串的机率很高 。
基本介绍中文名:SHA家族
外文名:Secure Hash Algorithm
别称:安全散列算法
国家:美国
家族成员SHA家族的五个算法,分别是SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512,由美国国家安全局(NSA)所设计,并由美国国家标準与技术研究院(NIST)发布;是美国的政府标準 。后四者有时并称为SHA-2 。SHA-1在许多安全协定中广为使用,包括TLS和SSL、PGP、SSH、S/MIME和IPsec,曾被视为是MD5(更早之前被广为使用的杂凑函式)的后继者 。但SHA-1的安全性如今被密码学家严重质疑;虽然至今尚未出现对SHA-2有效的攻击,它的算法跟SHA-1基本上仍然相似;因此有些人开始发展其他替代的杂凑算法 。SHA-0和1最初载明的算法于1993年发布,称做安全杂凑标準(Secure Hash Standard),FIPS PUB 180 。这个版本现在常被称为SHA-0 。它在发布之后很快就被NSA撤回,并且由1995年发布的修订版本FIPS PUB 180-1(通常称为SHA-1)取代 。SHA-1和SHA-0的算法只在压缩函式的讯息转换部分差了一个位元的循环位移 。根据NSA的说法,它修正了一个在原始算法中会降低杂凑安全性的弱点 。然而NSA并没有提供任何进一步的解释或证明该弱点已被修正 。而后SHA-0和SHA-1的弱点相继被攻破,SHA-1似乎是显得比SHA-0有抵抗性,这多少证实了NSA当初修正算法以增进安全性的声明 。SHA-0和SHA-1可将一个最大2的64次方位元的讯息,转换成一串160位元的讯息摘要;其设计原理相似于MIT教授Ronald L. Rivest所设计的密码学杂凑算法MD4和MD5 。SHA-0破解在CRYPTO 98上,两位法国研究者提出一种对SHA-0的攻击方式:在261的计算複杂度之内,就可以发现一次碰撞(即两个不同的讯息对应到相同的讯息摘要);这个数字小于生日攻击法所需的2的80次方,也就是说,存在一种算法,使其安全性不到一个理想的杂凑函式抵抗攻击所应具备的计算複杂度 。2004年时,Biham和 Chen也发现了SHA-0的近似碰撞,也就是两个讯息可以杂凑出几乎相同的数值;其中162位元中有142位元相同 。他们也发现了SHA-0的完整碰撞(相对于近似碰撞),将本来需要80次方的複杂度降低到62次方 。2004年8月12日,Joux, Carribault, Lemuet和Jalby宣布找到SHA-0算法的完整碰撞的方法,这是归纳Chabaud和Joux的攻击所完成的结果 。发现一个完整碰撞只需要251的计算複杂度 。他们使用的是一台有256颗Itanium2处理器的超级电脑,约耗80,000 CPU工时 。2004年8月17日,在CRYPTO 2004的Rump会议上,王小云,冯登国、来学嘉,和于红波宣布了攻击MD5、SHA-0 和其他杂凑函式的初步结果 。他们攻击SHA-0的计算複杂度是2的40次方,这意味着他们的攻击成果比Joux还有其他人所做的更好 。请参见MD5 安全性 。2005年二月,王小云和殷益群、于红波再度发表了对SHA-0破密的算法,可在2的39次方的计算複杂度内就找到碰撞 。SHA-1破解鑒于SHA-0的破密成果,专家们建议那些计画利用SHA-1实作密码系统的人们也应重新考虑 。在2004年CRYPTO会议结果公布之后,NIST即宣布他们将逐渐减少使用SHA-1,改以SHA-2取而代之 。2005年,Rijmen和Oswald发表了对SHA-1较弱版本(53次的加密循环而非80次)的攻击:在2的80次方的计算複杂度之内找到碰撞 。2005年二月,王小云、殷益群及于红波发表了对完整版SHA-1的攻击,只需少于2的69次方的计算複杂度,就能找到一组碰撞 。(利用生日攻击法找到碰撞需要2的80次方的计算複杂度 。)这篇论文的作者们写道;“我们的破密分析是以对付SHA-0的差分攻击、近似碰撞、多区块碰撞技术、以及从MD5算法中寻找碰撞的讯息更改技术为基础 。没有这些强力的分析工具,SHA-1就无法破解 。”此外,作者还展示了一次对58次加密循环SHA-1的破密,在2的33次方个单位操作内就找到一组碰撞 。完整攻击方法的论文发表在2005年八月的CRYPTO会议中 。殷益群在一次面谈中如此陈述:“大致上来说,我们找到了两个弱点:其一是前置处理不够複杂;其二是前20个循环中的某些数学运算会造成不可预期的安全性问题 。”2005年8月17日的CRYPTO会议尾声中王小云、姚期智、姚储枫再度发表更有效率的SHA-1攻击法,能在2的63次方个计算複杂度内找到碰撞 。2006年的CRYPTO会议上,Christian Rechberger和Christophe De Cannière宣布他们能在容许攻击者决定部分原讯息的条件之下,找到SHA-1的一个碰撞 。在密码学的学术理论中,任何攻击方式,其计算複杂度若少于暴力搜寻法所需要的计算複杂度,就能被视为针对该密码系统的一种破密法;但这并不表示该破密法已经可以进入实际套用的阶段 。就套用层面的考量而言,一种新的破密法出现,暗示着将来可能会出现更有效率、足以实用的改良版本 。虽然这些实用的破密法版本根本还没诞生,但确有必要发展更强的杂凑算法来取代旧的算法 。在“碰撞”攻击法之外,另有一种反译攻击法(Pre-image attack),就是由杂凑出的字串反推原本的讯息;反译攻击的严重性更在碰撞攻击之上,但也更困难 。在许多会套用到密码杂凑的情境(如用户密码的存放、档案的数位签章等)中,碰撞攻击的影响并不是很大 。举例来说,一个攻击者可能不会只想要伪造一份一模一样的档案,而会想改造原来的档案,再附上合法的签章,来愚弄持有私密金钥的验证者 。另一方面,如果可以从密文中反推未加密前的使用者密码,攻击者就能利用得到的密码登入其他使用者的帐户,而这种事在密码系统中是不能被允许的 。但若存在反译攻击,只要能得到指定使用者密码杂凑过后的字串(通常存在影档中,而且可能不会透露原密码资讯),就有可能得到该使用者的密码 。SHA-1算法以下是 SHA-1 算法的伪代码: