当前位置:首页 » 安全设置 » 网络安全哈希函数特性
扩展阅读
腾讯动漫怎么设置网络 2025-05-12 15:22:15

网络安全哈希函数特性

发布时间: 2022-09-23 01:06:50

1. 哈希算法是什么

哈希算法就是一种特殊的函数,不论输入多长的一串字符,只要通过这个函数都可以得到一个固定长度的输出值,这就好像身份证号码一样,永远都是十八位而且全国唯一。哈希算法的输出值就叫做哈希值。

原理:

哈希算法有三个特点,它们赋予了区块链不可篡改、匿名等特性,并保证了整个区块链体系的完整。

第一个特点是具有单向性。比如输入一串数据,通过哈希算法可以获得一个哈希值,但是通过这个哈希值是没有办法反推回来得到输入的那串数据的。这就是单向性,也正是基于这一点,区块链才有效保护了我们信息的安全性。

哈希算法的第二个特点是抗篡改能力,对于任意一个输入,哪怕是很小的改动,其哈希值的变化也会非常大。

它的这个特性,在区块与区块的连接中就起到了关键性的作用。区块链的每个区块都会以上一个区块的哈希值作为标示,除非有人能够破解整条链上的所有哈希值,否则数据一旦记录在链上,就不可能进行篡改。

哈希算法的第三个特点就是抗碰撞能力。所谓碰撞,就是输入两个不同的数据,最后得到了一个相同的输入。

就跟我们逛街时撞衫一样,而坑碰撞就是大部分的输入都能得到一个独一无二的输出。在区块链的世界中,任何一笔交易或者账户的地址都是完全依托于哈希算法生产的。这也就保证了交易或者账户地址在区块链网络中的唯一性。

无论这笔转账转了多少钱,转给了多少个人,在区块链这个大账本中都是唯一的存在。它就像人体体内的白细胞,不仅区块链的每个部分都离不开它,而且它还赋予了区块链种种特点,保护着整个区块链体系的安全。

2. 2.安全的Hash函数一般满足哪些要求

一般的hash函数都需要尽量满足以下三点性质:
1.抗原像:已知y属于y,要找出x属于x,使得h(x)=y是困难的;
2.抗第二原像(弱抗碰撞):已知x属于x,
找出x'属于x,使得h(x')=h(x)是困难的;
3.抗碰撞(强抗碰撞):找出x,x'属于x,使得h(x)=h(x')是困难的;

3. 什么是hash函数

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

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

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

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

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

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

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

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

最初该算法于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包括了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签名的证书。

4. 区块链技术中的哈希算法是什么

1.1. 简介

计算机行业从业者对哈希这个词应该非常熟悉,哈希能够实现数据从一个维度向另一个维度的映射,通常使用哈希函数实现这种映射。通常业界使用y = hash(x)的方式进行表示,该哈希函数实现对x进行运算计算出一个哈希值y。
区块链中哈希函数特性:

  • 函数参数为string类型;

  • 固定大小输出;

  • 计算高效;

  • collision-free 即冲突概率小:x != y => hash(x) != hash(y)

    隐藏原始信息:例如区块链中各个节点之间对交易的验证只需要验证交易的信息熵,而不需要对原始信息进行比对,节点间不需要传输交易的原始数据只传输交易的哈希即可,常见算法有SHA系列和MD5等算法

  • 1.2. 哈希的用法

    哈希在区块链中用处广泛,其一我们称之为哈希指针(Hash Pointer)
    哈希指针是指该变量的值是通过实际数据计算出来的且指向实际的数据所在位置,即其既可以表示实际数据内容又可以表示实际数据的存储位置。下图为Hash Pointer的示意图


5. 安全的哈希函数中,函数可以是双向的吗

安全的哈希函数中,函数可以是双向的。

