jjzjj

第一节 区块链技术的学习铺垫

青词- 2024-06-04 原文

区块链起源于比特币。2008年11月中本聪的发表《比特币:一种点对点的电子现金系统》,阐述了基于 P2P 网络技术、加密技术、时间戳技术、区块链技术等的电子现金系统的构架理念,标志着比特币的诞生。两个月后比特币程序编写完成并自组网开始运用,2009年1月3日第一个序号为0的比特币创世区块诞生,2009 年1月9日出现序号为1的区块,并与序号为0的创世区块相连接形成了链,标志着区块链的诞生。比特币发展缓慢,但近几年作为比特币底层技术之一的区块链技术日益受到重视。

区块链更多可以看作一种对已有技术的应用,而非单纯的提出了一种技术。所以,在系统的学习区块链技术之前,让我们来看看区块链用到了哪些技术。

密码学

哈希

在比特币这一技术中,使用到了密码学中的两个功能,第一个功能为哈希。

首先简单介绍一下哈希,比特币使用的哈希具有三个性质:

  1. Collision resistance(抗碰撞性):即对于某个哈希函数H(·),输入x和输入y,如果有x≠y,则有H(x)≠H(y)
  2. hidding(单向不可逆):即假设有一个哈希函数H(·),给定输入x,我们可以得到哈希输出H(x),但是给定一个哈希输出H(x)和H(·),我们无法求得x是什么。也即H(x)没有泄露x的任何信息。
  3. Puzzle friendly:由于哈希值是不可预测的,所以如果要H(x)落在某个范围内,没有什么好的办法,只能一个一个x去尝试。这个特性使得在打包区块的时候,必须进行大量的运算(为了让hash值落于某个区间中)。

比特币使用的哈希函数是sha-256,collision resistance这一性质主要用于保证区块链每个区块的不可篡改性质;puzzle friendly这一性质主要用于工作量确认。

非对称加密

用到的第二个密码学功能为非对称加密。在每个比特币用户创建账户的时候,都会创建一个公私钥对。a在给b发送信息的时候,使用b的公钥对信息加密,b然后使用自己的私钥对信息解密。同时,在发布这样一个信息的时候,a需要使用自己的私钥对信息进行签名,这样网络中的其他节点可以使用a的公钥确认这个信息是否由a发布。

在第三方中心化系统中,账户开通依赖于第三方。但去中心化的比特币系统中,很明显不能进行“申请账户”。在比特币系统中,申请账户是用户自己来处理的,即自己创建一个公钥-私钥对。

公钥和私钥的应用保证了“签名”的应用。当在比特币网络中进行转账时,通过“签名”可以明确是由哪个账户转出的,从而防止不良分子对其他账户比特币的盗取。

在发布交易时,通过自己私钥签名,其他人可以根据公钥进行验证,从而保证该交易由自己发起。也就是说,只有拥有私钥,才能将该账户中的比特币转走。

数据结构

哈希指针

区块链是一个将各个区块串起来的链,而串联起这些区块的就是哈希指针。一个哈希指针包含两部分数据:

  1. 指向某一信息存储的指针
  2. 某一数据块的哈希值

如下图对于该节点,白色方框即为一个区块链的区块。我们可以看到有两个指针指向这个节点(实际上为一个),其中P为该节点的地址,H()为该节点的哈希值,该值与节点中内容有关。当节点(区块)中内容发生改变,该哈希值也会发生改变,从而保证了区块内容不能被篡改。

在比特币中,其最基本的数据结构便是一个个区块形成的区块链。每个区块根据自己的区块内容生成自己的哈希值,此外,每个区块(除创世纪块)都保存有前一个区块的哈希值。需要注意的是,本区块哈希生成依赖于本区块内容,而本区块内容中又包含有前一个区块的哈希值。从而保证了区块内容不被篡改。

区块的结构

在区块链中,每个区块包含两部分数据:

  1. Block header
  2. Block body

每个区块header中,包含指向前一个区块的指针,也包含一个对前一个区块的header进行哈希得到的值。

