【漫游区块链】密码学技术简介

简介

区块链使用的基本密码学技术包括哈希算法、对称加密、非对称加密和数字签名。

本文将简单介绍各密码学的基本原理,仅限于概念性的内容,具体的原理、推导均未涵盖。希望能够带领大家了解密码学的基础要点。
目录
简介
一、哈希算法
二、对称加密
三、非对称加密
四、数字签名
参考

一、哈希算法

基本概念

哈希(Hash)算法是通过一个哈希函数(H),把任意长度的输入映射为固定长度的输出的一种压缩算法,也称为“消息摘要”。
哈希常用于检验信息是否相同,身份验证,数字签名。我们可以通过哈希算法,将一个电脑文件的内容转换为一小段定长的代码,这样我们想要验证文件是否一致,只需要比对哈希值是否一致即可,而不需要比对所有的文件内容了。

哈希是一种单向密码体制。你可以把一段明文通过哈希算法转换为一段密文,但是无法将这段密文转换回原来的明文。一段密文可能存在多种明文相对应,无法逆向破解。

一个优秀的哈希算法,有以下几个特点

  • 正向快速: 给定一个明文,可以快速计算出哈希值。
  • 逆向困难: 给定多段密文,难以逆推出明文。
  • 输入敏感: 明文的微小变化会导致哈希值的较大变化。
  • 冲突避免: 很难找到两个明文会得到同样的哈希值。

原理

从概念可知一个哈希算法需要有两大要素:

  1. 用于映射的函数H
  2. 用于处理冲突的方法

哈希函数和哈希表

假设我们想要存储很多个元素,并且希望以后能够快速查找某个想要的元素的位置。怎么办呢?

最基本的思路,就是我们随便存储这些元素,然后在查找时从头到尾遍历查找即可。这样的方式简单,但是十分费时费力,我们想要有更快的速度,哪怕牺牲一点存储空间也可以接受。

而哈希函数和哈希表可以加快查找的速度。

哈希函数是一个映射关系H, 可以将元素和一个唯一的存储位置相对应。在存储一个元素k时,就把k存放在H(k)的位置上。查找时同理,只要将元素放进映射关系中运算,就可以查找到元素字的位置。

几种构造函数的方法:

  1. 直接定址法
  2. 数字分析法
  3. 平方取中法
  4. 折叠法
  5. 随机数法
  6. 除留余数法

通过哈希函数映射元素得到的表就是哈希表,又称散列表。之所以成为散列表,是因为在表中,数据不是紧密排列的。因为通过函数映射得到的值不一定是连续值。

冲突处理

但哈希函数可能引起的问题就是冲突。哈希函数一个特点就是随机,它尽量模拟随即平均分布的结果来为每个元素安排地址,但这样的结果可能造成冲突,也就是两个元素得到的地址相同(又称“同义词”)。所以,如何解决冲突,就是哈希算法中的一个重要的设计。

常用的冲突处理方法:

  1. 开放定址法
  2. 再哈希法
  3. 链地址法
  4. 公共溢出区

常用哈希算法

1. MD4:
 MD4(RFC 1320)是 MIT 的 Ronald L. Rivest 在 1990 年设计的,MD 是 Message Digest 的缩写。它适用在32位字长的处理器上用高速软件实现--它是基于 32 位操作数的位操作来实现的。

2. MD5
  MD5(RFC 1321)是 Rivest 于1991年对MD4的改进版本。它对输入仍以512位分组,其输出是4个32位字的级联,与 MD4 相同。MD5比MD4来得复杂,并且速度较之要慢一点,但更安全,在抗分析和抗差分方面表现更好

3. SHA-1
  SHA1是由NIST NSA设计为同DSA一起使用的,它对长度小于264的输入,产生长度为160bit的散列值,因此抗穷举(brute-force)性更好。SHA-1 设计时基于和MD4相同原理,并且模仿了该算法。

哈希算法在区块链中的应用

1. 工作量证明PoW

工作量证明实际就是常说的“挖矿”。矿工的目的就是不断进行哈希计算求解某个难度值的SHA256算法。这个难度值会根据加入全网的总计算力而不断改变,以保持大约10分钟生成一个比特币区块的速度。

挖矿就是重复计算区块头的哈希值,不断修改参数,直到找到与难度目标值匹配的随机数的过程,这有些类似深度学习里的调参。这些计算参数中能改变的只有梅克尔根(Merkle Root)、区块时间戳(Timestamp)和随机数(Nonce)。要通过像这样的参数来计算出符合条件的值,基本上也就只能靠暴力计算了。这种不断执行SHA256计算的过程很消耗算力,因此被形象地称为挖矿。在挖矿这个典型应用中实际上用到了哈希算法速度快和特征化这两个特点。
—— 玩转瑞士军刀——哈希算法在区块链中的应用

2. 从公钥生成比特币地址

生成比特币地址包括:随机数 --> 私钥 --> 公钥 --> 比特币地址
其中,从公钥到比特币地址的过程使用了哈希算法。


公钥到比特币地址

3. 形成区块链

区块链之所以为一个链,就是每个区块都包含了上一个区块的信息。每个人只要知道一个区块,就能容易找到上一个区块在哪里。在指示上一个区块链的时候,就运用了哈希值。

节点拿到前一个区块数据,使用哈希函数计算前一个区块哈希值,与存储哈希值进行校验,这样就可以检测前一个区块的信息完整性。这是应用了哈希值输入敏感的特点。如果上一个区块收到篡改,那么节点就会发现哈希值有很大的不同,因此便会拒绝这个错误的区块。这也让区块链上的内容无法受到篡改。

