数字签名类似于我们现实世界中的文件签名,我们把名字写在一个文件上,就代表了我们认可了这份文件,并且说明了这份文件是真是可靠的,那么问题是如果文件的署名被伪造了怎么办?在现实世界中,我们一般会找当事人直接验证这份文件是否是亲自签署的而不是被人假冒的,而在计算机世界中,保证数字签名不被伪造是通过数字摘要和非对称加密实现的,举个比特币中交易的例子:假如现在Alice发起一笔比特币转账,需要先将该交易进行数字摘要,缩短成一段字符串,然后用自己的私钥对摘要进行加密,形成数字签名。完成后,需要将交易信息(包括收款方的地址)和数字签名一起广播给记录“账本的人”也就是矿工。矿工用Alice的公钥进行验证,如果验证成功,说明该笔交易确实是Alice发出的,且信息未被更改,是完整的。 
下面就来详细讲解这数字摘要和非对称加密技术,讲完之后再回过头来看这个例子就明白了。

数字摘要

数字摘要技术用于对所要传输的数据进行运算生成信息摘要,它并不是一种加密机制,但却能产生信息的数字”指纹”,它的目的是为了确保数据没有被修改或变化,保证信息的完整性不被破坏。说直白点就是将数据进行hash编码。它在数字签名中的作用就是增加被伪造的难度,就好比有些人故意把字要写的龙凤凤舞,目的就是很难让他人伪造。

非对称加密

讲到非对称加密我们需要了解一下什么是对称加密,举个例子:现在你(未成年)跟你朋友想聊一个比较敏感的话题(比如…),但是你怕你老妈会翻看你手机,要是让她知道你跟别人聊这种话题肯定会挨骂,于是你就跟你的朋友约定好你将中文先翻译成英文再发过去,然后他那边可以使用微信翻译将英文翻译成中文,这样即使老妈看到了也无所谓,因为她根本看不懂英语,于是你跟你的朋友便聊了起来:

  • 你:The XiaoHua in the class are so beautiful that I want to chase her.(班里的小花好漂亮,我想追她)
  • 你朋友:I also think she’s pretty.(我也觉得她好漂亮)
  • ……

这里的“班里的小花好漂亮,我想追她”就是明文,而“The XiaoHua in the class are so beautiful that I want to chase her.”就是密文,而密钥就是将“班里的小花好漂亮,我想追她”转化成“The XiaoHua in the class are so beautiful that I want to chase her.”这么一个规则,讲到这大概就清楚了什么是对称加密了吧,可以这么理解:

  • 一方通过密钥将信息加密后,把密文传给另一方,另一方通过这个相同的密钥将密文解密,转换成可以理解的明文。他们之间的关系: 明文 <-> 密钥 <-> 密文

理解了什么是对称加密后你可能有一个疑问,那如果老妈使用了微信翻译将发送出去的英文翻译成中文她不就看懂了吗?对的,这就是对称加密的缺陷,一旦被人拿到了密钥(在对称加密中,密钥就是加解密的规则),那么你发送出去的密文将轻而易举被人破解,那么有什么方法做到即使一个人的密钥被盗窃了,最起码保证你给其他人发送密文不被破解?就是说即使你老妈获取到了你的密钥,但她仍然无法破解你发送出去的信息,只有你的朋友才能查看你发送给他的信息。这个就是我们要讲的非对称加密。

在非对称加密中,不管是信息的发送方还是信息的接收方都有一对属于自己的公钥和密钥,公钥顾名思义就是可以公开,而私钥就是只能自己看,不能给别人拿到。接着发送方会将信息进行数字摘要并使用接收方的公钥进行加密,然后再使用自己的私钥对数字摘要进行加密,接收方收到加密后的信息跟加密串,用 发送方的公钥(因为公钥是公开的)来解密加密串,得到原始的数字摘要,然后对使用自己的私钥进行解密的信息进行摘要后的结果进行比对。如果一致,说明该文件确实是该发送方发过来的,并且文件内容没有被修改过。

还是上面那个例子,你使用你朋友(暂且称为A)的公钥对你的信息进行加密,并且对信息进行数字摘要,然后使用你自己的私钥对摘要进行加密,即数字签名,然后将数字签名和加密后的信息一起发送给A,A接收到信息后,先使用你的公钥对数字签名进行解密,证明该信息确实是你发送过来的而不是别人发送过来的,然后再使用自己的私钥对加密后的信息进行解密(注意这里只有A的私钥才能解密信息,其他人都不可以,即使是你本人也不能解密,所以就算是你老妈拿到了你的私钥也没办法破解该信息),然后对该信息使用同样的算法进行数字摘要,如果得到的摘要跟你发送过来的摘要一致,则说明信息在传递的过程中没有被修改过。

好了,到这里基本上是讲完了,其他的如果有兴趣自行上网搜集材料学习。

转载于:https://www.cnblogs.com/wangsea/p/9429171.html

