初探BlockChain——哈希和电子签名

2023-11-14

昨天在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.电子签名

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

初探BlockChain——哈希和电子签名 的相关文章

  • 理解密码学中的双线性映射

    回顾 什么是群 一 定义 定义1 设G是定义了一个二元运算 的集合 如果这个运算满足下列性质 1 封闭性 如果a和b都属于G 则a b也属于G 2 结合律 对于G中的任意元素a b和c 都有 a b c a b c 成立 3 单位元 G中存
  • 【华为OD】

    华为OD试题注意事项 使用合适的编程语言 在华为OD机试中多数情况下使用C 或Java 按照题目要求进行编码 仔细阅读题目描述并理解要求 在编码前可以进行伪代码编写或画流程图有助于理解和排除逻辑错误 注意代码的规范性 注重代码的可读性和可维
  • linux启动和停止springboot项目的命令

    1 启动命令 nohup java jar dingding function 0 0 1 SNAPSHOT jar gt catalina out 2 gt 1 2 命令详解 nohup 不挂断地运行命令 退出帐户之后继续运行相应的进程

随机推荐

  • Accessors are only available when targeting ECMAScript 5 and higher 错误提示

    来到这里 说明聪明又勤快的你 一定是在学习JavaScript的超大集群Typescript 幸幸苦苦写完代码 运行结果如下 error TS1056 Accessors are only available when targeting
  • 码云实战(一)——idea实现将本地的项目推送到码云上

    文章目录 前言 一 创建本地仓库并关联 二 将项目提交本地仓库 三 关联远程仓库 3 1 创建空白的远程库 四 推送到远程仓库 五 验证是否推送成功 总结 前言 本系列文章主要记录日常使用中碰到的码云的相关问题 一 创建本地仓库并关联 用I
  • Pandas知识点-详解聚合函数agg

    Pandas知识点 详解聚合函数agg Pandas提供了多个聚合函数 聚合函数可以快速 简洁地将多个函数的执行结果聚合到一起 本文介绍的聚合函数为DataFrame aggregate 别名DataFrame agg aggregate
  • 计算机共享打印怎么设置密码,共享打印机需要密码的解决方法

    Q 共享打印机 客户机访问主机计算机提示输入账户和密码如何解决 A 造成是此问题的原因是主机电脑安全级别较高造成的 在主机电脑按照以下方法调整即可解决 1 Windows XP 点击 开始 控制面板 WINDOWS防火墙 列外 将 文件和打
  • Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect

    Session 0x0 for server null unexpected error closing socket connection and attempting reconnect 错误原因 zookeeper没有正常启动 为了避
  • Linux系统下PORT端口引脚导出GPIO对应的序号关系

    文章首发于同名微信公众号 DigCore 欢迎关注同名微信公众号 DigCore 及时获取最新技术博文 PORT端口中的引脚序号与GPIOx的对应关系 GPIOx P 32 N P PORTA 0 PORTB 1 PORTC 2 N PA0
  • 聊一聊fastjson

    文章目录 一 新手引导 1 什么是fastjson 2 fastjson的优点 2 1 速度快 2 2 使用广泛 2 3 测试完备 2 4 使用简单 2 5 功能完备 三 源码分析 3 1JSON toJSONString 3 1 1调用J
  • 使用OpenCASCADE绘制线束的基本操作

    使用OpenCASCADE绘制线束的基本操作 在OpenCASCADE中 绘制线束是一个常见的操作 下面我们将介绍OpenCASCADE中绘制线束的基本命令 以及相应的源代码 创建导向线 要在OpenCASCADE中创建导向线 可以使用以下
  • vscode卡顿优化设置

    点击左上角 文件 首选项 设置 1 向Microsoft发送使用情况 搜索关键词 telemetry 2 搜索索引 搜索关键词 search exclude 搜索是VSCode最耗费内存的活动之一 它必须保留所有文件及其内容的索引 您可能不
  • 渗透信息收集步骤(简约版)

    第一步 域名的信息收集 1 whois信息查询 备案信息查询 相关查询地址 天眼查 https www tianyancha com ICP备案查询网 http www beianbeian com 国家企业信用信息公示系统 http ww
  • 互联网情报屋

    社交领域 微信 手机 QQ 新浪微博 陌陌等 在线游戏 腾讯 奇虎 360 昆仑 在线视频 优酷 土豆 爱奇艺 PPS 乐视 迅雷看看 在线娱乐 YY 9158 招聘 51job 智联招聘 下载工具 迅雷 QQ旋风 网盘 金山快盘 360云
  • THE MNIST DATABASE of handwritten digits

    The MNIST database of handwritten digits available from this page has a training set of 60 000 examples and a test set o
  • FL Studio 20汉化补丁及详细激活使用说明/fl studio21怎么设置中文?

    音乐在人们心中的地位日益增高 近几年音乐选秀的节目更是层出不穷 喜爱音乐 创作音乐的朋友们也是越来越多 音乐的类型有很多 好比古典 流行 摇滚等等 对新手友好程度基本上在首位 电音类制作支持仅次于Ableton Push 调用音色和素材很方
  • 第五站:入门级小白易上手JavaScript

    第五站 入门级小白易上手JavaScript 文章目录 第五站 入门级小白易上手JavaScript 复习Web标准 三位好基友 什么是JavaScript 让我们开启JavaScript的奇妙冒险 引入JavaScript 让魔法生效 内
  • 如何下载安装jdk

    1 下载jdk 在oracle官网中下载jdk https www oracle com https www oracle com 按照如下流程依次点击 下载自己喜欢的版本即可 2 安装jdk 3 配置环境变量 新建 gt 变量名 JAVA
  • Web存储

    目录 什么是 HTML5 Web 存储 方法 cookie webStorage 会话存储 sessionStorage 本地存储localStorage 什么是 HTML5 Web 存储 使用HTML5可以在本地存储用户的浏览数据 早些时
  • Node.js连接MySQL连接池解决自动断开问题

    1 为什么要使用连接池 自己将node 写的api接口 部署服务器时 发现运行一段时间后 会查询不到数据库里的内容 通过自己百度发现到了自己没有关闭数据库 默认数据库可以保持连接一段时间 之后 就会断开连接 2 连接池如何使用 const
  • UA分享

    之前自架短地址服务搜集到的UA 感觉很乱没法分析 看看大佬们有没有兴趣 Mozilla 5 0 Linux U Android 4 4 2 zh cn GT I9500 Build KOT49H AppleWebKit 537 36 KHT
  • Opencl入门Demo

    最近负责的几个项目需要使用opencl进行编程 进行了学习 并将学习后编写的主要Demo代码记录下来 供大家初步入门使用 opencl的介绍 原理等这里就不说了 百度一下有很多 直接切入主题 这个demo实现两个数组的相加操作 1 进行平台
  • 初探BlockChain——哈希和电子签名

    昨天在B站学习到北京大学肖臻老师的 区块链技术与应用 的公开课 感到豁然开朗 BlockChain涉及到密码学的两个方面 哈希和电子签名 1 哈希 有计算机基础的童鞋都比较清楚其机制 这里再简单说一下其基本原理 哈希的意思就是引入随机数量的