区块链中应用到的密码学主要包括以下几方面:

数字摘要

区块链本质上是一种分布式数据存储方式,每一个数据区块之间靠数字摘要建立起联系,比如比特币中每一个区块都包含了它前一个区块的摘要值。因此数字摘要是区块链中应用最广泛的密码学技术,也是区块链的核心技术之一。

区块链中常用的数字摘要算法是SHA-256和RIPEMD160,其中SHA256是构造区块链所用的主要摘要算法。比如在比特币中,SHA256主要用于完成PoW(工作量证明)计算,也就是挖矿;在HyperLedger-Fabric区块链平台中,主要用于检测数据未经授权的修改,签名者的身份识别和抗抵赖。区块链中每一区块除了自身的数据外,还包含了前一区块数据的数字摘要值,并通过指针指向前一区块,这样的列表结构建立起了了整个链条。

如果攻击者篡改了某一区块(比如第K块)的值,那K+1块的保存的H(K)就和K摘要计算的值不一致,攻击者为了掩盖篡改,可以修改K+1块中的H(K)的值,但这样K+2块的H(K+1)与K+1块摘要计算结果又不一致,攻击者不得不继续修改H(K+1)值……以此类推,攻击者理论上要修改从K+1块开始的区块链上所有的节点数据才能不被发现,这在实践上根本不可行,而且某些特殊节点数据是无法被修改的。这就是区块链保证数据防篡改的原理。

Merkle树

默克尔树,它是基于数字摘要的二叉树或多叉树。Merkle树最底层节点包括了区块数据和它的数字摘要值,其它层的节点则包含了下层两个子节点数据合并后的摘要值。其结构示例如下。

Merkle树的特点是底层节点的数据变化可以一层层传递到最上层节点;反过来讲,通过最上层节点就可以监测底层节点数据的变化情况。利用这个特点,区块链中使用Merkle树可以实现数据快速比较、节点快速定位,而不需要下载整个链上数据。比特币中的简单支付验证(SPV)就是基于Merkle树的一个典型应用。

数字签名

区块链使用数字签名来确认交易者的身份。比如在加密货币交易中,交易的发起方将交易信息进行数字签名,并将签名结果提交给矿工,矿工使用签名用户的公钥验证签名,验证通过,则交易信息记账,完成交易。区块链中使用的数字签名算法都是基于ECC的,如比特币中使用的是基于secp256k1椭圆曲线密码算法。

对称加密

区块链中也有涉及到使用对称加密的应用场景。如比特币官方客户端使用AES(对称分组密码算法)加密钱包文件,确保客户端私钥的安全。

HMAC

HMAC是Hash-based Message Authentication Code的简称,翻译成中文是基于Hash的消息认证码。它的前身就是MAC(消息认证码)。其实HMAC运算和数字签名有些类似,数字签名是使用私钥对数字摘要进行非对称加密,而HMAC则使用协商密钥对数字摘要进行对称加密(知道这一点,HMAC的过程就不用再描述了)。因此可以把HMAC看作数字摘要的加强版,目的还是保护数据的完整性。前面讲过,数字摘要在区块链中有着极其重要的作用,因此有必要为摘要再加层密,不让它“裸奔”,使其更可靠。

同态加密

同态加密其实并不是新技术,区块链之前就有它了。同态加密的意思就是让加密后的数据继续保持加密前明文数据的运算特性和功能。举个简单的例子,对于下面的算式:

1+2=3

假设我们对1和2分别加密后得到两个密文(十六进制表示):

1-------->0x8CBD41

2-------->0x1EF9B7

然后把两个加密结果相加得到和:

0x8CBD41+0x1EF9B7=0xABB6F8

现在解密这个和,按照之前的加密方法,我们是无论如何也不可能解密出3的。但如果是同态加密,1和2加密结果的和,解密后也应该是3,即数据虽然加密了,但它的运算特性仍然保持着,这也就是所谓的“同态”。可以用如下公式表示,E表示同态加密算法,F表示数据运算, a,b,c为参与运算的明文数据:

F(E(a),E(b),E©)=E(F(a,b,c))

在区块链去中心化的结构中,很多重要敏感数据可能要在第三方的节点进行运算处理,因此需要将数据在加密状态下进行处理。这就是同态加密在区块链中的作用。

上面就简单介绍了区块链运用到的几项主要密码学技术,部分内容来自网络。区块链中的密码学实际应用过程远比文章描述复杂。如果大家感兴趣,可以参考专业的文章书籍。

