本文内容来自:《区块链技术指南》部分,特此说明。

hash 算法

定义

hash (哈希或散列)算法是信息技术领域非常基础也非常重要的技术。它能任意长度的二进制值(明文)映射为较短的固定长度的二进制值(hash 值),并且不同的明文很难映射为相同的 hash 值。

例如计算一段话“hello blockchain world, this is yeasy@github”的 md5 hash 值为 89242549883a2ef85dc81b90fb606046。

$ echo “hello blockchain world, this is yeasy@github”|md5
89242549883a2ef85dc81b90fb606046
这意味着我们只要对某文件进行 md5 hash 计算,得到结果为 89242549883a2ef85dc81b90fb606046,这就说明文件内容极大概率上就是 “hello blockchain world, this is yeasy@github”。可见,hash 的核心思想十分类似于基于内容的编址或命名。

注:md5 是一个经典的 hash 算法,其和 SHA-1 算法都已被 证明 安全性不足应用于商业场景。

一个优秀的 hash 算法,将能实现:

正向快速:给定明文和 hash 算法,在有限时间和有限资源内能计算出 hash 值。
逆向困难:给定(若干) hash 值,在有限时间内很难(基本不可能)逆推出明文。
输入敏感:原始输入信息修改一点信息,产生的 hash 值看起来应该都有很大不同。
冲突避免:很难找到两段内容不同的明文,使得它们的 hash 值一致(发生冲突)。
冲突避免有时候又被称为“抗碰撞性”。如果给定一个明文前提下,无法找到碰撞的另一个明文,称为“抗弱碰撞性”;如果无法找到任意两个明文,发生碰撞,则称算法具有“抗强碰撞性”。

流行的算法

目前流行的 hash 算法包括 MD5(已被证明不够安全)和 SHA-1,两者均以 MD4 为基础设计的。

MD4(RFC 1320)是 MIT 的 Ronald L. Rivest 在 1990 年设计的,MD 是 Message Digest 的缩写。其输出为 128 位。MD4 并不足够安全。

MD5(RFC 1321)是 Rivest 于1991年对 MD4 的改进版本。它对输入仍以 512 位分组,其输出是 128 位。MD5 比 MD4 复杂,并且计算速度要慢一点,但更安全一些。MD5 并不足够安全。

SHA1 (Secure Hash Algorithm)是由 NIST NSA 设计,它的输出为长度 160 位的 hash 值,因此抗穷举性更好。SHA-1 设计时基于和 MD4 相同原理,并且模仿了该算法。

为了提高安全性,NIST NSA 还设计出了 SHA-224、SHA-256、SHA-384,和 SHA-512 算法(统称为 SHA-2),跟 SHA-1 算法原理类似。

性能

一般的,hash 算法都是算力敏感型,意味着计算资源是瓶颈,主频越高的 CPU 进行 hash 的速度也越快。

也有一些 hash 算法不是算力敏感的,例如 scrypt,需要大量的内存资源,节点不能通过简单的增加更多 CPU 来获得 hash 性能的提升。
数字摘要

顾名思义,数字摘要是对数字内容进行 hash 运算,获取唯一的摘要值来指代原始数字内容。

数字摘要是解决确保内容没被篡改过的问题(利用 hash 函数的抗碰撞性特点)。

数字摘要是 hash 算法最重要的一个用途。

在网络上下载软件或文件时,往往同时会提供一个数字摘要值,用户下载下来原始文件可以自行进行计算,并同提供的摘要值进行比对,以确保内容没有被修改过。
加密算法

公钥私钥体系

现代加密算法的典型组件包括:加解密算法、公钥、私钥。

加密过程中,通过加密算法和公钥,对明文进行加密,获得密文。

解密过程中,通过解密算法和私钥,对密文进行解密,获得明文。

根据公钥和私钥是否相同,算法可以分为对称加密和非对称加密。两种模式适用于不同的需求,恰好形成互补,很多时候也可以组合使用,形成组合机制。

对称加密

顾名思义,公钥和私钥是相同的。

优点是加解密速度快,空间占用小,保密强度高。

