更新时间:2022-08-25 12:39
安全散列算法是数宇签名等密码学应用中重要的工具。最常用的安全散列算法是SHA-1算法,它被广泛地应用于电子商务等信息安全领域。
安全散列算法(SHA)是一种常用的数据加密算法。它由美国国家标准与技术局(NIST)于1993年作为联邦信息处理标准公布(即第一代SHA算法SHA-0)。在1995年,其改进版本SHA一1也正式公布(SHA一1具有比SHA—0更高的安全性)。SHA-1算法是目前最常用的安全散列算法和最先进的加密技术。SHA-1算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单地理解为取一串输入码,把它们转化为长度较短、位数固定的输出序列即散列值(称为信息摘要)的过程。该算法对长度不超过2的64次方的消息产生160位的消息摘要输出,输入按512位的分组进行处理。
SHA-1算法在加密学中扮演着极其重要的角色,可以用于实现数据保密、防止数据更改和身份验证等功能。一个典型的应用是从数字消息、IP信息包、磁盘文件等数据抽取散列值(称为消息摘要),井与对称或非对称加密技术一起来完成对原始数据的认证和完整性检查。另外,SHA-1算法是当今众多流行加密思想核心,几乎无处不在。它在许多安全协议中广为使用,如:数字签名标准(DSS)、传输层安全(TLS)、安全电子交易(SET),互联网协议安全(IPSec)、无线局域网(WLANs)安全、随机数生成算法和密码存储机制等。
SHA-1算法具有两个重要特性:单向性和抗碰撞性。单向性即由原始消息计算出信息摘要很容易,而由消息摘要计算出原始消息在计算上则几乎是不可行的。而所谓的抗碰撞性是指,要找到两个不同的原始消息生成同一个信息摘要在计算上也是不可行的。
SHA-1算法是一种易于实现并可以基于多种平台的方便易行的安全算法,目前很多计算机语言,像C,Java, C++和PHP依照SHA一1算法的标准都能实现SHA-1。当然,受语言平台应用性的制约,应用最广泛的是C语言和Java语言。自身计算机上的消息认证一般采用C语言实现就足够,不仅能够保证良好的可移植性,而且实现起来也比较简单、容易理解。考虑到网络上的数字签名,乃至电子商务等,一般采用Java实现代码较简单迅速,其可移植性和安全性也能得到更好的保证。事实上,这里还存在一个潜在的问题:SHA-1算法信息摘要的计算速度井不总是能满足要求。使得SHA-1算法的硬件实现也有很多途径,如利用现场可编程门阵列不仅可以实现这种算法,井且某种程度上也能提高运算速度。特别是随着数字通信领域的飞速发展,在急剧增长的无线移动设备领域,对加密系统的性能要求越来越严格。使得SHA一1算法软硬件优化方案的实现成为专家关注的热点。
SHA-1算法是由MDS算法演变而来的,它们之间最大的区别在于前者产生的摘要长度比后者长32bit。SHA-1对于强行攻击,产生任何一个报文使之摘要等于给定报文摘要的难度为2160数量级的操作,较MDS的2128数量级操作要难。因此,SHA-1算法对抵抗强行攻击的强度很高。同时,因为SHA-1算法的循环步骤有80次,比MDS算法的64次要多,所以其运行速度也较慢。
从目前密码学研究的最新进展来看,SHA-1虽然被发现存在缺陷(碰撞),但在近几年内,仍然可以大量使用SHA-1算法。同时,专家们认为王小云等人发现当前所用的散列算法存在的问题,必将帮助新的散列算法设计者考虑到这方面的问题,使得新的散列算法具有更好的安全性。美国政府的大多数应用被要求在以前改用SHA-2散列函数系列,早期的应用也要尽可能地进行升级。SHA-2算法跟 SHA一1基本上相似,至今尚末出现对SHA-2算法的攻击。