昨天在B站学习到北京大学肖臻老师的《区块链技术与应用》的公开课,感到豁然开朗。

BlockChain涉及到密码学的两个方面:哈希和电子签名。

1.哈希。有计算机基础的童鞋都比较清楚其机制,这里再简单说一下其基本原理。

哈希的意思就是引入随机数量的输入数据,将其加密,然后得出一个固定输出数据,就叫做哈希。

输入可以是任何数据,只要能代表单个字节,一个MP3文件,整本小说,你的银行账单,甚至是整个互联网。关键在于输入可以无限大。哈希算法可以根据你的需求来进行选择,现在公开的也有很多种算法。关键点在于,这些算法会将无限的输入,转换成固定数量的字节。例如,256字节。

常用的哈希加密算法有:MD5(Message-Digest  Algorithm,MD5消息摘要算法)和SHA(Secure  Hash  Algorithm,安全散列算法),除了这两个之外,还有:DES(Data  Encryption  Standard,数据加密标准)以及AES(Advanced  Encryption  Standard,高级加密标准)。

在BlockChain中涉及到的哈希算法是SHA-256,实际上是双重SHA-256,

即SHA-256(SHA-256(Block_Header))。

哈希的用处很广,比如检查自己上传云的数据重新下载之后是否被篡改过等等,这里不必赘述。

BlockChain是这样使用哈希的:

区块链使用哈希,来表现整个区块链网络现在的状态。输入则是区块链的整个状态,也就是说近期完成的所有转账,输出就是哈希代表的区块链现在的状态。哈希就被用来在区块链网络中让各方相信,整个状态都是相同的。

首个哈希是为第一个区块或者是创世区块(Genesis block)所计算的,通过区块内部的转账数据得出。初始转账的顺序被用来计算创世区块的区块哈希。后来每挖出的新区块,之前的区块哈希也会被使用,同时还有这个区块的转账信息,作为输入值,来确定区块的哈希。这就是区块链的形成方式,每个新区块哈希指向的是之前区块的哈希。

这种哈希系统保证了任何转账记录都不会被改变,因为如果任何部分的转账记录改变,那么归属于这个区块的哈希值也会改变,那么任何接下来的区块哈希也会被改变。那么你可以简单地将哈希对比,就很容易去分辨出哪儿发生了改变。这就非常棒了,因为区块链上的每个人只需要对这256个字节达成共识,就可以代表区块链的状态。以太坊区块链现在是10MB,但是区块链状态只有256字节代表的哈希。

可以在下面链接里看到BlockChain Demo,如下图:

https://anders.com/blockchain/tokens

每一个区块Block包括Block Header和Block Body。Block Body存储交易数据,这些交易数据通过MerkleTree(每个区块所包含的交易组成Markle Tree,具体的会下篇详细介绍)计算出一个哈希。

BlockHeader包括六部分,如图。

人们所说的挖矿用简单的表述是这样的:

H(Block_Header) < Target

在Block_Header中有一个field叫做nonce,这个随机数数就是我们所需要找到的符合条件的数。提到这里就不得不说工作量证明了,及Proof of Work(POW)。因为想要得到nonce,是没有捷径的,需要强大的算力不停地去计算,所有可以被用来当做一种工作的证明。Nonce,Number used once或Number once的缩写,在密码学中Nonce是一个只被使用一次的任意或非重复的随机数值。

举个栗子:

给定的一个基本的字符串"Hello, world!",我们给出的工作量要求是,可以在这个字符串后面添加一个叫做nonce的整数值,对变更后(添加nonce)的字符串进行SHA256哈希运算,如果得到的哈希结果(以16进制的形式表示)是以"0000"开头的,则验证通过。为了达到这个工作量证明的目标。我们需要不停的递增nonce值,对得到的新字符串进行SHA256哈希运算。按照这个规则,我们需要经过4251次计算才能找到恰好前4位为0的哈希散列。

"Hello, world!0" => 1312af178c253f84028d480a6adc1e25e81caa44c749ec81976192e2ec934c64

"Hello, world!1" => e9afc424b79e4f6ab42d99c81156d3a17228d6e1eef4139be78e948a9332a7d8

"Hello, world!2" => ae37343a357a8297591625e7134cbea22f5928be8ca2a32aa475cf05fd4266b7

...

"Hello, world!4248" => 6e110d98b388e77e9c6f042ac6b497cec46660deef75a55ebc7cfdf65cc0b965

"Hello, world!4249" => c004190b822f1669cac8dc37e761cb73652e7832fb814565702245cf26ebb9e6

"Hello, world!4250" => 0000c3af42fc31103f1fdc0151fa747ff87349a4714df7cc52ea464e12dcd4e9

通过这个示例我们对工作量证明机制也有了一个初步的理解。

2.电子签名

电子签名,和真实签名一样,为了证明某人的身份,但是使用加密算法,会使得签名更加安全,不像手写的那种,可以很容易地修改。数字签名可以证明这个信息是从某个特定的人那儿来的,而且不是任何其他人。

在区块链上创造账号是并不需要在任何地方进行注册的。通过非对称加密,可以获得秘钥对——公钥和私钥(对非对称加密和对称加密的童鞋可以再自行查阅一些资料。)私钥意味着隐秘的信息,用来签署电子信息,并发送给别人。签名包含在信息中,以至于接受者可以验证发送者的公钥。这样地话,接收者就可以保证只有发送者可以发送这条消息。也就是说在区块链中的签名是用私钥来加密,公钥是让其他人来验证。