缺点是参与多方都需要持有密钥,一旦有人泄露则安全性被破坏;另外如何其它分发密钥也是个问题。

代表算法包括 DES、3DES、AES、IDEA 等。

适用于大量数据的加解密,不能用于签名场景。

非对称加密

顾名思义,公钥和私钥是不同的。

公钥一般是公开的,人人可获取的,私钥一般是个人自己持有,不能被他人获取。

优点是公私钥分开,容易管理,并且容易完成密钥分发。

缺点是加解密速度慢。

代表算法包括:RSA、ElGamal、椭圆曲线系列算法。

一般适用于签名场景或密钥协商,不适于大量数据的加解密。

组合机制

即先用计算复杂度高的非对称加密协商一个临时的对称加密密钥(会话密钥),然后双方再通过对称加密对传递的大量数据进行加解密处理。

数字签名和数字证书

数字签名

类似在纸质合同上签名确认合同内容,数字签名用于证实某数字内容的完整性和来源。

A 发给 B 一个文件。A 先对文件进行摘要,然后用自己的私钥进行加密,将文件和加密串都发给 B。B 收到后文件和加密串,用 A 的公钥来解密加密串,得到原始的数字摘要,跟对文件进行摘要后的结果进行比对。如果一致,说明该文件确实是 A 发过来的,并且文件内容没有被修改过。

多重签名

n 个持有人中,收集到至少 m 个(

n≥m≥1

n\ge{}m\ge{}1)的签名,即认为合法,这种签名被称为多重签名。

其中,n 是提供的公钥个数,m 是需要匹配公钥的最少的签名个数,

群签名

环签名

环签名由 Rivest,shamir 和 Tauman 三位密码学家在 2001 年首次提出。环签名属于一种简化的群签名。

签名者首先选定一个临时的签名者集合,集合中包括签名者自身。然后签名者利用自己的私钥和签名集合中其他人的公钥就可以独立的产生签名,而无需他人的帮助。签名者集合中的其他成员可能并不知道自己被包含在其中。

数字证书

数字证书用来证明某个公钥是谁的。

对于数字签名应用来说,很重要的一点就是公钥的分发。一旦公钥被人替换,则整个安全体系将被破坏掉。

怎么确保一个公钥确实是某个人的原始公钥?

这就需要数字证书机制。

顾名思义,数字证书就是像一个证书一样,证明信息和合法性。由证书认证机构(Certification Authority,CA)来签发。

数字证书内容可能包括版本、序列号、签名算法类型、签发者信息、有效期、被签发人、签发的公开密钥、CA 数字签名、其它信息等等。

其中,最重要的包括 签发的公开密钥、CA 数字签名 两个信息。因此,只要通过这个证书就能证明某个公钥是合法的,因为带有 CA 的数字签名。

更进一步地,怎么证明 CA 的签名合法不合法呢?

类似的,CA 的数字签名合法不合法也是通过 CA 的证书来证明的。主流操作系统和浏览器里面会提前预置一些 CA 的证书(承认这些是合法的证书),然后所有基于他们认证的签名都会自然被认为合法。

后面章节将介绍的 PKI 体系提供了一套完整的证书管理的框架。

PKI 体系

PKI (Public Key Infrastructure)体系不代表某一种技术,而是综合多种密码学手段来实现安全可靠传递消息和身份确认的一个框架和规范。

一般情况下,包括如下组件:

CA(Certification Authority):负责证书的颁发和作废,接收来自 RA 的请求;
RA(Registration Authority):对用户身份进行验证,校验数据合法性,负责登记,审核过了就发给 CA;
证书数据库:存放证书,一般采用 LDAP 目录服务,标准格式采用 X.500 系列。
CA 是最核心的组件,主要完成对公钥的管理。从之前章节内容中,我们介绍过,密钥有两种类型:用于签名和用于加解密,对应称为 签名密钥对 和 加密密钥对。

用户基于 PKI 体系要申请一个证书,一般可以由 CA 来生成证书和私钥,也可以自己生成公钥和私钥,然后由 CA 来对公钥进行签发。