如果现在要对第i个区块的信息进行修改,就会导致这个区块的哈希值变化,这就要求i+1个区块的哈希值也发生变化,一直到最后一个区块的数据发生变化,最终导致pointer of the last block中的哈希值和最后一个区块的哈希值对不上。这就使得区块链具有不可篡改的性质。

Merkle tree

上图即为一个简单的Markle Tree,其中最下面的节点即为交易数据块。每个交易数据块各有一个哈希值,将所有叶子节点的哈希值合并放在其父节点中,而后,针对得到的一级父节点分别取哈希,又可以得到n/2个新的哈希值,通过不断迭代,即可得到图中根节点。

实际中,在区块块头中存储的是根节点的哈希值(对其再取一次哈希)。这种数据结构的优点在于:只需要记住Root Hash(根哈希值),便可以检测出对树中任何部位的修改。例如,所绘制Markle Tree中节点B发生了改变,则对应的第二层第一个节点中第二个哈希值便也会发生改变,进而根节点中第一个哈希值也会发生改变,从而导致根哈希值也发生了改变。

根据前文中我们知道,区块链分为header和body,body即为保存交易的地方,保存形式即为Merkle tree的形式。在区块链中,Merkle tree的每个叶子节点对应于一笔交易,除了叶子节点的节点储存的都是指向其左右孩子的哈希指针。根据Merkle tree的性质,只要任何叶子节点中的交易被修改,就会导致根节点的哈希值发生变化。

在每个区块header中,除了包含指向前一个区块的指针,以及一个对前一个区块的header进行哈希得到的值,还包含当前区块body的Merkle tree的根哈希。但不包含具体的交易信息。

因此如果有任何交易发生变化-》根节点哈希变化-》区块header保存的根节点哈希发生变化-》区块header的哈希发生变化。这就要求后一个区块保存的当前区块的哈希也得同步改变,而这是很难办到的。

下图即为一个完整的比特币区块的信息

有关第一节 区块链技术的学习铺垫的更多相关文章

  1. 区块链之加解密算法&数字证书 - 2

    目录一.加解密算法数字签名对称加密DES(DataEncryptionStandard)3DES(TripleDES)AES(AdvancedEncryptionStandard)RSA加密法DSA(DigitalSignatureAlgorithm)ECC(EllipticCurvesCryptography)非对称加密签名与加密过程非对称加密的应用对称加密与非对称加密的结合二.数字证书图解一.加解密算法加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密、对称加密和非

  2. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  3. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  4. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  5. MIMO-OFDM无线通信技术及MATLAB实现(1)无线信道:传播和衰落 - 2

     MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO

  6. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  7. ruby - 我正在学习编程并选择了 Ruby。我应该升级到 Ruby 1.9 吗? - 2

    我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or

  8. ruby-on-rails - CarrierWave - PDF - 只选择第一页 - 2

    我的Rails应用程序中安装了carrierwave。但是,当用户上传多页pdf时,我只希望应用程序获取文档中的第一页并将其转换为jpeg。这可能吗?用什么命令?这是我的uploader。#encoding:utf-8classImageUploader[200,300]##defscale(width,height)##dosomething#end#Createdifferentversionsofyouruploadedfiles:version:thumbdoprocess:resize_to_fill=>[150,210]process:convert=>:jpgdefful

  9. ruby - 如何跳过 CSV 文件的第一行并将第二行作为标题 - 2

    有没有办法跳过CSV文件的第一行,让第二行作为标题?我有一个CSV文件,第一行是日期,第二行是标题,所以我需要能够在遍历它时跳过第一行。我尝试使用slice但它会将CSV转换为数组,我真的很想将其读取为CSV,以便我可以利用header。 最佳答案 根据您的数据,您可以使用另一种方法和skip_lines-option此示例跳过所有以#开头的行require'csv'CSV.parse(DATA.read,:col_sep=>';',:headers=>true,:skip_lines=>/^#/#Markcomments!)do|

  10. ruby - 我如何学习 ruby​​ 的正则表达式? - 2

    如何学习ruby​​的正则表达式?(对于假人) 最佳答案 http://www.rubular.com/在Ruby中使用正则表达式时是一个很棒的工具,因为它可以立即将结果可视化。 关于ruby-我如何学习ruby​​的正则表达式?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1881231/

随机推荐