区块链:哈希、公钥、私钥、加密、数字签名、数字证书、默克尔树、零知识证明

转载;https://blog.csdn.net/wowotuo/article/details/78483889

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

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 个(

nm1n≥m≥1
,对加密算法 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 的证明去向别人证明自己也拥有这个物品。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值