默克尔树(又叫哈希树)是一种二叉树,由一个根节点、一组中间节点和一组叶节点组成。最下面的叶节点包含存储数据或其哈希值,每个中间节点是它的两个孩子节点内容的哈希值,根节点也是由它的两个子节点内容的哈希值组成。

进一步的,默克尔树可以推广到多叉树的情形。

默克尔树的特点是,底层数据的任何变动,都会传递到其父亲节点,一直到树根。

默克尔树的典型应用场景包括:

快速比较大量数据:当两个默克尔树根相同时,则意味着所代表的数据必然相同。
快速定位修改:例如上例中,如果 D1 中数据被修改,会影响到 N1,N4 和 Root。因此,沿着 Root –> N4 –> N1,可以快速定位到发生改变的 D1;
零知识证明:例如如何证明某个数据(D0……D3)中包括给定内容 D0,很简单,构造一个默克尔树,公布 N0,N1,N4,Root,D0 拥有者可以很容易检测 D0 存在,但不知道其它内容。

同态加密

定义

同态加密(Homomorphic Encryption)是一种特殊的加密方法,允许对密文进行处理得到仍然是加密的结果,即对密文直接进行处理,跟对明文进行处理再加密,得到的结果相同。从代数的角度讲,即同态性。

如果定义一个运算符

\triangle{},对加密算法 E 和 解密算法 D,满足:

$$ E(X\triangle{}Y) = E(X)\triangle{} E(Y)

$$ 则意味着对于该运算满足同态性。

同态性在代数上包括:加法同态、乘法同态、减法同态和除法同态。同时满足加法同态和乘法同态,则意味着是 代数同态,即 全同态。同时满足四种同态性,则被称为 算数同态。

历史

同态加密的问题最早是由 Ron Rivest、Leonard Adleman 和 Michael L. Dertouzos 在 1978 年提出,但 第一个“全同态”的算法 到 2009 年才被克雷格·金特里(Craig Gentry)证明。

仅满足加法同态的算法包括 Paillier 和 Benaloh 算法;仅满足乘法同态的算法包括 RSA 和 ElGamal 算法。

同态加密在云时代的意义十分重大。目前,从安全角度讲,用户还不敢将敏感信息直接放到第三方云上进行处理。如果有了比较实用的同态加密技术,则大家就可以放心的使用各种云服务了。

遗憾的是,目前已知的同态加密技术需要消耗大量的计算时间,还远达不到实用的水平。

函数加密

与同态加密相关的一个问题是函数加密。

同态加密保护的是数据本身,而函数加密顾名思义保护的是处理函数本身,即让第三方看不到处理过程的前提下,对数据进行处理。

该问题已被证明是不存在对多个通用函数的任意多 key 的方案,目前仅能做到对某个特定函数的一个 key 的方案。

零知识证明(zero knowledge validation)

证明者在不向验证者提供任何有用的信息的前提下,使验证者相信某个论断是正确的。

例如,A 像 B 证明自己有一个物品,但 B 无法拿到这个物品,无法用 A 的证明去向别人证明自己也拥有这个物品。

