揭秘区块链的核心技术之「哈希与加密算法 」

2023-11-17

大家都知道,区块链的关键技术组成主要为:P2P网络协议、共识机制、密码学技术、账户与存储模型。而这些技术中,又以 密码学与共识机制 这两点为最核心。那么今天我们来详细的聊一聊密码学,看一看密码学技术是如何在区块链中应用的。

首先,我们需知道区块链中用到的密码学算法有哪些?其实就两大类:

  • 哈希算法
  • 非对称加密算法
一、区块链中的哈希算法

哈希算法是区块链中用的最多的一种算法,它被广泛的使用在构建区块和确认交易的完整性上。

它是一类数学函数算法,又被称为散列算法,需具备三个基本特性:

  1. 其输入可为任意大小的字符串
  2. 它产生固定大小的输出
  3. 它能进行有效计算,也就是能在合理的时间内就能算出输出值

如果要求哈希算法达到密码学安全的话,我们还要求它具备以下三个附加特性:

  1. 碰撞阻力: 
    是指对于两个不同的输入,必须产生两个不同的输出。如果对于两个不同的输入产生了相同的输出,那么就说明不具备碰撞阻力,或是弱碰撞阻力。
  2. 隐秘性: 
    也被称为不可逆性,是指 y = HASH(x)中,通过输入值x,可以计算出输出值y,但是无法通过y值去反推计算出x值。为了保证不可逆,就得让x的取值来自一个非常广泛的集合,使之很难通过计算反推出x值。
  3. 谜题友好: 
    这个特性可以理解为,谜题是公平友好的,例如算法中 y = HASH(x),如果已知y值,想去得到x值,那就必须暴力枚举,不断的尝试才能做到,并且没有比这更好的办法,没有捷径。

哈希算法有很多,比特币主要使用的哈希算法是 SHA-256 算法。

除此之外,还有其他一些哈希算法也很流行,例如 MD5、SHA-1、SHA-2(SHA-224、SHA-256、SHA-384、SHA-512)、SHA-3 等,其中 MD5、SHA-1 已被证明了不具备 强碰撞阻力,安全性不够高,因此市场上不再推荐使用。

我们以比特币为例,来看一下哈希算法的具体应用: 
在比特币中,使用哈希算法把交易生成数据摘要,当前区块里面包含上一个区块的哈希值,后面一个区块又包含当前区块的哈希值,就这样一个接一个的连接起来,形成一个哈希指针链表,如下图:

上面只是示意图,那么在实际比特币系统中,每个区块包含哪些内容呢:

重点关注一下上图中的:

  • Prev Block:记录签一个区块的hash地址,32字节
  • Merkle Root:是一个记录当前块内的所有交易信息的数据摘要hash值,32字节
  • Nonce:一个随机值,需要通过这个随机值去找到满足某个条件的hash值(挖矿),4字节

上面只是解释了几个重点的字段,其它字段通过字面应该容易理解就不一一解释了。 
这所有的字段一起就组成了 block header(区块头),然后需要对 block header 进行2次hash计算,计算完成的值就是当前比特币区块的hash值。因为比特币系统要求计算出来的这个hash值满足一定的条件(小于某个数值),因此需要我们不断的遍历Nonce值去计算新的hash值以满足要求,只有找到了满足要求的hash值,那么这就是一个合法区块了(这一系列动作也叫作挖矿)

