IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> 比特币的密码学原理和数据结构 -> 正文阅读

[区块链]比特币的密码学原理和数据结构

比特币

一、比特币

????????比特币:一种点对点的电子现金系统,一个完全的点对点版本的电子现金将允许一方不通过金融机构直接在线支付给另一方。

二、比特币的密码学原理

1、哈希算法

????????哈希算法就是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。哈希算法具有以下的两种特征:

(1)、collision resistance(哈希碰撞)
????????所谓哈希碰撞就是给出两个不同的输入,通过哈希计算得出相同的散列值。但是目前还没有在数学上证明哈希碰撞的性质,只是实践经验。在比特币中使用的是哈希算法是Hash(SHA—256)
目前找到两个不同的输入使得二者的哈希值相等的一种方法是蛮力求解,但是现实生活中由于工作量太大,基本是不可行的。
(2)、hiding
????????加密过程不可逆,也就是可以通过x—>H(x),但是不能通过H(x)计算得到x。由此可以看出这个性质可以进行数据隐藏。

比特币还需要第三种性质
(3)、puzzle friendly
????????哈希算法中通过输入值很难预测出哈希值。
????????在比特币挖矿中,挖矿也就是寻找一个随机数nonce,然后将随机数nonce和区块头中的其他信息作为输出,得到一个符合条件的哈希值H(blockheader)≤target(target为阈值)。所以只能通过输入不同的nonce值测试,使得整个blockheader取哈希小于阈值。
2、签名
????????比特币是一个去中心的系统,用户想要创建一个账户,只需要创建一个公钥—私钥对
????????公钥不需要进行保密,而私钥则保存在本地,需要保密。假设甲要给乙发送消息,甲用乙的公钥对消息进行加密,发送给乙,乙接收到消息之后用自己的私钥进行解密。
(1)、数字签名
????????如果使用签名,甲首先对消息进行哈希得到“摘要”(digest),然后用自己的私钥对摘要加密生成“数字签名”(signature),将数字签名和消息一起发送给乙,乙得到消息,使用甲的公钥解密被加密的摘要,确定这个消息是由甲发送的,然后对消息进行哈希,得到摘要,与发送过来的摘要比较,如果相同则说明消息没有被修改。

三、比特币的数据结构

1、区块链
????????比特币中最基本的数据结构就是区块链。区块链就是由一个一个区块组成的链表,区块链和普通的链表的区别就是hash指针代替了普通的指针。

在这里插入图片描述

????????每个区块包含一个前一个区块的hash指针,这个指针是对前一个区块整个信息进行hash出来的,包括前一个区块的hash指针,通过这种数据结构可以实现防篡改。因为,一旦改了某个区块的信息,那么它后面的区块的hash指针就要变化,后面的区块的hash指针一变,后面的后面的hash指针也要跟着变,所以这个数据结构的好处是,只要我们保存最后一个hash指针,那么区块链上任意一个区块发生改变,我们都可以知道
2、Merkle Tree
? ?????????区块链利用Merkle树的数据结构存放所有的叶子结点的值,Merkle树的叶子是数据块(例如,文件或者文件的集合)的hash值。非叶节点是其对应子节点串联字符串的hash。

在这里插入图片描述

?

?

?

Merkle Proof
? ? ? ?比特币中的节点分为两类,一类是全节点,一类是轻节点,全节点保存整个区块的内容(即有block header和block body),轻节点只保存block header。轻节点不包含block body,但是交易信息是在block body里面的,轻节点想要查询一个交易消息是否存在,则需要Merkle Proof。?

在这里插入图片描述

? ? ? ?上图可以看出想要证明这个交易存在,轻节点向全节点发送一Merkle Proof请求,全节点受到请求后会把三个红色H()发送给轻节点,轻节点则通过哈希依次计算绿色H()最后得到一个根哈希值将此哈希值与block header里保存的根哈希值比较一下就可以确定黄色的交易是否存在这颗Merkle Tree里。

?

?

?

  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2021-08-26 12:09:24  更:2021-08-26 12:10:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/9 1:28:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码