首页 > 其他分享 >区块链技术与应用(一)

区块链技术与应用(一)

时间:2023-07-03 21:47:01浏览次数:30  
标签:应用 比特 技术 哈希 Merkle 区块 节点 指针

一、课程简介

区块链不等于比特币。比特币是基于区块链技术的一种加密货币。

学习参考资料:
1、比特币白皮书中文版
2、以太坊白皮书中文版+注释
3、以太坊黄皮书
4、Solidity官方文档(v8.0)

二、密码学原理

比特币是一种加密货币(crypto-currency)。区块链上所有的交易内容都是公开的,包括账户地转账金额等。

在比特币系统中,主要运用了密码学中的两个功能,一个是哈希,一个是签名。

1.哈希

密码学中使用的哈希函数有两个重要性质。

①哈希碰撞(cryptographic hash function)

哈希碰撞是指两个输入通过哈希函数计算出来的哈希值相等。哈希碰撞比较常见,比如在哈希表中,不同的输入可能会被映射到同一个哈希位置。

  • 哈希碰撞的作用:

低效的解决哈希碰撞的方法:暴力剖解(brute-force),遍历所有输入的可能性,找到哈希碰撞的输入。这种方法工作量太大、低效。 效率太低!!!

注意:哈希碰撞是不可避免的,因为输入空间大于输出空间。哈希碰撞是客观存在的,没有什么高效的方法人为地去制造哈希碰撞。(MD5加密算法已经可以被人为地计算出哈希。)

②不可逆性(hiding)

不可逆性是指哈希函数的过程是单向的,不可逆的。这个性质成立的前提是输入的空间要足够大,使得暴力破解的方法不可行,而且输入的分布要比较均匀,各种取值的可能性都差不多。

  • 不可逆性的作用

可以和哈希碰撞结合在一起,用来实现哈希函数将预测结果加密,实际结果发布后将预测结果和实际结果对比,能够使人信服预测结果是在实际发布前预测的(digital commitment or digital equivalent of sealed envelope)。sealed envelope现实意义是指如果一个人预测结果,但是不能提前公开,因为只要公开,不论预测结果对错,都会影响现实世界的变化。但是可以将预测结果交给第三方公证,待事实结果发布后,公开并比较预测结果与事实结果。【简单理解解释:把预测结果放到一个信箱,待开箱后,判断真实结果和之前预测的结果是否一致。】

③Puzzle Friendly

哈希值的计算事先不可预测,只根据输入很难预测出输出。如果需要找出一个哈希值存在某个范围内,只能通过一个一个运算才能找出。

Puzzle friendly这个性质保证了比特币系统中,只能通过挖矿获得比特币。

挖矿就是找一个随机数nonce,nonce和区块头里其他信息合在一起作为输入,取出一个哈希来,那个哈希值要小于某个指定的目标预值,只能通过一个一个试,才能找出在范围中的值。挖矿的过程没有捷径,只能通过大量的一个一个试nonce,才能找到符合要求的值,这个过程叫做工作量证明(POW,proof of work)。

当有人找到了符合要求的nonce发布出去后,其他人要验算是否符合要求只需要算一次哈希值是否小于目标预值。挖矿很难,验证很容易。这个性质叫做difficult to solve,but easy to verify。

比特币中用的哈希函数叫做SHA-256。SHA是指secure hash algorithm,满足哈希函数的三个性质。

哈希碰撞和puzzle friendly性质有一定联系,但不完全一样。

2.比特币系统中的账户管理

比特币是去中心化的,每个用户可以自己开设账户,不需要任何人批准。开户的过程就是创立一对公钥和私钥。

公私钥概念来源于非对称加密体系(asymmetric encryption algorithm)。

最早的加密体系是对称加密(symmetric encryption algorithm) ,发送方和接收方事先商量好一个密钥(encryption key),发送方将信息加密后发送给接收方,接收方收到后用密钥解密,对称加密的前提是能有个安全的信道,将密钥安全地分发给通讯方。(弱点:密钥分发不方便)