区块链中的密码学应用相关推荐

  1. 区块链中的密码学(五)-零知识证明简述

    本篇是这个系列的最后一篇,尽管在区块链中还有很多的密码学应用,将来会必然会更多,然而笔者认为,就今天我们有限的学习时间来讲的话,任何人都应该对信息的获取做减法.思来想去,选择了"零知识证明& ...

  2. 区块链中的密码学系列之SHA256算法(三)

    1. 前言 SHA系列算法是一种密码散列函数,由美国国家安全局设计,并由美国国家标准技术研究所(NIST)发布为联邦数据处理标准(FIPS).现在已经被破解. 我们本文主要研究SHA256算法. 2. ...

  3. 区块链中的密码学,使用ABE结合区块链

    ABE 密码学,以及与区块链结合的价值 背景 区块链技术具备篡改难度高.使用成本低.分布式的优点,本应成为各行各业的重要助力.但是由于链上参与方担心自己的核心数据外泄,不愿将自己的核心数据上链,这个原 ...

  4. 解密区块链中的密码学

    在这片文章中,我们总结了区块链会用到的一些密码学原语,那什么是密码学"原语"? 不同于操作系统的"原语"概念,(注:操作系统原语是操作系统或计算机网络用语范畴. ...

  5. 区块链中的密码学之数字签名方案(十二)

    1. 前言 类似在纸质合同上签名确认合同内容,数字签名用于证实某数字内容的完整性( integrity)和来源( 或不可抵赖,non-repudiation). 一个典型的场景是,A 要发给 B 一个 ...

  6. 区块链中密码学与安全技术

    区块链的定义 区块链的定义,应当是:区块链是一种按照时间顺序将数据进行分布式存储的块链式数据结构,它利用共识机制进行数据验证,利用密码学进行数据保护和用户安全访问,利用智能合约来操作数据,从而成为不可 ...

  7. 密码学简史(二)--- 区块链中的现代密码学

    文章目录 5. 对称钥匙:DES加密法 6. 非对称钥匙:RSA加密法 6.1 不可逆模运算 --- DH密钥交换 6.2 RSA加密法 6.3 数字签名 6.4 比特币中的密码学 6.5 区块链中的 ...

  8. 区块连中的密码学--SHA256实现机制

    区块连中的密码学–SHA256实现机制 摘要 本文主要介绍区块链中所使用的密码学知识,同时因为Hash函数是区块链中重要的一环,因此也使用python3对SHA256进行了实现. 一.什么是区块链 关 ...

  9. 区块链中涉及到密码学的场景

    区块链中涉及到密码学的场景 共识算法(Consensus algorithm) 交易签名(Signing transaction) 第二层网络如何在第一层网络中验证(Layer2's verifica ...

最新文章

  1. 给定直角坐标上的两条线,确定这两条线会不会相交
  2. 阿里分布式服务框架Dubbo的架构总结
  3. 创建SM30表维护时权限组NC是什么用途?
  4. 写csv文件_机器学习Python实践——数据导入(CSV)
  5. java怎么兼容switch_java – Switch语句给出了不兼容类型错误
  6. cs106a编程方法学作业解答(3)
  7. jQuery css
  8. CRITIC法之python
  9. 批量更改数据库COLLATION
  10. Linux 网卡驱动学习(九)(层二转发)
  11. spring5源码-基于XML的依赖注入
  12. java6 3_那些年,一起学的Java 6-3
  13. OSITCP/IP参考模型
  14. .net实现调用本地exe等应用程序的办法总结
  15. php获取ip所有方式,php获取用户(客户端)真实IP地址的三种方法
  16. ArcGIS软件应用(一)——专题图制作
  17. 极速office(Word)怎么删除背景颜色
  18. JS表单验证Email地址
  19. Python2与Python3的区别(二):raw_input与input
  20. God.org单域环境攻略(三)

热门文章

  1. 蓝桥杯:C语言,十六进制转十进制
  2. ESP32 开发笔记(三)源码示例 24_XPT2046_Touch_Test 电阻触摸XPT2046驱动测试触摸校正
  3. 弱大数定理的意义与证明
  4. Laravel5.1框架关键技术解析(读书笔记)
  5. 一高校教师“大闹”图书馆,还要告男生“性骚扰”?校方回应
  6. 讲讲Cortex-M内核的MPU内存保护单元
  7. setpriority 用法
  8. FreeMarker模板使用方法讲解
  9. 10.1 LED灯实验(A7核和M4核)
  10. php rsa pss,RSA签名的PSS模式