白话区块链技术 第2讲|非对称加密

Posted 币须说

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了白话区块链技术 第2讲|非对称加密相关的知识,希望对你有一定的参考价值。

欢迎来到《白话区块链技术》专栏第二讲。

具体的算法公式我们不多讲,我们这里只列出几种常用的算法,了解其中的基本原理。在学习初期,大家没必要知道算法的具体公式,但是一定要了解算法的基本原理,这样才能在区块开发中灵活运用。


一、对称加密

1.1.DES


数据加密算法(Data Encryption Standard)是一种对称加密算法,很可能是使用最广泛的密钥系统,特别是在保护金融数据的安全中,最初开发的DES是嵌入硬件中的。

输入:key(密钥)、data(加密数据 64位)、mode(加密方式 加密/解密)。

输出:des_data(加密后的数据)。

加密流程:对64位数据的各位进行重新排列组合,然后与密钥进行运算,循环迭代。

白话区块链技术 第2讲|非对称加密

加密步骤:

1> 初始转换:把输入的64位明文换一定的规则打乱次序,分成左右各32位。

2> 循环加密:用子密钥对明文进行16轮加密运算,每轮用的子密钥都是不同的,但是各子密钥是有关联的,因为这些子密钥都是从原始密钥通过一定规则推导出来的。

3> 逆置换:对第二步得到的结果进行逆置换,即把结果再换一定顺序排列,这里的排序规则正好与第一步的排序规则互逆,因此叫逆置换。

4> 输出密文。


1.2. AES


高级加密标准(Advanced Encryption Standard),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。

白话区块链技术 第2讲|非对称加密

AES为分组密码,分组密码也就是把明文分成一组一组的,每组长度相等,每次加密一组数据,直到加密完整个明文。在AES标准规范中,分组长度只能是128位,也就是说,每个分组为16个字节(每个字节8位)。密钥的长度可以使用128位、192位或256位。密钥的长度不同,推荐加密轮数也不同,如下表所示:

白话区块链技术 第2讲|非对称加密


二、非对称加密

2.1. ECC


Elliptic Curves Cryptography, 椭圆曲线加密。比特币等大多数区块链系统都使用ECC算法生成公钥与私钥,比特币选择的是secp256k1曲线。

ECC算法就是一个高度复杂的数学公式,并且其是一个单向计算过程。椭圆的通式为 y^2 = x^3 + a*x + b mod p,以及一个无穷大的数,当然最正宗的定义还有限定条件,该曲线是在有限域上的,并且a,b和q之间也存在关系。

ECC是建立在基于椭圆曲线的离散对数问题上的密码体制,给定椭圆曲线上的一个点P,一个整数k,求解Q=kP很容易;给定一个点P、Q,知道Q=kP,求整数k确是一个难题。

私钥,我们在上一节里已经讲过,是一串随机字符串,共256位,32个字节。公钥的生成就是用了ECC算法来得到。在这里Q就是我们的公钥,K就是私钥。

使用ECC算法能保证我们私钥到公钥的生成是单向的:根据私钥生成公钥容易,根据公钥生成私钥困难。


2.2. ECDH


elliptic curves Diffie-Hellman,是一种密钥协商算法,而不是加解密算法。还记得我们在上一节里说过的SSL协议中,在对称密码的协商阶段,我们使用的是非对称加密的方法,当时简单说明是用公钥加密。如果非对称加密采用的是ECC算法的话,那对称密码的协商,我们就不得不用到ECDH算法。

假设密钥交换双方为Alice、Bob,他们有共享曲线参数,即是通过同样的曲线来生成公、私钥。

1> Alice拥有公钥PA,私钥SA,Bob拥有公钥PB,私钥SB

2> Alice将自己的公钥PA传给Bob

3> Bob将自己的公钥PB传给Alice

4> Alice通过自己的私钥SA与Bob的公钥PB生生成一个密钥QA,QA=F(SA,PB)

5> Bob通过自己的私钥SB与Alice的公钥PA生生成一个密钥QB,QB=F(SB,PA)

根据算法,我们可以看到这样的结果:QA == QB

这时,Alice与Bob就得到了一个同样的密钥Q。这个密钥就可以对传输数据进行加密,解决了共同密码的协商问题,由于在协商的过程中只是暴露了各自的公钥,因此是安全的。

简单来说ECDH的精髓就在于:基于不同的公私钥对生成一样的密钥。


2.3. ECDSA


椭圆曲线数字签名算法,是使用椭圆曲线密码(ECC)对数字签名算法(DSA)的模拟。

这里需要注意的是:ECDSA签名算法的输入是数据的哈希值,而不是数据的本身,至于哈希算法选用哪一个就取决于自己了。为了使得ECDSA的输入值的bit数和子群的阶n的bit数一样,哈希值可能会被截断。

在这里,我们把ECDSA输入称之为Z。

经常用到的场景是这样的:Alice要用私钥签名一个数据,Bob想要使用Alice的公钥验证这个签名;

这里我们要明白:只有Alice能够进行计算然后得到签名,因为Alice掌握着私钥;而由于公钥是公开给所有人的,所以每个人都能验证签名值。

算法工作流程如下:

1> 取一个范围在[1, n - 1]的随机数k

2> 计算点P=kG

3> 计算r = xp mod n

4> 如果 r == 0,执行第一步

5> 计算s = k^-1 (z + r*da) mod n (da是Alice的公钥,k^-1 是 k 对n的逆元)

6> 如果s==0,执行第一步

7> 二元组(r, s)就是签名值

 

Bob使用Alice的公钥对(r, s)和Z进行验证,现在我们来看看Bob如何验证的: 

1> 计算u1 = s^-1 * z mod n

2> 计算u2 = s^-1 * r mod n

3> 计算P = u1*G + u2*Ha

4> 如果r == xp mod n,则验证正确


2.4. RSA


RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的, 在公开密钥加密和电子商业中RSA被广泛使用。

RSA的理论基础是这样的:在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然解密密钥SK是由公开密钥PK决定的,由于无法计算出大数n的欧拉函数phi(N),所以不能根据PK计算出SK。

注意: 在RSA里,是可以直接用公钥进行加密,私钥进行解密的,这里是与ECC中的ECDH是不同的,在ECDH里,是借用了已方私钥、对方公钥来生成一个共有密钥,而用这个协商好的密钥来进行加解密的。




在这们学习之初,要明白的是DES与AES属于对称加密,AES是DES的加强版本,因为A是Advanced;ECC与RSA是非对称加密,但是加密方式是不一样的。对于RSA来讲:公钥加密、私钥解密,私钥签名、公钥验签。对于ECC来讲,ECDH来协助加密与解密,ECDSA实现了私钥签名、公钥验签。


上面的几种算法的具体数学实现,有兴趣的读者可以自己查找,我们在这里只是了解概念,知道各个算法的侧重点与区别,有助于我们在以后的区块链学习不会出现概念上的混淆,尤其要区分RSA的加解密与ECDH。

好,我们下周二开始新的话题,下周见。


  没看够?再来几篇  





  

 本期作者|王   毅 

本期编辑|靳亚峰


祝你晚安早安午安心安


你可以上哪儿找我?


以上是关于白话区块链技术 第2讲|非对称加密的主要内容,如果未能解决你的问题,请参考以下文章

CEC知识科普丨区块链的非对称加密技术

区块链的加密技术

区块链科普系列1——非对称加密

区块链科普:非对称加密椭圆曲线加密算法

烧脑文区块链科普:非对称加密椭圆曲线加密算法

非对称加密:区块链能够去信任的关键!