示例:
SHA -256(SHA-256 (Block Header)

我们再看一下上面的另一个重要字段: Merkle tree 字段。 
Merkle tree 被称为 默克尔树,它也是哈希算法的一个重要应用。 
它其实是一个用哈希指针建立的二叉树或多叉树。

Merkle tree 如图:

其树的顶端叫做 默克尔根(Merkle Root),Merkle Root 也是一个hash值,它是怎么计算出来的呢?

比特币中对每一笔交易做一个hash计算,然后把每2个交易的hash再进行合并做hash,如图中的 交易A的hash值是 H(A),交易B的hash值是H(B),再对这2个交易合并hash后就是H(hA|hb),就这样一直往上合并计算,算到最后的根部就是 Merkle Root 了。

在比特币和以太坊中都是使用的默克尔树结构,但是以太坊为了实现更多复杂的功能,所以有三个默克尔树。

至此,区块链中的哈希算法应用就介绍完了,接下来我们看一下非对称加密算法。

二、区块链中的非对称加密算法

区块链中有一个很关键的点就是账户问题,但比特币中是没有账户概念的,那大家是怎么进行转账交易的呢?

这里就得先介绍区块链中的非对称加密技术了。

非对称加密技术有很多种,如:RSA、ECC、ECDSA 等,比特币中是使用的 ECDSA 算法。 
ECDSA 是美国政府的标准,是利用了椭圆曲线的升级版,这个算法经过了数年的细致密码分析,被广泛认为是安全可靠的。

所谓非对称加密是指我们在对数据进行加密和解密的时候,需使用2个不同的密钥。比如,我们可以用A密钥将数据进行加密,然后用B密钥来解密,相反,也可以用B来加密,然后使用A来解密。那么如果我想给某个人传递信息,那我可以先用A加密后,将密文传给她,她拿到密文之后,用手上的B密钥去解开。这2个密钥,一个被成为公钥、一个是私钥。

在比特币中,每个用户都有一对密钥(公钥和私钥),比特币系统中是使用用户的公钥作为交易账户的。 
我们先看下图:

在图中可以看到,在第一笔交易记录中,是 用户U0 来发起的交易,要将代币支付给 用户U1,是怎么实现的呢?

  1. 首先 用户U0 写好交易信息:data(明文,例如:用户U0转账100元给用户U1)
  2. 用户U0 使用哈希算法将交易信息进行计算,得出 H = hash(data),然后再使用自己的私钥对 H 进行签名,即 S(H),这一步其实是为了防止交易信息被篡改用的
  3. 然后基于区块链网络,将 签名S(H) 和 交易信息data 传递给 用户U1
  4. 用户U1 使用 用户U0 的公钥 来对 S(H) 解密,就得到了交易信息的哈希值 H
  5. 同时,用户U1 还使用哈希算法对 交易信息data 进行计算,得出 H2 = hash(data)
  6. 对比上面2个哈希值,如果 H1==H2,则交易合法。说明 用户U0 在发起交易的时候确实拥有真实的私钥,有权发起自己账户的交易
  7. 网络中每一个节点都可以参与上述的验证步骤。

这个示例,就是比特币中一次交易的签名流程,即将 哈希算法与非对称算法结合在一起用于了比特币交易的数字签名。 
除此之外,比特币中,公私钥的生成、比特币地址的生成也是由非对称加密算法来保证的。

以上,就是区块链体系中,核心技术之哈希算法与加密算法的应用情况,欢迎一起交流。

本文原创发布于微信公众号「 不止思考 」,欢迎关注,交流 互联网认知、工作管理、大数据、Web、区块链技术。

转载于:https://www.cnblogs.com/jsjwk/p/9476175.html

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

揭秘区块链的核心技术之「哈希与加密算法 」 的相关文章

随机推荐

  • 海凌科7621开发板适配新版openwrt

    最近在海凌科买了一块7621的开发板 flash是32M的 ddram是256M的 性价比感觉不错 海凌科提供的openwrt是比较旧的版本 在openwrt最新的19 07版本里已有的硬件都有一定的差距 因此修改一下相关配置 可以用ope
  • PHP如何使用循环语句?用法详细指南

    像任何其他语言一样 PHP中的循环用于多次执行一条语句或一段语句 直到满足特定条件为止 这有助于用户节省多次编写同一代码的时间和精力 PHP支持四种类型的循环技术 for循环 while循环 循环执行 foreach循环 现在让我们详细了解
  • 包装类自动装箱和拆箱原理

    包装类的自动装箱和自动拆箱 包装类的自动装箱和拆箱是JDK1 5的新特性 一 首先 了解自动装箱的过程 有两种自动装箱过程 第一种 128 127 之内 调用相应包装类的valueOf 例如 Integer i 12 Integer a 2
  • L2-016 愿天下有情人都是失散多年的兄妹 (25 分)

    题目 题目链接 题解 DFS 孩子向父母方向连边 将孩子视为根节点 首先判断输入两个人的性别 如果不同再分别以二者为起点进行dfs 前者五服之内的亲属都标记一下 以后者为起点dfs 如果遇到了标记的人 那么说明五服之内存在公共祖先 不可以结
  • extern C 在c/c++中的使用

    http blog csdn net jscese article details 37821961 1 问题定义 在研究操作系统源代码或者在嵌入式系统中编写程序时 经常会发现下面这种用法 cpp view plain copy print
  • 引入UnityEngine.dll中的巨坑

    正确路径 C Program Files Unity Editor Data Managed 此目录下只需引用UnityEngine dll就可以访问MonoBehaviour 其他路径 C Program Files Unity Edit
  • compose配置文件参数详解

    本文介绍compose配置文件参数的使用 熟练编写compose文件 root docker lnmp cat lnmp yaml version 3 services nginx build root docker demo nginx
  • js之forEach怎么跳出循环

    第一种 跳出此次循环 1 2 3 4 5 6 forEach e gt if e 2 return false console log e 第二种 中断循环 1 2 3 4 5 6 forEach e gt if e 2 throw 抛出异
  • Elasticsearch入门

    下载地址 Download Elasticsearch Elastic 浏览器查看启动情况 出现一下内容说明服务已启动 如果启动成功无法访问 打开如图文件 将xpack security enabled 和xpack security ht
  • 详解mybatis的配置setMapperLocations多个路径两种方法

    文章目录 一 配置文件方式 二 Javabean配置 前言 我们在平常工作中用到mybatis去加载Mapper xml文件 可能mapper文件放的路径不一样 由此我们需要配置多个路径 幸运的是Mybatis支持我们配置多个不同路径 现在
  • Systick_Handler B.卡死处理方法

    Systick Handler B 卡死处理方法 注 鄙人在学习国产GD32芯片和STM32芯片做嵌入式时候出现过单片机卡死在 s启动文件Systick Handler B 处 现做系列总结 文章目录 1 中断开启未处理 2 引入C C 代
  • CentOS7.5离线安装jdk1.8

    目录 前言 一 环境准备 1 1 CentOS的安装 1 2 安装前检查是否有残余JDK 二 安装配置JDK 2 1 安装 2 2 修改配置文件 2 3 修改文件夹名称和脚本对应上 正常不需要操作 该步骤是方便以后部署使用脚本 前言 由于每
  • k8s笔记25--k8s 跨主机网络flannel

    k8s笔记25 k8s 跨主机网络flannel 简介 不同机器上网络设备区别 flannel 网络常见三大后端模式 UDP VXLAN host gw 如何查看集群用哪种网络模式 阿里云flannel容器网络 alloc 参考文档 简介
  • 解决IDEA中:Error running Tomcat8: Address localhost:1099 is already in use

    今天在运行Web项目的时候 突然运行不起来 最后报Error running Tomcat8 Address localhost 1099 is already in use 从而致web项目无法运行 看了一下原来是1099端口被占用 解决
  • PyTorch3D 安装记录

    1 PyTorch 安装 PyTorch 官网 PyTorch 官网 最新版本的 PyTorch 最新版本的 PyTorch 以 cuda 11 3 Python 3 9 Pytorch 1 12 1 为例 conda 安装 conda i
  • 端口重复处理

    不废话上代码之 端口重复处理 Description Web server failed to start Port 8080 was already in use Action Identify and stop the process
  • fragment嵌套viewpager嵌套fragment第二次加载数据不显示问题

    这几天做项目遇到一个问题 就是有这么一个页面是activity嵌套一个fragment1然后fragment1里放了一个viewpager viewpager里放了几个fragment 本来只有这么一个页面 显示出来也没什么问题 现在加新需
  • [架构之路-207]- 人人都是产品经理 - 常见的需求分析技术:实用的需求分析与建模详解过程(实操性强)

    目录 1 1 需求分析建模的要点与误区 1 1 1 需求分析到底做什么 1 1 1 1 分解的方法 1 1 1 2 提炼 合并 重组 1 1 1 3 消除矛盾 1 1 2 建模的目标和要点 1 1 2 1 建模的目的 1 1 2 2 建模的
  • 请问肾阴虚吃什么药?饮食注意什么?还有桂附地黄丸是治肾阴虚还是治肾阳虚的?谢谢

    如果确属肾阴虚当用 六味地黄丸 但肾阴虚那么多的特征里 最为明显的就是 夜间盗汗 如果不能确定 还是改用 桂附地黄丸 在 六味 的基础上加了 肉桂 与 附子 两味温药 作用就是在滋阴的基础上 温补肾阳 适宜平补 即 阴阳双补 最适宜服用的季
  • 揭秘区块链的核心技术之「哈希与加密算法 」

    大家都知道 区块链的关键技术组成主要为 P2P网络协议 共识机制 密码学技术 账户与存储模型 而这些技术中 又以 密码学与共识机制 这两点为最核心 那么今天我们来详细的聊一聊密码学 看一看密码学技术是如何在区块链中应用的 首先 我们需知道区