白话hash和数字签名,保证你看得懂(从零开始学区块链 195)

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介:

最近有朋友在后台问为啥最近老介绍hash相关文章,其实hash算法在信息安全中非常重要,尤其是作为数字签名中非常重要的一环,今天就来详细把这个事情讲清楚


白话hash


可能以前的文章讲得不够简单,hash算法其实就是将一段非常长的数据通过hash变换为一个固定长度相对较短的数据,简称“摘要”,你可以理解成把一本书通过hash变成一段很短的话,算法最关键的要点是,哪怕你改动了这本书里面的一个标点符号,hash后的摘要都会改变。(累死我了,我发现说大白话讲技术问题挺难的)


以MD5这种hash算法为例,他可以将任意长度的数据变成128位的散列值,所谓任意长度的意思就是你的数据可以是一篇文章,一部电影,或者只是一个字母,哪怕是个空字符串,下面这个就是MD5一个空字符串后的值:


MD5("")= d41d8cd98f00b204e9800998ecf8427e


这个例子只是说明hash可以将任意长度的数据变为一个固定长度的值,算法的精妙在于这个值对于不同的数据还是不一样的,如果不同的数据生成的hash值一样,就是有名的“hash碰撞了”


其实hash适合于比较大的数据做摘要,不能作为加密使用,很多误传为MD5加密,也有人称之为单向加密,就是指不能通过hash后的值不能推导原来的数据,这种说法不够严密,比如很多网站喜欢将用户的密码经过MD5变换后存储,主要防止数据库泄露后直接查看用户的密码,真正密码比对时对用户输入的密码进行md5变换然后和存储的md5值比较


从密码学上讲加密过程都要对应解密过程,即可以通过密文还原明文,所以以上的密码保护方法不是严格意义上的数据加密解密。


对于以上方法,一般采用md5字典进行暴力解密,只需要对原有的密码字典进行MD5变换,然后进行字典比对,不会增加太多的计算复杂度,比如你看到d41d8cd98f00b204e9800998ecf8427e这个值就知道代表的是一个空字符串。


白话不对称加密


所谓不对称加密,是对于对称加密而言的,传统的对称加密只有一个秘钥(你可以理解为密码),你用这个秘钥加密,别人也用这个秘钥解密,这里面有个弊端就是,你把解密的密码告诉别人时,比如发短信、发微信,这时候回受到中间人攻击,简单举例说就是运营商等会看到你发的密码,然后你们之间的通讯数据就被解开。


后来英国人搞出来不对称加密,它包含两个成对的密钥,这里面有个概念一定要搞清楚,这个两个成对的秘钥是同时生成的,数学上存在一定关系,并没有严格意义上的哪一个必须是公钥,哪一个必须是私钥,你公布出去的那个就是公钥,你保留的那个就是私钥,看你高兴。


需要注意的时,不同的算法在设计时,为了保障效率公钥会采用固定值生成,比如RSA算法建议公钥的运算e1取值为3或65537(从理论上说迭代猜中的几率更大),所以在实际应用中最好按照推荐选择保留自己的私钥


另外一个概念来了,这是很多人对于后期数字签名比较容易搞蒙圈的地方,首先我们要知道对于不对称加密一个重要特点就是:公钥加密的数据私钥可以解密,私钥加密的数据公钥可以解密,记住这句话后面的数字签名原理你就能搞清楚。


白话数字签名


前面讲了不对称加密,现在你有了一个可以公布出去的公钥的,公钥的作用就是公布出去,如果对方想给你发信息,他就可以可以用你的公钥进行数据加密然后发给你,你用你的私钥解密数据,即便是中间人截获你的公钥也没用。如果你想给对方发加密信息,那么就反过来需要知道对方的公钥即可。所以不对称加密最重要的就是保护你的私钥,这就是我们常说的使用不对称算法进行加密数据传输。


那么数字签名又是什么呢,其实也很简单了,大白话来讲也是一个加密解密过程,就是将数据用你的私钥进行加密,然后把明文和密文都发给对方,对方用你的公钥对密文进行解密,然后比对解密后的明文是不是一样,这样就证明这个数据没有被第三方篡改,的确是你书写的


现在hash算法的重要性要出来了,如果你发送的数据非常短,比如“我爱你”“我恨你”这些很短的句子,你是用不到hash算法的,你只需要用你私钥加密这些短句,然后把  “我爱你”连同加密后的数据比如"@#@#%",一起发过去,对方用你的公钥解开一看果然是“我爱你”,证明没有被篡改,如果解开一看是“我恨你”,就说明在传输过程被中间人篡改了。


如果你发的是一大段文字,比如万字情书什么的,你也可以使用刚才的方法进行签名,那么你就要发送很长一段的密文和明文给对方验证,这明显是浪费资源的。


