ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

区块链学习笔记(一)

2022-06-03 17:35:00  阅读:163  来源: 互联网

标签:hash 比特 笔记 学习 加密 区块 节点 指针


比特币是一种加密虚拟货币,但是比特币本身不加密,利用hash进行加密。是一个分布式的支付系统。每个节点都维护一个账本,每次交易需要半数以上的节点通过,从而防止某个节点篡改账本。

一、比特币中的密码学

比特币中用到的密码学方法有两个——hash和签名

1.hash

hash是整个区块链的基础。在比特币中利用hash的hash resistance、hiding和puzzle friendly特性来实现加密

hash resistance就是指不存在高效的方法制造hash碰撞。hash resistance是理论上的。并不能证明,只是实践上,对于一个hash函数,没有人找到一种高效构造hash碰撞的方法,那么就说这个hash函数是hash resistance的。

hiding简而言之就是说hash函数不存在逆函数,知道一个hash值不能够构造出被加密的值。如果输入空间非常小,那就可以通过暴力求解的方式来找到输入。在实践中常常在前面加一串随机数扩大输入空间。

puzzle frendly就是没有高效的办法找到一种输入来构造出所需特征的hash值。这个特性可以用于工作量证明。挖矿的过程就是在寻找一个nonce,这个nonce和区块链中区块头里的其他元素合在一起取hash值,使hash值小于一个指定的阈值(target)。想要找到这个nonce就只能暴力枚举。

difficult to solve,but essay to verify性质。就是讲一个nonce是非常难寻找的,但是找到之后将其发布出去,其他节点非常容易验证。
比特币中使用的hash函数是 SHA-256

2.签名

比特币使用非对称加密体系来实现签名。每个节点有一个发布出去的公钥和一个不发布的私钥。公钥用于加密,私钥用于解密。如果节点A要给节点B发送信息,那么就用B的公钥进行加密,B拿到加密后的信息后,再用私钥进行解密。
在数字签名技术中,对交易签名(加密)用的是私钥,验证(解密)用的是公钥。比如A发布了一次交易,那么A用自己的私钥对这次交易进行签名,然后把签名和交易信息都发布出去,其他节点利用A的公钥、签名、交易信息来进行验证,就可以确定这笔交易确实是由A发布的。

二、比特币的数据结构

比特币的每个节点都要维护一个共同的账本,这个账本就是区块链的形式。

1.hash 指针

hash指针不仅保存了一个区块的地址,也保存了前一区块的hash值。区块链通过hash指针将一堆区块连接起来。 每个hash指针保存了前一个区块(包含前一个区块的hash指针在内所有信息)的hash值。因为hash指针的这种计算方法,所以一旦修改了某一个block中的内容,那么这个block后面所有区块的hash指针都会改变。想要验证整个区块链是不是被篡改该,只要比对一下最后一个hash指针就可以了。这样就只需要保存最后一个hash指针

2.merkle tree

merkle tree就是一个二叉树的形式,用hash指针来代替普通的边。tx表示每个交易,对每个tx进行一次hash之后得到底层的hash值,然后每层都将下面两层的hash值拼接起来取hash值得到父节点的hash值,最后得到一个root hash。

3.轻节点中的验证

在比特币系统中,大部分节点都是轻节点,轻节点只保存最近几次交易的hash值。全节点保存区块链中的所有信息。那么如果A与B进行交易,A对B进行了一次转账交易,在图中表示为黄色tx,然后A将这个交易带上自己的签名发布了出去,那么B如果是一个轻节点,如何验证A确实进行了这次交易呢?B从附近全节点中获取到所有红色hash值。然后B计算出黄色的hash值,就可以得到绿色hash值,然后与A给的红色hash值合并得到上方hash值,最终得到了根hash值,与全节点中保存的根hash值进行比对,如果没有问题说明确实进行了这次交易。

标签:hash,比特,笔记,学习,加密,区块,节点,指针
来源: https://www.cnblogs.com/wxyww/p/16340263.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有