hash就是找到一种数据内容和数据存放地址之间的映射关系了解了hash基本定义,就不能不提到一些着名的hash算法,MD5和SHA1可以说是目前应用最广泛的Hash算法,而它们都是以MD4为基础设计的。

哈希函数的特点:

哈希防碰撞用处是保证上传和下载的数据是一样的,就是改一点点出来的结果差很多。举个例子,你输入的信息是一部《红楼梦》(当然电脑识别出来就是0和1),然后你在红楼梦的第100页的第五句话把一个逗号改成句号,然后输出的hash值就完全不同了。这就是哈希函数一个非常重要的特性。

6. 什么是Hash函数Hash函数在密码学中有什么作用

Hash,一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
HASH主要用于信息安全领域中加密算法,他把一些不同长度的信息转化成杂乱的128位的编码里,叫做HASH值. 也可以说,hash就是找到一种数据内容和数据存放地址之间的映射关系
Hash算法在信息安全方面的应用主要体现在以下的3个方面:
1) 文件校验
我们比较熟悉的校验算法有奇偶校验和CRC校验,这2种校验并没有抗数据篡改的能力,它们一定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数据的恶意破坏。
MD5 Hash算法的"数字指纹"特性,使它成为目前应用最广泛的一种文件完整性校验和(Checksum)算法,不少Unix系统有提供计算md5 checksum的命令。
2) 数字签名
Hash 算法也是现代密码体系中的一个重要组成部分。由于非对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角色。 对 Hash 值,又称"数字摘要"进行数字签名,在统计上可以认为与对文件本身进行数字签名是等效的。而且这样的协议还有其他的优点。
3) 鉴权协议
如下的鉴权协议又被称作"挑战--认证模式:在传输信道是可被侦听,但不可被篡改的情况下,这是一种简单而安全的方法。

7. 网络安全的基石(下)— 完整性与身份认证

网络安全篇,面对复杂多变的网络环境,我们需要掌握哪些关于网络安全的相关知识,聊一聊与网络安全相关的:HTTPS、SSL、TLS 等。

在上一篇文章中,我们介绍了通过非对称加密协商出一个用于对称加密的秘钥,这样便可以保证秘钥不会被窃取,从而实现了机密性。

但仅有机密性,距离安全还差的很远 ...

因为虽然会话密钥无法被窃取,但是恶意者可以尝试修改、重组相关信息返回给网站,因为没有完整性的保证,服务器也只能“照单全收”。

另外,恶意者也可以伪造公钥,如果我们拿到的是“假的公钥”,此时的混合加密就完全失效了。可能我们以为的目标,实际上对方却是伪冒者。

所以,今天我们就来聊一聊,在机密性这一基础之上的完整性和身份认证等特性。

缺乏完整性的机密,可能会被黑客替换或篡改。接下来我们先来看看如何给机密增加上完整这一特性。

如果说保证机密这一特性的是加密算法,那实现完整性的手段主要是 摘要算法 ,也就是常说的散列函数、哈希函数(Hash Function)。

我们可以把摘要算法近似的理解成一种特殊的压缩算法,它能够将任意长度的数据“压缩”成固定长度,而且是独一无二的“摘要字符串”,就好像是给信息生成了一个数字“指纹”。因此好的摘要算法必须能够“抵抗冲突”(两份不同的原文对应相同的摘要),让这种可能性尽量地小。因为摘要算法对输入具有单向性和 雪崩效应

1. 单向性

所有的散列函数都有一个基本特性:如果散列值是不相同的(同一个函数),那么这两个散列值的原始输入也是不相同的。具有这种性质的散列函数称为 单向散列函数 ,即 对于给定的散列值 不能够逆推出原文

2. 雪崩效应

雪崩效应是指当输入发生最微小的改变时,也会导致输出的不可区分性改变。合格的摘要算法,无论是密钥或明文的任何细微变化都必须引起散列值的不可区分性改变。所以摘要算法也被 TLS 用来生成伪随机数(PRF,pseudo random function)。

