零基础玩转区块链
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

◇区块链的加密技术

1.哈希函数

哈希函数不是指某种特定的函数,而是一类函数,有多种实现方式。

(1)定义。百度百科给出的定义是:“Hash,一般翻译作‘散列’,也有直接音译为‘哈希’的,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值。”

维基百科则直接将哈希函数的词条定义到散列函数中:“散列函数(Hash Function)又称散列算法、哈希函数,是一种从任何一种数据中创建小的数字‘指纹’的方法。该函数将数据打乱混合,重新创建一个叫作散列值的指纹。散列值通常由一个较短的随机字母和数字组成的字符串来代表。”

百度百科与维基百科都提到了一个概念:哈希函数(散列函数)能够将任意长度的输入值转变成固定长度的输出值,该值称为散列值,输出值通常为字母与数字的组合。

(2)性质。所有的散列函数都有这样一个基本特性:如果两个散列值是不相同的(根据同一函数),那么这两个散列值的原始输入也是不相同的。该特性是散列函数具有确定性的结果。但是,散列函数的输入和输出不是一一对应的,如果两个散列值相同,两个输入值很可能也是相同的,但不能肯定二者一定相同。输入一些数据,计算出散列值,然后部分改变输入值,一个具有强混淆特性的散列函数就会产生完全不同的散列值。

典型的散列函数都有无限定义域,比如,任意长度的字节字符串和有限的值域;固定长度的比特串。在某些情况下,散列函数可以设计成具有相同大小的定义域和值域间的一一对应。

(3)常用的Hash函数包括如下几种:

①数字分析法。对一组数据进行分析,比如,一组员工的出生年月日,如果出生年月日的前几位数字大体相同,出现冲突的概率就会很大;如果年月日的后几位表示月份和具体日期的数字差别很大,用后面的数字来构成散列地址,冲突的概率就会明显降低。因此,所谓数字分析法就是找出数字规律,尽可能地利用这些数据来构造冲突概率较低的散列地址。

②直接寻址法。取关键字或关键字的某个线性函数值为散列地址,即H(key)=key或H(key)=a·key+b,其中a和b为常数。这种散列函数,叫自身函数。

③折叠法。首先,将关键字分割成位数相同的几部分,最后一部分位数可以不同;然后,取几部分的叠加和(去除进位)作为散列地址。

④随机数法。选择一个随机函数,取关键字作为随机函数的种子,生成随机值,作为散列地址。通常,用于关键字长度不同的场合。

⑤平方取中法。简而言之,就是取关键字平方后的中间几位作为散列地址。

2.非对称加密

(1)该法是一种密钥的保密方法。非对称加密算法需要两个密钥:公钥和私钥。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将公钥公开,向甲方发送信息的其他角色(乙方)使用该密钥(甲方的公钥)对机密信息进行加密,再发送给甲方;甲方用自己私钥对加密后的信息进行解密。甲方想要回复乙方时,过程正好相反。

非对称加密,算法强度复杂,安全性依赖于算法与密钥。可是,由于算法复杂,使得加密、解密速度比对称加密、解密速度慢一些。

与对称加密算法相比,非对称加密的安全性更好,对称加密的通信双方使用相同的密钥,如果一方的密钥遭泄露,那么整个通信就会被破解。而非对称加密使用一对密钥,一个用来加密,一个用来解密,且公钥是公开的,密钥是自己保存的,不需要像对称加密那样在通信之前要先同步密钥。

(2)非对称加密工作原理。下面是非对称加密的工作原理:

①在传输过程中,即使攻击者截获了传输密文,并得到了乙方的公钥,也无法破解密文,因为只有乙方的私钥才能解密密文。同样,如果乙方要回复加密信息给甲方,就需要甲方先给乙方公布甲方的公钥用于加密,甲方自己保存自己的私钥用于解密。

②乙方用自己保存的另一把专用密钥(私钥)对加密后的信息进行解密。乙方只能用其专用密钥(私钥)解密由对应的公钥加密后的信息。

③甲方得到该公钥,使用该密钥对机密信息进行加密,再发送给乙方。

④乙方生成一对密钥(公钥和私钥),将公钥向其他方公开。

(3)非对称加密方法。公钥私钥的使用原则如下:

①用其中一个密钥能解密数据,则该数据必然是对应的那个密钥进行的加密。

②在密钥对中,能让大家都知道的是公钥;不告诉大家、只有自己知道的,是私钥。

③用一个密钥加密数据,只有对应的密钥才可以解密。

④每一个公钥对应一个私钥。