详解区块链中的几个密码学概念

And_ZKT
And_ZKT 热门 2017-09-21 23:04
9 34686
密码学在信息技术领域的重要地位无需多言,如果没有现代密码学的研究成果,人类社会根本无法进入信息时代。本文将介绍密码学跟区块链相关的基础知识。

一、hash 算法
1.定义
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 算法,将能实现:
l 正向快速:给定明文和 hash 算法,在有限时间和有限资源内能计算出 hash 值。
l 逆向困难:给定(若干) hash 值,在有限时间内很难(基本不可能)逆推出明文。
l 输入敏感:原始输入信息修改一点信息,产生的 hash 值看起来应该都有很大不同。
l 冲突避免:很难找到两段内容不同的明文,使得它们的 hash 值一致(发生冲突)。

冲突避免有时候又被称为“抗碰撞性”。如果给定一个明文前提下,无法找到碰撞的另一个明文,称为“抗弱碰撞性”;如果无法找到任意两个明文,发生碰撞,则称算法具有“抗强碰撞性”。


二、加密算法

1.公钥私钥体系
现代加密算法的典型组件包括:加解密算法、公钥、私钥。
加密过程中,通过加密算法和公钥,对明文进行加密,获得密文。
解密过程中,通过解密算法和私钥,对密文进行解密,获得明文。
根据公钥和私钥是否相同,算法可以分为对称加密和非对称加密。两种模式适用于不同的需求,恰好形成互补,很多时候也可以组合使用,形成组合机制。

2.对称加密
顾名思义,公钥和私钥是相同的。
优点是加解密速度快,空间占用小,保密强度高。
缺点是参与多方都需要持有密钥,一旦有人泄露则安全性被破坏;另外如何其它分发密钥也是个问题。
适用于大量数据的加解密,不能用于签名场景。

3.非对称加密
顾名思义,公钥和私钥是不同的。
公钥一般是公开的,人人可获取的,私钥一般是个人自己持有,不能被他人获取。
优点是公私钥分开,容易管理,并且容易完成密钥分发。
缺点是加解密速度慢。
一般适用于签名场景或密钥协商,不适于大量数据的加解密。

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



三、数字签名

类似在纸质合同上签名确认合同内容,数字签名用于证实某数字内容的完整性和来源。A 发给 B 一个文件。A 先对文件进行摘要,然后用自己的私钥进行加密,将文件和加密串都发给 B。B 收到后文件和加密串,用 A 的公钥来解密加密串,得到原始的数字摘要,跟对文件进行摘要后的结果进行比对。如果一致,说明该文件确实是 A 发过来的,并且文件内容没有被修改过。
数字签名包括:多重签名、群签名、环签名等。

四、数字证书

数字证书用来证明某个公钥是谁的。对于数字签名应用来说,很重要的一点就是公钥的分发。一旦公钥被人替换,则整个安全体系将被破坏掉。
怎么确保一个公钥确实是某个人的原始公钥?这就需要数字证书机制。顾名思义,数字证书就是像一个证书一样,证明信息和合法性。由证书认证机构(Certification Authority,CA)来签发。
数字证书内容可能包括版本、序列号、签名算法类型、签发者信息、有效期、被签发人、签发的公开密钥、CA 数字签名、其它信息等等。其中,最重要的包括 签发的公开密钥、CA 数字签名 两个信息。因此,只要通过这个证书就能证明某个公钥是合法的,因为带有 CA 的数字签名。
更进一步地,怎么证明 CA 的签名合法不合法呢?类似的,CA 的数字签名合法不合法也是通过 CA 的证书来证明的。主流操作系统和浏览器里面会提前预置一些 CA 的证书(承认这些是合法的证书),然后所有基于他们认证的签名都会自然被认为合法。


五、Merkle 树                        

默克尔树(又叫哈希树)是一种二叉树,由一个根节点、一组中间节点和一组叶节点组成。最下面的叶节点包含存储数据或其哈希值,每个中间节点是它的两个子节点内容的哈希值,根节点也是由它的两个子节点内容的哈希值组成。
进一步的,默克尔树可以推广到多叉树的情形。
默克尔树的特点是,底层数据的任何变动,都会传递到其父亲节点,一直到树根。
默克尔树的典型应用场景包括:

l 快速比较大量数据:当两个默克尔树根相同时,则意味着所代表的数据必然相同。
l 快速定位修改:例如上例中,如果 D1 中数据被修改,会影响到 N1,N4 和 Root。因此,沿着 Root --> N4 --> N1,可以快速定位到发生改变的 D1;
l 零知识证明:例如如何证明某个数据(D0……D3)中包括给定内容 D0,很简单,构造一个默克尔树,公布 N0,N1,N4,Root,D0 拥有者可以很容易检测 D0 存在,但不知道其它内容。
9条回应 最新 最早
And_ZKT
沙发# And_ZKT 九级码农 2017-09-21 23:08
进一步的,默克尔树可以推广到多叉树的情形。
默克尔树的特点是,底层数据的任何变动,都会传递到其父亲节点,一直到树根。
默克尔树的典型应用场景包括:
快速比较大量数据:当两个默克尔树根相同时,则意味着所代表的数据必然相同。
快速定位修改:例如上例中,如果 D1 中数据被修改,会影响到 N1,N4 和 Root。因此,沿着 Root --> N4 --> N1,可以快速定位到发生改变的 D1;
零知识证明:例如如何证明某个数据(D0……D3)中包括给定内容 D0,很简单,构造一个默克尔树,公布 N0,N1,N4,Root,D0 拥有者可以很容易检测 D0 存在,但不知道其它内容。
双儿
板凳# 双儿 2017-09-22 18:28
这意味着我们只要对某文件进行
沫灬相见
地板# 沫灬相见 2017-09-26 06:03
啊树啊绿
4楼# 啊树啊绿 2017-11-04 23:46
每个中间节点是它的两个子节点内容的哈希值
李甜洁
5楼# 李甜洁 2017-11-06 03:49
只要通过这个证书就能证明某个公钥是合法的
海狸阿帅
6楼# 海狸阿帅 2017-11-09 19:35
底层数据的任何变动
何晨阳
7楼# 何晨阳 2017-11-11 14:37
现代加密算法的典型组件包括
玛拉顿
8楼# 玛拉顿 2017-12-07 09:13
快速比较大量数据
向妹儿
9楼# 向妹儿 2017-12-12 14:21
gaga哥
10楼# gaga哥 2017-12-13 14:00
不适于大量数据的加解密
游客
登录后才可以回帖,登录 或者 注册