0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

理解数字签名和加密通信等技术的关键算法哈希算法的介绍

GReq_mcu168 来源:未知 2019-01-13 09:20 次阅读

哈希是密码学的基础,理解哈希是理解数字签名和加密通信等技术的必要前提。

哈希,英文是 hash ,本来意思是”切碎并搅拌“,有一种食物就叫 Hash ,就是把食材切碎并搅拌一下做成的。哈希函数的运算结果就是哈希值,通常简称为哈希。哈希函数有时候也翻译做散列函数。

根据维基百科的定义,哈希函数要做的事情是给一个任意大小的数据生成出一个固定长度的数据,作为它的映射,所谓映射就是一一对应。

一个可靠的哈希算法要满足三点

第一是安全,给定数据 M 容易算出哈希值 X ,而给定 X 不能算出 M ,或者说哈希算法应该是一个单向算法。

第二是独一无二,两个不同的数据,要拥有不相同的哈希。

第三是长度固定,给定一种哈希算法,不管输入是多大的数据,输出长度都是固定的。

但是仔细想一下,如果哈希的长度是固定的,也就是取值范围是有限的,而输入数据的取值范围是无限的,所以总会找到两个不同的输入拥有相同的哈希,所以,哈希函数的安全性肯定是个相对概念。

如果出现了两个不同输入有相同输出的情况,就叫碰撞,collision 。不同的哈希算法,哈希位数越多,也就基本意味着安全级别越高,或者说它的”抗碰撞性“就越好。

哈希算法的作用

再来说说哈希函数的主要作用,哈希的独一无二性,保证了如果数据在存储或者传输过程中有丝毫损坏,那么它的哈希就会变。哈希函数的最常见的一个作用就是进行完整性校验( Integrity Check ),完整的意思是数据无损坏。

哈希有很多不同的称呼,有时候叫Digest(摘要),有时候叫Checksum(校验值),有时候叫Fingerprint(指纹),其实说的意思差不多,也就是说哈希可以用来代表数据本身。

例如朋友给我传递一份数据,传完之后,我有一份,他手里也有一份,如果两份数据的哈希值是一样的,那么这两份数据的内容就是一样的,或者说可以认为传递过程中数据没有损坏,我手里拿到的数据是完整的。

所以说,哈希函数的基本作用就是给大数据算出一个摘要性的长度固定的字符串,也就是所谓的哈希。

哈希算法的分类

哈希算法有很多种,例如md5、SHA256等等,但是它们总体上可以分为两大类,一类是普通哈希,另外一类是加密哈希(cryptographic hash function)。

业界可以找到的哈希算法是有很多种的。我们可以大致按照输出的哈希的长度来聊,虽然哈希算法的安全性也不单单是跟哈希长度有关,但是一般哈希值越长也就是越安全。

例如CRC-32的输出是32 bit,也就是32位的二进制数,表示成十六进制就是8位。MD5算法的哈希是32位16进制数,比较常见;SHA-256是256个Bit ,十六进制表示就是64位。

这些算法可以分成普通哈希和加密哈希算法,两种算法之间没有特别明显的区别。例如本来MD5就是设计出来做加密哈希的,但是后来由于计算机的发展MD5出现碰撞的可能性就很大了,所以目前MD5只能当普通哈希用,用来做数据校验。

加密哈希跟普通哈希的区别就是安全性,一般原则是只要一种哈希算法出现过碰撞,就会不被推荐成为加密哈希了,只有安全度高的哈希算法才能用作加密哈希。

同时加密哈希其实也能当普通哈希来用,Git版本控制工具就是用SHA-1这个加密哈希算法来做完整性校验的。一般来讲越安全的哈希算法,处理速度也就越慢,所以并不是所有的场合都适合用加密哈希来替代普通哈希。

哈希算法和加密算法

在密码学领域,有两个算法都是把数据做输入,而输出是一段谁也看不懂的数据。其中一个就是哈希算法,另外一个是加密算法。注意,哈希算法和加密算法是完全不同的。

哈希算法的输出长度是固定的,而加密算法的输出长度是跟数据本身长度直接相关的。

哈希是不可以逆向运算出数据的,而加密算法的输出是要能够逆向运算出数据的。

这里主要是强调加密哈希算法只是被用在加密过程中,但是它本身不是加密算法。

总之,哈希算法有很多种,长度越长的算法基本认为越安全。安全度低的哈希算法被认为是普通哈希算法,主要用来做完整性校验。安全度高的被称为加密哈希算法,会被用在加密算法中。

所谓的高低都是相对概念,例如MD5曾经属于加密哈希,但是目前只能用来做安全校验了。而从2017年开始,SHA-1算法生成的加密证书也会被各大浏览器拒绝了。目前最流行的加密算法是SHA-2,但是跟SHA-1不同,SHA-2 不是一种算法,而是一系列算法的统称,其中就包括咱们之前提过的SHA-256。

实用例子

首先一个场景是网站注册。当我们提交用户名密码的时候,用户名被会直接保存到网站的数据库中,但是密码却不是直接保存的,而是先把密码转换成哈希,保存到数据库中的其实是哈希。所以,即使是公司后台管理人员,也拿不到用户的密码。这样,如果万一公司数据库泄露了,用户的密码依然是安全的。而当用户自己登录网站的时候,输入密码提交到服务器,服务器上进行相同的哈希运算,因为输入数据没变,所以哈希也不会变,登录也就成功了。

另外一个场景是区块链和加密货币中。比特币地址生成的时候,就用到了 SHA-256 算法,POW 也就是工作量证明,用的也是这个算法。

