美文网首页
什么是hash函数

什么是hash函数

作者: 张柳哥 | 来源:发表于2018-03-06 21:48 被阅读0次

哈希函数(Hash Function),也称为散列函数,给定一个输入x,它会算出相应的输出H(x)。哈希函数的主要特征是:

  • 输入x可以是任意长度的字符串
  • 输出结果即H(x)的长度是固定的
  • 计算 H(x) 的过程是高效的(对于长度为 n 的字符串 x ,计算出 H(x) 的时间复杂度应为 O(n) )

另外哈希函数一般还要求以下两种特点:

1、免碰撞:即不会出现输入 x≠y ,但是H(x)=H(y) 的情况,其实这个特点在理论上并不成立,比如目前比特币使用的 SHA256 算法,会有 2^256 种输出,如果我们进行 2^256 + 1 次输入,那么必然会产生一次碰撞,事实上,通过 理论证明 ,通过 2^130 次输入就会有99%的可能性发生一次碰撞,不过即使如此,即便是人类制造的所有计算机自宇宙诞生开始一直运算到今天,发生一次碰撞的几率也是极其微小的。

2、隐匿性:也就是说,对于一个给定的输出结果 H(x) ,想要逆推出输入 x ,在计算上是不可能的。如果想要得到 H(x) 的可能的原输入,不存在比穷举更好的方法。

hash 算法的原理是试图将一个空间的数据集映射到另外一个空间(通常比原空间要小),并利用质数将数据集能够均匀的映射。目前主流的 hash 算法有:md4md5sha系列

MD4

MD4是麻省理工学院教授 Ronald Rivest 于1990年设计出来的算法。其摘要长度为128位,一般用32位的十六进制来表示。

2004年8月清华大学教授王小云,指出在计算MD4时可能发生杂凑冲撞。不久之后,Dobbertin 等人发现了MD4在计算过程中第一步和第三步中的漏洞,并向大家演示了如何利用一部普通电脑在几分钟内找到MD4中的冲突,毫无疑问,MD4就此被淘汰掉了。

MD5

1991年,Rivest 开发出技术上更为趋近成熟的MD5算法,它在MD4的基础上增加了"安全-带子"(safety-belts)的概念。虽然 MD5 比 MD4 复杂度大一些,但却更为安全。这个算法很明显的由四个和 MD4 设计有少许不同的步骤组成。

MD5 拥有很好的抗修改性,即对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。

MD5很好的用在了大文件的断点续传上:如果有一个 5MB 的文件 客户端把它分割成5片 1MB 的文件 在上传的时候上传两个 MD5 值,一个是当前上传的文件片的 MD5 还有一个就是拼接之后的 MD5 (如果现在上传的是第二片 这个MD5就应该是第一片加上第二片的MD5), 通过这样的方式能保证文件的完整性。

当如果文件传到一半断了,服务器可以通过验证文件 MD5 值就可以得知用户已经传到了第几片,并且知道之前上传的文件有没有发生变化,就可以判断出用户需要从第几片开始传递。

不过在2004年8月的国际密码学会议(Crypto’2004),王小云提出了一种快速找到 MD5 碰撞的方法(参见其论文),降低了 MD5 的安全性,人们开始寻求更加可靠的加密算法。

SHA系列

SHA的全称是Secure Hash Algorithm(安全hash算法),SHA系列有五个算法,分别是 SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512,由美国国家安全局(NSA)所设计,并由美国国家标准与技术研究院(NIST)发布,是美国的政府标准。后四者有时并称为 SHA-2。SHA-1在许多安全协定中广为使用,包括 TLS/SSL 等,是 MD5 的后继者。

SHA-1

最初该算法于1993年发布,称做安全散列标准 (Secure Hash Standard),最初这个版本被称为"SHA-0",它在发布之后很快就被NSA撤回,因为有很大的安全缺陷,之后在1995年发布了修订版本,也就是SHA-1。

SHA-0 和 SHA-1 会从一个最大 2^64 位元的讯息中产生一串 160 位元的摘要,然后以 MD4 及 MD5 算法类似的原理来加密。

2017年,谷歌发布了最新的研究成功,宣布攻破了SHA-1,并详细描述了成功的SHA1碰撞攻击方式,使用这种方式,可以在亚马逊的云计算平台上,耗时10天左右创建出SHA-1碰撞,并且成本可以控制在11万美元以内。

即使如此,对于单台机器来说攻击的成本依然很高,发生一次SHA-1碰撞需要超过9,223,372,036,854,775,808个SHA1计算,这需要使用你的机器进行6500年计算。

SHA2

SHA2包括了SHA-224、SHA-256、SHA-384,和SHA-512,这几个函数都将讯息对应到更长的讯息摘要,以它们的摘要长度(以位元计算)加在原名后面来命名,也就是说SHA-256会产生256位长度摘要。

SHA-2相对来说是安全的,至今尚未出现对SHA-2有效的攻击!

由于目前大量的网站使用的SSL数字证数都是使用SHA-1签名的,而SHA-1又已经不安全,各大浏览器厂商均宣布了弃用SHA-1的时间表:


可以看出,在时间表之后,如果检测到网站的证书使用的还是SHA-1,就会弹出警告:


为了防止网站因出现上面的警告而显得不专业,我们需要尽快的申请使用跟安全放心的基于SHA-2签名的证书。


待调查的问题:

  • 生日彩虹表攻击
  • 字典攻击

相关文章

  • 哈希算法

    哈希算法 什么是hash函数?常见的hash算法hashlib的用法hash算法的用途 什么是hash函数? 哈希...

  • 什么是hash函数

    哈希函数(Hash Function),也称为散列函数,给定一个输入x,它会算出相应的输出H(x)。哈希函数的主要...

  • 什么是hash函数?

    Hash函数就是,不管你输入什么:数字、文字、图像、视频;而输出只能是一个字符串。

  • 计算文件哈希值

    什么是哈希值? 哈希值(hash values)是使用哈希函数(hash function)计算得到的值。哈希函数...

  • Golang标准库——hash

    hash hash包提供hash函数的接口。 type Hash Hash是一个被所有hash函数实现的公共接口。...

  • python数据结构与算法--什么是Hash|哈希函数?

    目录 一,什么是哈希函数? 二,哈希表(hash table)原理 三,为什么不是所有的 hash 函数都可以被用...

  • iOS hash函数与isEqual方法思考

    说到hash函数,我们就需要了解一下Hash表,那么什么是hash表呢,在我的理解就是一个数组。通过hash函数将...

  • 哈西值

    1.什么是Hash(散列函数,哈希函数) Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的...

  • 应用类问题

    1. Hash算法 Hash函数是将输入键(key)转换为一个确定输出的函数。这个输出成为散列值。一个Hash函数...

  • 关于证书的一些知识

    什么是数字签名(digital signature) digital signature ,比如先用Hash函数成...

网友评论

      本文标题:什么是hash函数

      本文链接:https://www.haomeiwen.com/subject/abqkfftx.html