区块链100篇之第三篇--数字签名相关推荐

  1. 区块链100讲:能够证明你是你的数字签名和多重签名

    随着区块链相关技术的创新和突破,很多有形或无形资产都将实现去中心化,数字资产将无处不在.要保护数字出版物版权,实现去中心化,解决业界多年来版权保护不力的难题.无论数字资产,还是数字出版版权,都是有明确 ...

  2. 这33篇区块链必读论文, 读过5篇以上的竟不到1%

    作者 | Bhaskar Krishnamachari 译者 | Guoxi 责编 | Aholiab 出品 | 区块链大本营(blockchain_camp) 区块链行业中,很多开发者都是半路出家的 ...

  3. 区块链100讲:V神·以太坊上的分片

    五月初,以太坊创始人"V神"Vitalik Buterin表示,以太坊的内部扩展解决方案--分片已经接近完成.以太坊分片旨在将以太坊分成几个并发网络,从而使整个网络更加高效地扩展, ...

  4. 区块链100讲:从村里的账本来看什么是区块链

    2019独角兽企业重金招聘Python工程师标准>>> 很久以前就有个想法,把区块链的技术和概念整理成一个体系化的知识图谱,方便大家查阅和学习,大话已说出去很久,却一直没有践行(pa ...

  5. 区块链100讲:梅克尔树保障区块链数据不可篡改,想换根就要砍树!

    2019独角兽企业重金招聘Python工程师标准>>> 区块链100讲上期我们讲了哈希算法和公开密钥算法,说到哈希算法提到了一个名词"Merkle tree",梅 ...

  6. 区块链100讲:Truffle——一个更简单的部署智能合约的方法

    本期<区块链100讲>我们将介绍一个更简单的部署智能合约的方法:Truffle. 1 什么是Truffle ? Truffle是针对基于以太坊的Solidity语言的一套开发框架.本身基于 ...

  7. 2018中国区块链百强企业第三弹 | 链塔智库

    2019年1月22日,领先的区块链数据服务商--链塔(BlockData)联合清华大学互联网产业研究院.工信部赛迪区块链研究院在清华大学经济管理学院伟伦楼举办第一届中国区块链产业经济发展年会. 会上, ...

  8. 《区块链100问》笔记整理——23~41问

    火币集团打造了业内首个讲解区块链的系列小动画<区块链100问>,由新浪科技联合出品. 将抽象的区块链概念转化为100集轻松易懂的1分钟小动画,每集学懂一个知识点~ 原视频链接如下:http ...

  9. 区块链100讲:据说,80%的人都搞不懂哈希算法

    2019独角兽企业重金招聘Python工程师标准>>> 前面的<区块链100讲>介绍了区块链.算力.挖矿等,几乎每一讲都会提到一个词哈希(Hashing).聊到区块链的时 ...

  10. 区块链100讲:不做码农做矿工,该怎么和爹妈解释

    说起区块链和比特币的时候都会提到一个词"挖矿",还有个角色叫"矿工",等等,区块链不是属于技术圈吗?怎么和挖矿扯上关系了?只听说过管IT圈儿的人叫码农,怎么还有 ...

最新文章

  1. Ubuntu下RMI Server 抛出java.rmi.ConnectException: Connection refused to host: 127.0.0.1解决办法
  2. 基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET - 系统架构
  3. 曹大带我学 Go(10)—— 如何给 Go 提性能优化的 pr
  4. memcache/memcached/memcachedb 配置、安装(转)
  5. 小米一键上锁工具_小米首款高端全自动智能锁火热预售中,一触开启全自动时代...
  6. serialize-and-deserialize-bst
  7. pem格式证书编码 x509_证书编码格式
  8. 并发编程中,你加的锁未必安全
  9. Maven项目缺少Maven Dependencies解决方法
  10. 项目中用了spring这些牛逼的开发技巧,经理请我吃饭了
  11. 深度IP转换器安卓版APP怎么修改OPPO手机IP地址
  12. pix4d正射修补水面_大疆精灵4RTK航线规划技巧以及在CC、Pix4D和Photoscan数据处理教程汇总...
  13. python二维插值_SciPy二元样条插值
  14. android捕获全局异常lin,全局获取 (Activity)Context,实现全局弹出 Dialog
  15. Redis:只刷面试题,怎可能进大厂,多理解原理(Redis的服务器)
  16. 不服就GAN:GAN网络生成 cifar10 的图片实例(keras 详细实现步骤),GAN 的训练的各种技巧总结,GAN的注意事项和大坑汇总
  17. 齐次坐标(Homogeneous Coordinate)的理解
  18. App 应用测试方法以及测试思路……
  19. Kafka 入门 (一)
  20. android studio 成长历程

热门文章

  1. oracle 01157,Oracle数据库启动时出现ORA-01157和ORA-01110问题
  2. java jdbc 占位符_java-jdbc
  3. Log4net使用指南[转]
  4. 联系——让世界动起来
  5. 共性的缺失——由博客想到的
  6. 2018-08-13 谷歌 protobuf-lite:3.0.1
  7. GDAL使用DEM数据计算地形指数
  8. html——float与position的兼容性探究
  9. 使用Python在ArcGIS中编程杂谈
  10. erlang四大behaviour简述