基本上凡是涉及到密码学的地方,都会或多或少的用到哈希函数。

总结

哈希的基本作用就是提供一个数据的摘要或者指纹,通常的使用场景就是完整性校验。哈希算法有很多种,一般来讲哈希越长的算法,安全性也就越高,安全度足够高的哈希,或者说没有任何人能够成功实现碰撞的哈希,才有资格被考虑用在加密场合,而这类的哈希算法也被叫做加密哈希算法。

实际中常见的哈希算法有MD5、SHA-1和SHA-256等等,其中MD5通常用来进行数据校验,SHA-1曾经是加密哈希算法,但是目前已经被除名,也只能做为一种安全度更高的校验算法了。SHA-256依然是广泛使用的加密哈希算法,在比特币生成地址以及POW工作量证明算法中都会用到。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 算法
    +关注

    关注

    23

    文章

    4456

    浏览量

    90759
  • 区块链
    +关注

    关注

    110

    文章

    15554

    浏览量

    104761
  • 比特币
    +关注

    关注

    57

    文章

    7000

    浏览量

    139334

原文标题:理解数字签名、加密通信的关键:哈希算法

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    驱动程序数字签名工具 (制作数字签名工具)

    驱动程序数字签名工具1.3 build 1022中文绿色版(制作数字签名工具) 新一代的驱动程序数字签名工具,完全图形化,支持64位系统下的驱动必须的交叉签名。 
    发表于 10-24 13:35

    基于椭圆曲线算法数字签名技术研究

    基于椭圆曲线算法数字签名技术的基本原理及其安全性,展望了公钥密码体制未来的发展方向。【关键词】:椭圆曲线算法;;
    发表于 04-23 11:29

    关于DENC底层架构和加密算法解释

    了解一下DENC区块链的通信协议、分布式账本技术哈希算法到底是怎么一回事?通信协议DENC的底层包含了点对点(Peer-to-Peer,P
    发表于 08-30 09:46

    什么是数字签名?如何去实现呢

    数字签名的简单理解@TOC数字签名的简单理解!对于数字签名,网上有很多大神解释的很详细了,我在这里解释的方法更加简单,更适用于初学者的入门
    发表于 01-07 07:45

    数字签名技术的应用研究

    本文介绍了公开密码加密体制、单向散列函数、认证机构和公钥管理等。并在此基础上,详细探讨了明文不需要保密的一般数字签名实现算法、明文需要保密的数字签名
    发表于 06-13 13:49 37次下载

    基于FPGA的ECC数字签名方案优化设计

    ECC 数字签名算法是目前的研究热点之一。本文根据ECC 数字签名算法的相关理论,使用Verilog 语言实现了其完整方案,并给予相应的优化。给出了
    发表于 09-12 15:39 16次下载

    数字签名,什么是数字签名

    数字签名,什么是数字签名数字签名技术出现之前,曾经出现过一种“数字签名
    发表于 04-03 16:00 6280次阅读

    什么是数字签名算法(DSA)

    什么是数字签名算法(DSA) DSA(Digital Signature Algorithm,数字签名算法,用作数字签名标准的一部分),它
    发表于 04-03 16:01 3431次阅读

    如何使用ECDSA算法生成数字签名

    现在我们经常在区块链中看到数字签名这一术语是非常常见的。在发送交易时,无论是比特币、Ethereum、Hyperledger Fabric还是任何其他平台,都在使用数字签名进行签名和验证。
    发表于 12-27 14:12 8883次阅读
    如何使用ECDSA<b class='flag-5'>算法</b>生成<b class='flag-5'>数字签名</b>

    区块链数字签名的好处是什么

    数字签名也就是我们的公钥数字签名和电子签,类似于我们写在纸上的签名,但又有非常大的差别。最大的差别就在于它使用了公钥加密领域的技术实现,适用
    发表于 03-01 11:00 2282次阅读
    区块链<b class='flag-5'>数字签名</b>的好处是什么

    比特币的公钥加密数字签名的基本原理解

    A发信息给B,用自己的私钥去加密这段信息,这时候B收到后,拿着A的公钥(公开的),去验证下是A发出的,这就是数字签名。 这时候结合之前的方法,A发出的时候用A自己的私钥对信息进行签名,然后用B的公钥进行
    发表于 10-16 10:07 4906次阅读
    比特币的公钥<b class='flag-5'>加密</b>和<b class='flag-5'>数字签名</b>的基本原<b class='flag-5'>理解</b>析

    数字签名技术的应用

    公钥加密领域的技术来实现的,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。
    的头像 发表于 08-20 11:31 7405次阅读
    <b class='flag-5'>数字签名</b><b class='flag-5'>技术</b>的应用

    基于ElGamal数字签名算法的区块链共识算法

    联盟链是一种允许授权节点加入网络的区块链,当存在网络状况不理想等状况时,会出现节点动态加入退出的问题。为此,在环签名理论、 Elgamal数字签名算法与PBFT算法的基础上,提出一种
    发表于 05-19 11:51 10次下载

    哈希是什么,常见的哈希算法有哪些

    理解为一种消息摘要算法,将消息或数据压缩变小并拥有固定格式。由于其单向运算具有一定的不可逆性,哈希算法已成为加密算法中一个构成部分,但完整
    的头像 发表于 06-23 14:57 6499次阅读

    浅谈非对称算法数字签名

    数字签名和数据验签,你了解有多少?
    的头像 发表于 09-03 14:53 2053次阅读