(转)区块链:哈希、公钥、私钥、加密、数字签名、数字证书、默克尔树、零知识证明相关推荐

  1. 常用的数据结构_三分钟了解区块链常用数据结构「默克尔树」

    免责声明:本文旨在传递更多市场信息,不构成任何投资建议.文章仅代表作者观点,不代表火星财经官方立场. 小编:记得关注哦 来源:万向区块链 原文标题:三分钟了解区块链常用数据结构「默克尔树」 默克尔树是 ...

  2. 【区块链 | 默克尔树】使用默克尔(Merkle)树实现NFT白名单

    简介 在我们今天所知道和喜爱的区块链出现之前,默克尔树一直是密码学和计算机科学领域的一个方面.如今,我们开始慢慢看到它们在链上更频繁地被用于数据验证的目的.在这篇文章中,我将解释 Merkle Tre ...

  3. 区块链杂谈---默克尔树(Merkle Tree)解析

    相信了解区块链的人对默克尔树并不忙陌生,在区块链里被广泛的应用,下面我们来了解下它的算法. Merkle Tree概念 Merkle Tree,通常也被称作Hash Tree,顾名思义,就是存储has ...

  4. 区块链基础知识系列 第三课 区块链中的默克尔树

    "区块链是实现无中心分布式总账的一种技术.除了采用块.链结构的典型区块链以外,还有其他的方式实现分布式总账这个需求.总账技术的基本单元是'交易',整个账本是由一条条的交易构成.'块'类似于账 ...

  5. 默克尔树在区块链中的应用

    1 MT(Merkle tree) 默克尔树是一种哈希二叉树,1979年由Ralph Merkle发明.与标准二叉树一样,由一组叶节点,一组中间节点和一个根节点构成.叶节点包含存储数据或其哈希值,中间 ...

  6. 区块链 — 默克尔树

    文章目录 默克尔树 生成过程 应用场景 在区块链中的应用 默克尔树 默克尔树(又叫哈希树)是一种典型的二叉树结构,有一个根节点.一组中间节点和一组叶节点组成.默克尔树最早由 Merkle Ralf 在 ...

  7. 区块链学习1:Merkle树(默克尔树)和Merkle根

    ☞ ░ 前往老猿Python博文目录 ░ 一.简介 默克尔树(Merkle tree,MT)又翻译为梅克尔树,是一种哈希二叉树,树的根就是Merkle根. 关于Merkle树老猿推荐大家阅读<M ...

  8. 区块链--默克尔树(Merkle Tree)

    Merkle Tree 默克尔树是一种二叉树,由一个根节点.一组中间节点和一些叶子节点组成.形状如下: D0.D1.D2和D3是叶子节点包含的数据,也就是叶子节点的value.继续往上看,N0.N1. ...

  9. 北京大学肖臻老师《区块链技术与应用》公开课笔记13——BTC匿名性篇2(零知识证明)

    北京大学肖臻老师<区块链技术与应用>公开课笔记 比特币回顾问答篇,对应肖老师视频:click here 全系列笔记请见:click here About Me:点击进入我的Personal ...

  10. 图文详解哈希树-Merkle Tree(默克尔树)算法解析

    2019独角兽企业重金招聘Python工程师标准>>> Merkle Tree概念   Merkle Tree,通常也被称作Hash Tree,顾名思义,就是存储hash值的一棵树. ...

最新文章

  1. LeetCode实战:Nim 游戏
  2. HDU-3038-How Many Answers Are Wrong
  3. 理解吞吐量和停顿时间
  4. UVA 10004 - Bicoloring
  5. caffe下matlab、python的配置和faster RCNN的运行
  6. axios安装_一起学Vue:访问API(axios)
  7. 基于 CoreAudio 的音频编解码(一):音频解码
  8. 华为手机文档里的html,如何在华为手机上编辑word文档
  9. Hybird Astar算法原理
  10. 3dmax贴图材料丢失如何恢复
  11. formidable词根词缀_SAT词根词缀汇总内容(6)
  12. 计算平均指令时间_上海原油期货将推出TAS指令
  13. 计算机网络实验(三个部分--验证性、Wireshark、CPT)
  14. 《 Visual c++2013入门经典》(Ivor Horton,7th)2.15练习编程验证
  15. Checkbox选中变化时回调函数
  16. 商城系统搭建支付通道
  17. UnionPay-银联支付-netcore(二)
  18. 刷脸支付广泛应用于无人领域
  19. C/C++经典例题:鸡兔同笼
  20. 美股日志|三大股票指数升金价重上1800

热门文章

  1. 日期操作类--Date类
  2. 论文阅读笔记——个体识别研究中的计算机辅助照片匹配:以塞伦盖蒂猎豹为例
  3. ImportError: No module named MySQLdb
  4. Linux下exec函数族比如execve等函数的基本使用
  5. 《JavaScript权威指南》学习笔记 第三天 找个对象
  6. Intersecting Lines - POJ 1269(判断平面上两条直线的关系)
  7. 游戏对战平台--吃货大作战
  8. 一些简单的道理和习惯
  9. js 在线压缩混淆工具
  10. 2020-12-28 learning opencv3: 十:Smoothing