而且区块链上的任何交易都是由发送者使用私钥进行电子签名后才行。这个签名保证了只有账户拥有者可以转移其中的资产。

初探BlockChain——哈希和电子签名相关推荐

  1. 区块链为存证和分布式存储带来哪些变化?

    去年底应邀参加北京电视台<解码区块链>的节目录制,关于存证和存储的话题一直是大家比较关注的,虽然过去将近半年,今天找出来这个话题,看着依然还值得探讨. 第八期:区块链为存证和分布式存储带来 ...

  2. 关于区块链在存证方面的应用

    区块链相对于传统文件存储 节省中介交易成本 ​ 由于区块链使用的是去中心化分布式存储结构,所以在彼此之间并没有互信的基础上也可以使用规模比较大的协作工具,因此在很多传统中心化领域当中都可以使用区块链服 ...

  3. 干货|“区块链+物联网”的发展现状和应用案例

    区块链与其它技术进行融合,以打造完整的解决方案,已成为行业共识.其中,物联网可以大规模低成本地采集数据,而区块链可以大规模低成本地信任数据,因此区块链与物联网的融合被认为具有较大的想象空间.截至目前, ...

  4. 哈希算法(Hash Algorithm)初探

    不约而同的,几乎所有的流行的hash map都采用了DJB hash function,俗称"Times33"算法. Perl.Berkeley DB .Apache.MFC.ST ...

  5. 区块链隐私保护文献 An Efficient NIZK Scheme for Privacy-Preserving Transactions over Account-Model Blockchain

    读:An Efficient NIZK Scheme for Privacy-Preserving Transactions over Account-Model Blockchain 本文的目的 找 ...

  6. Blockchain技术之区块链的概念和起源以及区块链的运行方式、发展前景和应用领域分析

    一.什么是"区块链"? 区块链起源于中本聪的比特币,作为比特币的底层技术,本质上是一个去中心化的数据库,是指通过去中心化和去信任的方式集体维护一个可靠数据库的技术方案. 区块链技术 ...

  7. “中国诺贝尔奖”首位女得主王小云:哈希函数是区块链的起源性技术,区块链已扩展到供应链金融等多领域...

    "哈希函数.数字签名算法.加密算法是密码学三类基础算法,其中哈希函数是起源性技术." 本文旨在传递更多市场信息,不构成任何投资建议. 火星财经APP(微信:hxcj24h)一线报道 ...

  8. blockchain 区块链200行代码:在JavaScript实现的一个简单的例子

    blockchain 区块链200行代码:在JavaScript实现的一个简单的例子 了解blockchain的概念很简单(区块链,交易链块):它是分布式的(即不是放置在同一台机器上,不同的网络设备上 ...

  9. BlockChain:区块链技术基础概念综合理解——个人总结

    BlockChain:区块链技术基础概念综合理解--个人总结 目录 区块链的进阶与意义 1.区块链技术的进阶 2.区块链技术三大意义-传递价值.建立可信用环境.提高效率和降低成本 1.传递价值 2.建 ...

最新文章

  1. C# 笔记 获取程序当前目录
  2. 金融专业计算机大几可以不学,大学选专业,只要明白4个档次,3个原则,基本不会有太大的问题...
  3. Eclipse中javascript文件 clg 变为console.log();
  4. MSF(六):后渗透
  5. Django从理论到实战(part19)--DTL模板语法
  6. python自动化运维快速入门pdf下载_Python自动化运维快速入门
  7. oracle 索引invisible,Oracle index unusable和invisible的区别
  8. android progressdialog 样式,android之修改系统自带ProgressDialog样式
  9. JDK源码解析之java.util.AbstractCollection
  10. 选防晒霜 要看四个要点 - 健康程序员,至尚生活!
  11. 随想:增强类的重用性
  12. java8计算两个日期之间的天数
  13. es的分片和副本_原创|ES广告倒排索引架构演进与优化
  14. android studio撤回快捷键,Android Studio常用快捷键、Android Studio快捷键大全
  15. 给大家分享几个经典c语言简单案例
  16. 【软件工程】-可行性研究报告
  17. 分段衰减衰减系数_深度学习中的固定学习率衰减策略总结
  18. springboot基于微信小程序的在线考试系统
  19. 自然常数e是什么?它是怎么来的?
  20. python卡方检验关键词,Python卡方检验

热门文章

  1. 简便的屏幕录像工具screen recorder mac正确安装步骤
  2. 使用脚本控制外部流程-CMD
  3. 温湿度模块DHT22详解一:基础篇
  4. 如何隐藏计算机桌面窗口,电脑桌面窗口被隐藏,如何取消隐藏? 打开网页,各种软件,桌面下边的窗口都被隐藏了,很不方便。...
  5. 如何提高新网站谷歌百度收录量
  6. 【Nest教程】Nest项目配置http和https
  7. 车载多媒体Android开发平台学习心得
  8. android 使用阿里百川电商SDK的问题
  9. 基于WT2003H语音芯片在GPS公交车自动报站系统的应用设计方案
  10. 2713-54-4,α-D-Mannopyranosyl Fluoride,-D-氟代吡喃甘露糖分子式: C6H11FO5