相信每个开发者在工作中都或多或少的听过或用过 SHA-1 (Secure Hash Algorithm 1)和 MD5 (Message-Digest 5),它们就是最常用的两个摘要算法,能够生成 20 字节和 16 字节长度的数字摘要。遗憾的是它们先后分别在 2005 年和 2009 年被破解,在 TLS 里已经被禁止使用了。

目前 TLS 推荐使用的是 SHA-1 的后继者 SHA-2,区别于前者,它属于 密码散列函数
算法标准,由美国国家安全局研发。总共有 6 种 ,常用的有 SHA224、SHA256 及 SHA384,它们分别能够生成 28 字节、32 字节及 48 字节的摘要。

摘要算法能够保证“数字摘要”和原文是完全等价的,所以,我们只要在原文后附上它的摘要,就能够保证数据的完整性。

怎么理解呢?客户端将消息和消息摘要(SHA-2)发送给服务端之后,服务端拿到后也计算下消息的摘要,对这两份“指纹”做个对比,如果一致,就说明消息是完整可信的,没有被修改。因为即使是对消息的很小变动(例如一个标点符号,这就是雪崩效应),摘要也会完全不同,服务端计算对比就会发现消息被篡改,是不可信的。

不过,大家这时候肯定也看出了问题,摘要算法不具有机密性,如果明文传输,那么黑客可以修改消息后,把摘要也一起修改。

所以,真正的完整性必须建立在机密性之上,就是在上期讲解的《 网络安全的基石(上)— 加密 》:在混合加密系统里用会话密钥加密消息和摘要,这样黑客无法得知明文,也就没有办法“动手脚了”。

加密和摘要实现了通信过程的机密性和完整性,我们的通信过程可以说是比较安全了。但这里还有漏洞,那就是通信的两端。

对于通信的两端,我们还要解决身份认证的问题。简单来说,就是如何证明对方真实身份。因为黑客可以伪装成网站来窃取你的信息,反过来,他也可以伪装成你,向网站发送支付、转账等消息,网站没有办法确认你的身份,钱可能就这样被偷走了。

回想下现实生活中,解决身份认证常用的手段有签名、手印和印章等,只要在纸上写下签名加上盖章,就能证明这份文件确实是由本人而非其他人发出的。

那在 TLS 什么东西和生活中的手印、印章很像,只能由本人持有呢?只要有了这个东西,就能够在网络世界里证明你的身份。回想下前面我们介绍的内容,大家也很容易想到,它就是非对称加密里的 私钥 ,使用私钥再加上摘要算法,就能够实现 数字签名 ,同时实现 身份认证 不可否认

签名与验签

数字签名的原理其实也不复杂,就是将公钥和私钥的用法反过来,之前是公钥加密,私钥解密; 现在是私钥加密 公钥解密

签名和公钥一样完全公开,任何人都可以获取。但这个签名只有用私钥对应的公钥才能解开,拿到摘要后,再比对原文验证完整性,就可以签署文件一样证明消息确实是你发的。整个过程的两个行为也有其专用术语,分别叫做 签名 验签

回顾下安全通信的四大特性我们都已经实现了,整个通信过程是不是已经完美了呢?答案不是的,这里还有一个“公钥的信任”问题,因为谁都可以发布公钥,我们还缺少防止黑客伪造公钥的手段。关于该部分内容你可以参考下篇文章 《公钥信任问题 — 数字证书与 CA》 。

总结

网络安全涉及了方方面面太多的知识,尤其是网络的基础知识对我们来说还是非常重要的,关于这部分大家又有什么要分享的?欢迎你的分享留言或指正。

网络安全系列专题

8. 什么是Hash函数Hash函数在密码学中有什么作用

hash函数页称散列函数
哈希函数
杂凑函数,是一个从消息空间到像空间的不可逆映射。作用:数字签名,生成程序或文档的“数字指纹”,用于安全传输和存储口令!