4. 生成梅克尔树

梅克尔树的存在是为了实现部分区块数据的哈希值验证,在得知区块被篡改的同时,还可以知道具体是哪一个交易的信息被篡改。


梅克尔树

梅克尔树的原理是,先对每个交易进行哈希计算,然后对哈希值再两两哈希计算,以此类推直到树的的顶部梅克尔根。
梅克尔根会被放在区块头里。当一个节点下载了区块数据之后,通过二叉树查询可以快速发现出现问题的数据块,将大块的数据切分为小块进行,提高计算效率。

二、对称加密

基本概念

对称加密中,发送方将明文和密钥一起经过加密处理之后发送给收信方,收信方需要使用加密的密钥和相同的算法进行逆运算才可以进行解密才可以恢复成明文。

对称加密

对称加密的原理非常简单,即使用同样的密钥加密和解密,这使得对称加密的效率高,速度快。就算信息被截获,如果不知道密钥也无法解密信息。但是其安全性也相对不高,因为一旦密钥泄露,则对称加密会失去作用。对称加密存在两大不足:

  1. 密钥传输问题:要保证在传输过程中密钥不会遭到泄露。
  2. 密钥管理问题:为了防止过去的密钥泄露造成将来数据的损失,以及对于不同的收信方需要提供不同的密钥,密钥的数量成几何指数上升。在将来,密钥管理的成本也会不断增加。

常用算法

有两种常用的对称加密算法:流加密和分组加密。流加密指将明文当做一个序列,利用加密算法对明文流和密钥流加密。分组加密将明文分为多个组,每次加密一组数据直至加密完成。

现在比较常用的是分组加密算法,包括DES, 3DES和AES等。

1. DES/3DES

DES是一种分组加密算法,全称Data Encryption Standard,即数据加密标准,由IBM公司研究并发表。典型的DES是将数据以64位进行分组后对每组数据加密。加密和解密用的是相同的算法。但现在较少使用,因为可以被暴力破解。

DES的算法非常简单,经过两次置换运算将明文置换为最终的密文。首先是密钥加密,从初始密钥中计算出16个子密钥;之后是明文加密,在16次加密的同时将16个子密钥嵌入其中,最终就能完成密文的运算。

3DES和DES使用类似的原理,不过是使用了3个密钥,增强了加密的强度。但是问题就是速度太慢。

2. AES

AES也是一种分组加密算法,全称Advanced Encryption Standard,高级加密标准。AES用于替代DES,是目前公认比较安全的加密方式。区块链中使用的对称加密技术也是AES。

AES分为三轮加密。在初始轮中,AES先加轮密钥,然后在普通轮中进行字节代替、行移位、列混淆和加轮密钥四步;在最终轮中,再进行字节代替,行移位和加轮密钥。相比DES而言AES使用了更加复杂的运算方法,在这里我们就不展开讨论。

有一个很可爱的AES小漫画《A Stick Figure Guide to the Advanced Encryption Standard(AES)》,请看这里

三、非对称加密

基本概念

非对称加密技术可以说是区块链中的核心加密技术,是区块链构造“共识机制”的重要一环。

非对称加密的核心在于有两个密钥——公钥(Public Key)和私钥(Private Key)。每一对公钥和私钥都是一一对应的。这个公钥加密的信息只有对应私钥可以解密,这个私钥也只能解密对应公钥所加密的信息,其他的就不可以。

《RSA加密原理:非对称加密鼻祖》这篇文章中有个形象的比喻:
我们用颜色为比喻进行说明,Bob是如何发给Alice一个特定的颜色,而不让监听者截获信息的。
每种颜色都具有互补色,同互补色叠加会得到白光,这能去掉第一种颜色的作用,这里我们假设,混合颜色是一个单向函数,混合颜色输出第三种颜色很容易,但反向过程就难了,Alice首先生成自己的私有密钥,也就是可以随便选择一个颜色,比如红色,下面,假设Alice有一种神秘的颜色机器,能够找到这种红色的互补色,没有其他人能够知道这个,这得到蓝绿色,他将这发给Bob作为公开密钥,假设Bob想发送一种神秘的黄色给Alice。


他将黄色同公开颜色混合然后得到的混合色发给Alice,此时,Alice能够将自己的私有色叠加到Bob的混合色,这将解除公开色的作用,剩下Bob的秘密颜色,而窃听者无法简单破译Bob的黄色,除非他有Alice的红色。

Alice需要有私钥“红色”,才能解开公钥“蓝绿色”,看到Bob真正发来的颜色。这种思想就是非对称加密的思想。

常用算法

RSA

当代密码学起源于1977年,Ron Rivest,Adi Shamir和Leonard Adleman发明了非对称式加密(又称公开密钥加密)算法RSA。
RSA的加密过程如下:



其中E和N的组合(E,N)就是公钥。
RSA解密过程如下:


其中D和N的组合(D,N)就是私钥。
密钥对(E, D, N)的计算涉及一下几个步骤:



可以说,乍一看RSA非常简单,但是其背后蕴含的数论原理,又让这个简单的算法难以被破解。

四、数字签名

数字签名其实不算是一个新的密码学技术,而是前面提及的哈希算法、对称加密和非对称加密的应用。

有人写了一篇文章《What is a Digital Signature?》来讲解什么是数字签名,我觉得已经足够有趣和通俗。想要看中文版的同学可以移步这里

参考

区块链技术指南
玩转瑞士军刀——哈希算法在区块链中的应用
数据加密算法--详解DES算法原理与实现
AES 加密算法的原理详解
带你彻底理解RSA算法原理

你可能感兴趣的:(【漫游区块链】密码学技术简介)