第一节说过,你终于可以使用hash算法,hash算法就是可以把很长的数据摘要成很短的一段数据,比如采用MD5后只有128位,现在你就可以使用MD5摘要你的万字情书了,得到一个128位的摘要,然后你使用你的私钥对这个128摘要进行加密,这个过程就叫做数字签名,所以数字签名是两个过程,先对数据进行hash摘要,然后对摘要进行私钥加密。


然后你只需要把你的情书和私钥加密后的摘要发给对方就行了,这明显减少了传输量,也让签名变得专业了(呵呵)。对方收到你的情书和加密摘要后,只需要对情书同样进行一次hash运算,得到一个128位数据,然后用你的公钥解密你发过来的摘要,如果这两个数据一样就证明这篇情书里面一个标点符号都没有改变,如果不一样,就证明数据在传输过程中被人篡改过,不是你所写,这个过程就叫做验证签名。


现在你明白hash算法的重要性了吧,简而言之,如果hash算法被攻破,中间人可以篡改你的数据,并保证篡改过的数据有一样的hash值,那么数字签名的基石就被动摇了


注:还有一种数字信封技术,可以让传递明文和签名更加安全,其实原理都差不多,明白加密原理后,你自己都能想出来这些所谓的数字信封、数字信笺、数字包裹一类的看似高大上的名词



原文发布时间为:2017年08月30日
本文作者:区块链大师
本文来源:CSDN,如需转载请联系原作者。

目录
相关文章
|
6月前
|
算法 区块链
区块链前置知识之 hash (一)
区块链前置知识之 hash (一)
|
存储 算法 区块链
Hash哈希竞猜游戏系统开发/区块链dapp游戏开发/规则玩法/项目案例/方案逻辑/成熟技术/源码程序
  哈希算法(Hash Algorithm)是一种将任意长度的消息映射为固定长度的消息摘要(Message Digest)的算法。哈希算法可以将任意长度的输入数据转换为固定长度的输出,
|
区块链
区块链hash哈希竞猜游戏系统开发项目游戏讲解
区块链hash哈希竞猜游戏系统开发项目游戏讲解
323 38
|
算法 安全 5G
Hash哈希竞猜游戏系统开发(区块链游戏开发详情)丨哈希hash竞猜游戏系统开发(运营版)/详细案例/源码部署
 随着信息技术和通信技术的不断进步,我们已经步入了智能工业时代。在这个时代,各种智能技术的应用正在推动着工业的升级和转型,人工智能技术、5G技术和工业互联网技术等新一代信息技术正在不断推进着时代进步和发展。
|
存储 区块链 数据安全/隐私保护
Hash哈希竞猜游戏系统开发(区块链游戏开发案例)丨Hash哈希竞猜游戏系统开发(详细程序)丨源码方案
单向性(one-way),从预映射,能够简单迅速的得到散列值,而在计算上不可能构造一个预映射,使其散列结果等于某个特定的散列值,即构造相应的M=J(h)不可行。这样,散列值就能在统计上唯一的表征输入值,因此,密码学上的Hash又被称为”消息摘要(message digest)”,就是要求能方便的将”消息”进行”摘要”,但在”摘要”中无法得到比”摘要”本身更多的关于”消息”的信息。
|
存储 算法 安全
区块链概念1:Hash 算法
区块链概念1:Hash 算法
571 0
区块链概念1:Hash 算法
|
Ubuntu 区块链
区块链哈希hash游戏技术开发详细方案(成熟代码)
区块链哈希hash游戏技术开发详细方案(成熟代码)
121 0
|
算法 安全 区块链
区块链之旅(四)双花攻击、博弈论、Hash函数、数字签名
双花”,即一笔钱被花了两次或者两次以上,也叫“双重支付” “双花攻击”,又叫“双重消费攻击”,即同一笔资金,通过某种方式被花费了两次,取得了超过该笔资金的服务。
317 0
|
存储 前端开发 安全
DAPP区块链商城系统开发(方案逻辑)丨区块链DAPP商城系统开发(案例设计)/开发项目/源码部署
 区块链(Blockchain)是一种由多方共同维护,使用密码学保证传输和访问安全,能够实现数据一致存储、难以篡改、防止抵赖的记账技术,也称为分布式账本技术(Distributed Ledger Technology)。从本质上看,区块链是通过去中心化和去信任化,集体维护、分布式存储的可靠数据库。
|
开发框架 安全 前端开发
区块链财务管理平台如何开发?区块链财务管理平台开发源码规则解析
开发一个区块链财务管理平台需要多个方面的技术和知识,以下是一些可能的步骤和考虑因素:
下一篇
无影云桌面