区块链技术指南——密码学


第一节:Hash算法


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

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

注: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\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 来对公钥进行签发。


第五节:Merkle 树


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

你可能感兴趣的:(区块链技术指南——密码学)