比特币中的公钥私钥作用:用户签名。

交易发起方用自己的私钥对交易进行签名,其他人收到交易后用发起方的公钥去验证签名是否正确。产生两个相同公私钥的账户的可能性微乎其微。生成公私钥的过程是随机源。(a good source of randomness)

非对称加密使用接收方的公钥和私钥,公钥加密,私钥解密。

好处:加密公钥不需要保密,私钥保存在本地,解决了对称加密中密钥分发不方便的问题。

比特币中使用的签名算法,不光是生成私钥的时候要有好的随机源,之后每一次签名的时候也要有好的随机源。只要有一个签名的过程中的随机源不好,就有可能泄漏私钥。

三、比特币中的数据结构

1.哈希指针(hash pointers)

普通的指针存储的是某个结构体在指针中的地址,哈希指针要存储地址和哈希值。

比特币中最基本的数据结构就是区块链。区块链是一个个区块组成的链表。

区块链与其他普通链表的区别:

  • 区块链用哈希指针代替了普通指针。
  • 区块链的一个哈希指针改变会影响到其他哈希指针,普通指针变化不会影响其他的指针。【多米诺效应】
  • 每一个区块都保留了指向前一个区块的哈希指针

哈希指针的内容是把整个区块的内容取哈希。

区块链数据结构的好处:

通过这种数据结构可以实现 tamper-evident log(防篡改log,后一个区块保存了前一个区块的哈希值,前一个区块修改了区块的内容,哈希值会改变,后一个区块会找不到前一个区块的哈希指针,所以就要修改后一个区块的哈希指针,以此类推,系统保留的哈希指针也需要修改,就只需要记住系统中保留的哈希,就可以检测任何一个部位的修改。系统中任意一个区块的哈希值发生改动,最终保存的这个区块的哈希值也会发生改动。即“牵一发而动全身”=>多米诺骨牌效应)

比特币可以根据这个性质,只保存最近的几个区块哈希。如果需要找之前的区块,可以使用哈希指针找到正确的区块。

2.默克尔树(merkle tree)

Merkle tree 和 binary tree 的区别:
用哈希指针代替了普通的指针

image-20230703152646886

B树的特点:数据值存放在叶子结点

Merkle tree的好处:只要记住根哈希就可以检测出对树中任何部位的修改。

比特币当中各个区块用哈希指针连接在一起,每个区块所包含的交易是组织成Merkle tree的形式。每层数据块是一个交易->叶子节点。每个区块分为两部分,块头(block header)和块体(block body),根据哈希值存储在块头中,即这个区块所包含的所有交易组成的Merkle tree的根哈希值是存储在这个区块的块头中,但是块头中没有交易的具体内容,只有根哈希值。块体中有交易的列表。

Merkle tree的用途:提供Merkle proof

比特币中的节点分为两类:

全节点:保存整个区块的内容,包括块头和块体,有交易的具体信息

轻节点:只保存块头,如手机上的比特币钱包。

如何向轻节点证明某个交易是写入到区块链中?

使用Merkle proof,找到交易所在的位置。(从交易一直往根节点的路径就是Merkle proof。)

image-20230703164623826

轻节点向某个全节点发出请求,请求一个能够证明交易被包含在这个Merkle tree的Merkle proof,全节点收到请求后,只要全节点请求的哈希值(红色的)发给轻节点即可,轻节点可以通过这些哈希值在本地计算出SPV本地计算哈希值(绿色的),首先算出交易的哈希值,再和旁边红色哈希值拼接可以算出上一层哈希,依次类推出整棵树的根哈希值。轻节点把根哈希值和块头的哈希值比较就可以知道交易是不是在Merkle tree里。轻节点收到Merkle proof后只要从下往上验证,沿途的哈希值都是正确的,即可证明。

注意:查询哈希值只能查询某个交易的从下往上分支的哈希,不能查询其他分支的哈希。这种证明叫做proof of membership或者proof of inclusion,即可证明Merkle tree包含了某个交易。时间复杂度是O(logn)

