什么是哈希计算

密码学上的哈希计算方法一般需要具有以下的性质:

·函数的输入可以是任意长的字符串;

·函数的输出是固定长度的;

·函数的计算过程是有效率的。

这个说法比较学术化,说白了,就是通过一个方法将一段任意输入的字符串计算出一个固定长度的值,相当于计算出一个身份证号。通过哈希算法计算出的结果,是无法再通过一个算法还原出原始数据的,即是单向的,因此适
合用于一些身份验证的场合,同时由于哈希值能够起到一个类似于身份证号的作用,因此也可以用于判断数据的完整性,哪怕数据发生微小的变化,重新计算后的哈希值都会与之前的不一样。

一般来说,为了保证哈希函数在密码学上的安全性,必须满足以下3个条件。

1)抗冲突(collision-resistance)。简单来说,哈希函数抗冲突指的是不同的输入不能产生相同的输出。这就好像到电影院买票看电影,对于付出真金白银买了电影票的人,他们的座位号不能是一样的。?同时必须说明的
是,抗冲突并不是说不会有冲突,只不过找到有冲突的两个输入的代价很大,不可承受。这就好像暴力破解一个有效期为20年的密码,整个破解过程长达30年,虽然最后密码被破解了,但是由于密码有效期过了,所以也就失去
了意义。

2)信息隐藏(information hiding)。这个特性是指如果知道了哈希函数的输出,不可能逆向推导出输入。这在密码学很好理解:即使敌人截获了公开信道(比如无线电波),获取了传送的哈希信息,敌人也不可能根据这段
信息还原出明文。

3)可隐匿性(puzzle friendly)。如果有人希望哈希函数的输出是一个特定的值(意味着有人事先知道了哈希函数的输出结果),只要输入的部分足够随机,在足够合理的时间内都将不可能破解。这个特性主要是为了对付伪
造和仿制。近来某位当红歌星的演唱会门票超贵,10000元一张。这就催生了假票行当:伪造个人演唱会的门票。这里门票是公开的,大家都知道长什么样,用什么材质,这相当于已知哈希函数的输出。可隐匿特性就是要做假票
的明明知道输出长什么样,但不知道使用何种“原料”和“工艺”造出一模一样的票来。

注意

由于哈希算法的输出值是固定的,而原始数据的长度却是多种多样的,这就注定了在理论上存在不同的原始数据却输出同一种哈希值的可能,这种情况在原始数据的数量极其庞大的时候就会出现。比如,邮件系统的抗垃圾邮件
算法,我们一般会对每一个邮件地址计算一个哈希值,存储为过滤库,可是全世界的邮件地址何其多,而且什么样格式都有,这个时候会对邮件地址进行多种哈希计算,将计算出来的多个值联合起来判断是否存在某个邮件地址
,这也是布隆过滤器的基本原理,在比特币中就使用了布隆过滤器使SPV节点可以快速检索并返回相关数据。

哈希算法的种类


密码学中常用的哈希算法有MD5、SHA1、SHA2、SHA256、SHA512、SHA3、RIPEMD160,下面简单介绍一下。

·MD5(Message Digest Algorithm5)。MD5是输入不定长度信息,输出固定长度128bits的算法。经过程序流程,生成4个32位数据,最后联合起来成为一个128bits哈希。基本方式为求余、取余、调整长度、与链接变量进行
循环运算,得出结果。MD5算法曾被广泛使用,然而目前该算法已被证明是一种不安全的算法。王晓云教授已经于2004年破解了MD5算法。

·SHA1。SHA1在许多安全协议中广为使用,包括TLS和SSL。2017年2月,Google宣布已攻破了SHA1,并准备在其Chrome浏览器产品中逐渐降低SHA1证书的安全指数,逐步停止对使用SHA1哈希算法证书的支持。

·SHA2。这是SHA算法家族的第二代,支持了更长的摘要信息输出,主要有SHA224、SHA256、SHA384和SHA512,数字后缀表示它们生成的哈希摘要结果长度。

·SHA3。看名称就知道,这是SHA算法家族的第三代,之前名为Keccak算法,SHA3并不是要取代SHA2,因为目前SHA2并没有出现明显的弱点。

·RIPEMD-160(RACE Integrity Primitives Evaluation Message Digest160)RIPEMD160是一个160位加密哈希函数。它旨在替代128位哈希函数MD4、MD5和RIPEMD-128。

事实上,除了以上的算法,哈希算法还有很多种,有一些是不太讲究加密特性的,比如在负载均衡领域常用的一致性哈希算法,目的只是将服务器地址快速地计算出一个摘要值,而不是加密,因此会使用一些其他的快速哈希算
法。

猜你喜欢

转载自www.cnblogs.com/cxyzt/p/8876075.html