标签:应用,比特,技术,哈希,Merkle,区块,节点,指针
From: https://www.cnblogs.com/codingbao/p/17524172.html

相关文章

  • h5通过scheme地址唤起App或打开下载App的应用商店
    实现目标:可以在h5页面点击按钮唤起App,如果没有下载改App,则打开应用市场对应的APP的下载页面。实现步骤2步: 将打开App按钮设置为<a>标签,href值设置为App的scheme地址。   <a href='scheme' target='_self'/> 同时开启定时器,3-5秒后跳转对应的应用商店(后面会说明......
  • 《加密与解密》- 第3章 - 静态分析技术 - 笔记
    PDF版本https://www.aliyundrive.com/s/xyrJmVkc7eS......
  • 卫星影像地图在工程建设中的应用,附高清影像数据获取方法
    1.引言在工程建设过程中,了解项目区域范围内的现状至关重要。卫星地图具有较高的图像分辨率和详细、准确的地理信息的特点,被广泛应用于工程建设的前期规划设计、施工现场。那么卫星地图在工程建设中都有哪些应用呢? 2.卫星地图在工程建设中的作用2.1地籍调查在前期的拆迁等调......
  • 中移物联车联网项目,在 TDengine 3.0 的应用
    小T导读:在中移物联网的智慧出行场景中,需要存储车联网设备的轨迹点,还要支持对车辆轨迹进行查询。为了更好地进行数据处理,他们在2021年上线了TDengine2.0版本的5节点3副本集群。3.0发布后,它的众多特性吸引着中移物联网进行了大版本升级。本文详细分享了中移物联网在3.0......
  • 理解ASEMI代理海矽美快恢复二极管SFP3012A的性能与应用
    编辑-Z在电子元件领域,快恢复二极管SFP3012A是一种重要的半导体器件,它在电路设计中扮演着至关重要的角色。本文将深入探讨SFP3012A的性能特点和应用领域,帮助读者更好地理解和使用这种二极管。 一、SFP3012A的性能特点 快恢复二极管SFP3012A具有许多优秀的性能特点。首先,它具......
  • SIEBEL应用概述
    http://bbs.erp100.com/thread-44401-1-1.htmlSIEBEL应用概述SiebelCRM是围绕客户关系管理这个主题建立起来的一系列应用的总和,和一些国内公司的CRM/CALLCENTER产品不一样,Siebel应用远远不是只是接一些电话然后记录下来并进行处理这么简单。Siebel应用是通过统一协调管理各个联......
  • 公告 | 苏州方正璞华信息技术有限公司正式更名为璞华科技有限公司
    关于公司更名公告尊敬的各位客户、合作伙伴:因公司进一步发展需要,根据《中华人民共和国公司法》的相关规定,经过国家市场监管总局审批,我司名称由“苏州方正璞华信息技术有限公司”更名为“璞华科技有限公司”。我司源于北大方正,2014年从方正集团分拆独立,秉承方正集团创始人王选先......
  • 低代码应用开发平台 高效构建业务系统
    低代码是传统软件开发逐步优化和演变的产物,并非全新革命。传统的开发方法过于昂贵和僵化,无法为企业提供所需的高效和敏捷的开发流程,且交付周期长定制能力弱,难以应对不断变化的市场和客户期望,为提高软件开发效率,对代码进行模块化组装的低代码产品进入开发者视野。低代码是基于可视......
  • python configparser模块的应用
    1、获取所有sectionimportconfigparser config=configparser.ConfigParser()config .read('文件所在的路径',encoding='utf-8')ret=config .sections()print(ret) 2、获取指定section下所有的键值对importconfigparser config=configparser.ConfigParser()......
  • 移动应用加固:政务APP如何保障安全?
    作为一款服务国土调查和自然资源管理工作的一款手机App,是自然资源部自然资源调查监测司组织中国国土勘测规划院应用互联网+、云计算等技术,依托“三调”和年度国土变更调查工程开发的平台。分为管理版和专业版两个版本,其中,管理版面向自然资源系统内人员,专业版面向系统外专业技术队......