区块链100讲:公开密钥算法不能不知道的4个概念

image

区块链100讲又一个不得不说的是密码算法,若是把区块链系统比做一我的,那密码算法就是他的骨骼,若是没有骨骼,整个体系就会坍塌。今天咱们来看看区块链系统的密码算法有什么独特之处。算法

1

一些密码学基础

发送者和接收者: 发送者想要发送消息给接收者,而且这个消息是安全的(让偷听者不能阅读这个消息)安全

消息和加密:消息被称做 明文。经过某种方法假装消息以隐藏它的内容的过程称做 加密。被加密的消息被称做 密文。相应的,把密文转变成明文的过程叫做 解密。网络

image

算法和密钥:密码算法也叫 密码,是用于加密和解密的数学函数。若是算法的保密性是针对于保持算法的秘密,这种算法称为受限制算法。按如今的标准,这种受限制算法保密性已经远远不够。现代密码学使用 秘钥来解决了这个问题。有些算法使用两个不一样的密钥,即加密密钥和解密密钥不一样。这些算法的安全性就是基于密钥的安全性,而不是算法细节的安全性,这就意味着算法能够公开,即便偷听者知道算法,可是不知道具体使用的密钥,就不可能阅读消息。函数

image

密码系统:由全部可能的明文、密文、密钥、以及算法组成。性能

对称算法:又叫传统密码算法,加密秘钥能从解密密钥中推算出来,反过来也成立。一般加密和解密使用同一个密钥,称做 单密钥算法或者是 秘密密钥算法。学习

公开密钥算法(非对称算法):用做加密的秘钥不一样于用做解密的解密秘钥,并且解密秘钥不能经过加密秘钥计算出来(至少在合理假定的长时间内)。之因此叫做公开密钥算法,由于加密秘钥可以公开,可是偷听者只能使用加密秘钥加密信息,只有用相应的解密秘钥才能解密信息。这里,加密密钥又被称做 公开密钥(简称公钥),解密秘钥称做 私人密钥(简称私钥)。区块链

混合密码系统:将对称密码和公钥密码结合起来的密码方式称为混合密码系统。编码

密码分析:密码分析是在不知道密钥的状况下,恢复出明文的科学。成功的密码分析能恢复明文或者密钥。也能够发现密码体制的弱点而获得明文和密钥。(密钥经过非密码分析的方式的丢失叫 泄露 )加密

算法的安全性:那么什么样的算法才是安全的呢?若是破译算法的代价大于加密数据的价值;若是破译算法所须要的时间比加密数据保密的时间更长;若是用单密钥加密的数据量比破译算法须要的数据量少得多。那么你多是安全的。ip

2

两把钥匙:公钥和私钥

现比特币仍继续使用公开密钥加密(public-key cryptography,也称为非对称加密)方式进行数据加密,实质是一对数学算法相关的公钥密钥解密的关系,使用经过私钥解开公钥(公开的密钥)后获取本真的信息,此过程是非对称加密算法。

公钥的主要做用:加密;验证签名。

私钥的主要做用:签名;解密。

特性:

  • 经过私钥能够计算出公钥,反之则不行。

  • 公钥加密:公钥加密的内容能够用私钥来解密——只有私钥持有者才能解密。

  • 私钥签名:私钥签名的内容能够用公钥验证。公钥能验证的签名都可视为私钥持有人所签署。

image

使用原则:

①  每个公钥都对应一个私钥。

②  密钥对中,让你们都知道的是公钥,不告诉你们,只有本身知道的,是私钥。

③  若是用其中一个密钥加密数据,则只有对应的那个密钥才能够解密。

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

举个栗子: 

咱们来认识两个密码学上的知名人士Alice和Bob,如今他们是一对地下情侣,以及一个自做多情的第三者Eve。

Alice和Bob想互相写情书,可是他们不想让Eve偷看到他们互递情书内容,因而他们准备给情书加密。Alice加密后,把情书给Bob看,可是情书已经加密了,Bob看不懂,Alice意识到她还得把解密的密钥给一块儿发送给Bob。

可是若是Alice直接把密文和密钥一块儿发送给Bob行不行呢?若是一块儿发送,Eve两个都会拿到就能够像Bob同样看情书的内容了,也就是说,同时发送密钥,Eve也能完成解密。Alice束手无策,密钥必须发送给Bob,但又不能发送,哎呀她要纠结死了。

后来,Alice想到,既然必须给钥匙,那么我能够准备两把钥匙啊,因而她和Bob商量这么作:

1)两人准备两把配对钥匙,一把用来加密(公钥),一把用来解密(私钥)。

2)Bob把他的公钥发送给Alice,这时被Eve截获,Eve很兴奋,“嗨呀,拿到大家的钥匙了”

3)而后Alice收到Bob的公钥后,用Bob的公钥加密,而后把密文发送给Bob。这时又被Eve截获,“嗨呀,看我破解你的密码,咦?怎么打不开呢?”

4)Bob拿到Alice给他的密文后,用本身的私钥对密文解密。(今后之后,Alice和Bob的地下恋情就不怕被Eve曝光了,咱们只是在谈论学习,你是不会懂的。Eve仍是一脸懵逼)

以上就是公钥密码在传输过程当中的原理。

3

RSA算法

一、RSA算法

RSA是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名。RSA以它的三个发明者Ron Rivest, Adi Shamir,LeonardAdleman的名字首字母命名,这个算法经受住了多年深刻的密码分析,虽然密码分析者既不能证实也不可否定RSA的安全性,但这偏偏说明该算法有必定的可信性,目前它已经成为最流行的公开密钥算法。

这套密码系统,是当今世界上、史上最强加密系统,没有之一,咱们平常全部的与金钱有关的信息往来,所有用这套系统加密。RSA算法的一个最大的优势就是,我不怕被人知道个人加密方法,我不怕告诉别人个人一个密钥,由于告诉你也没用。RSA的安全基于大数分解的难度。其公钥和私钥是一对大素数(100到200位十进制数或更大)的函数。从一个公钥和密文恢复出明文的难度,等价于分解两个大素数之积(这是公认的数学难题)。

RSA的公钥、私钥的组成,以及加密、解密的公式可见于下表:

image

二、举个栗子,看看这个系统是怎样工做的。

假设两我的:庞涓和孙膑,庞涓要给孙膑一个特别的数字m=520,固然不能让别人知道了,那样太尴尬了对吧。

  • 第一步,孙膑选择两个不相等的质数。如p=61和q=53

  • 第二步,计算两个质数的乘积,n=pq=61×53=3233

  • 第三步,计算n的欧拉函数,φ(n)=60×52=3120(关于欧拉函数,另文撰写)

  • 第四步,随机选择一个整数e,1<e<φ(n),且e与φ(n)互质,庞涓选了e=17

  • 第五步,解不定方程ex+φ(n)y=1,即17x+3120y=1得x=2753,y=-15(关于这个方程的解法,另文撰写,数字小的话直接试试就好),则d=2753

  • 公布公钥(n,e)=(3233,17),保护好本身的私钥(n,d)=(3233,2753)

  • 第六步,加密。计算m^e除以n的余数,即c=mod(520^17,3233)=1077。(这个计算用Excel就能够完成,不须要计算器)因而庞涓将c=1077发给了孙膑。

  • 第七步,解密。孙膑拿到c=1077后,用本身的私钥(n,d)=(3233,2753)来解密。计算c^d除以n的余数,即mod(1077^2753,3233)=520(孙膑脸上泛着幸福的红晕)

这个加密系统中,私钥(n,d)是最关键的,要保护好,一旦丢失,就等于失去秘密。

问题:有没有可能由(n,e)倒推出(n,d)呢?

  • 要知道d,由第五步得,必须知道φ(n)

  • 要知道φ(n),由第三步得,必须分解质因数n=pq

  • 要倒推出d,必须对n进行分解质因数。而对于大整数n的分解质因数,数学上毫无办法,唯一能实现的办法就是暴力破解,也就是一个质数一个质数去试。目前公开能分解的最大整数是1230 1866 8453 0117 7551 3049 4958 3849 6272 0772 8535 6959 5334 7921 9732 2452 1517 2640 0507 2636 5751 8745 2021 9978 6469 3899 5647 4942 7740 6384 5925 1925 5732 6303 4537 3154 8268 5079 1702 6122 1429 1346 1670 4292 1431 1602 2212 4047 9274 7377 9408 0665 3514 1959 7459 8569 0214 3413

这是个232位整数,也是暴力破解的上限,固然之后量子计算机出现了,估计这个上限还会增长,但只要数学没有突破,无非就是密码长必定罢了。

如此完成了一个完整的信息传递过程。咱们看到,若是不知道d,其余人是不管如何也算不出m=520的,而要知道d,就必须对n进行分解质因数,而这又是极端困难。即使本例,n只有区区3233四位数,分解质因数就已经很是困难,不得不借助计算机了。

RSA算法实际上是三个步骤。

  • 计算公钥和私钥。随机选择质数p,q,n=pq,随机选择与φ(n)互质的数e,解方程ex+φ(n)y=1,其中d=x

  • 加密,c=mod(m^e,n)

  • 解密,m=mod(c^d,n)

三、RSA算法的特色

算法简单,计算容易,破解困难,这是RSA加密的最大特色。缺点嘛……密码实在太长了,1000位如下的密码根本就不放心。通常金融须要至少1024位,国防须要2048位。其次,这个算法的所有依托是如今的数学水平,假如哪天某个数学家突破了这个难题,他很容易就能分解大整数,这我的就太可怕了,不敢想象。

4

椭圆曲线密码算法

椭圆曲线密码学(英语:Elliptic curve cryptography,缩写为 ECC),一种创建公开密钥加密的算法,基于椭圆曲线数学。椭圆曲线在密码学中的使用是在1985年由Neal Koblitz和Victor Miller分别独立提出的。在区块链网络中,ECC一般被应用在数字签名等环节。

椭圆曲线密码学的主要优点是在某些状况下它比其余的方法使用更小的密钥——好比RSA加密算法——提供至关的或更高等级的安全。椭圆曲线密码学的另外一个优点是能够定义群之间的双线性映射,基于Weil对或是Tate对;双线性映射已经在密码学中发现了大量的应用,例如基于身份的加密。不过一个缺点是加密和解密操做的实现比其余机制花费的时间长。

双线性映射解释:在数论中,一个双线性映射是由两个向量空间上的元素,生成第三个向量空间上一个元素之函数,而且该函数对每一个参数都是线性的。 

椭圆曲线加密算法本质是数标轴上曲线的方程式计算,经过数的计算获得加密/解密。 

例如:公开密钥算法老是要基于一个数学上的难题。好比RSA 加密算法依据的是:给定两个素数p、q很容易相乘获得n,而对n进行因式分解却相对困难。那椭圆曲线上有什么难题呢?

假设以下方程等式:

   K=kG [其中 K,G为Ep(a,b)上的点,k为小于n(n是点G的阶)的整数]

不难发现,给定k和G,根据加法法则,计算K很容易;但给定K和G,求k就相对困难了。

这就是椭圆曲线加密算法采用的难题。咱们把点G称为基点(base point),k(k<n,n为基点G的阶)称为私有密钥(privte key),K称为公开密钥(public key)。

咱们看下图,下图描述一个利用椭圆曲线进行加密通讯的过程:

image

用户A选定一条椭圆曲线Ep(a,b),并取椭圆曲线上一点,做为基点G。

用户A选择一个私有密钥k,并生成公开密钥K=kG。

用户A将Ep(a,b)和点K,G传给用户B。

用户B接到信息后,将待传输的明文编码到Ep(a,b)上一点M(编码方法不少,这里不做讨论),并产生一个随机整数r(r<n)。

用户B计算点C1=M+rK;C2=rG。

用户B将C一、C2传给用户A。

用户A接到信息后,计算C1-kC2,结果就是点M。由于

C1-kC2=M+rK-k(rG)=M+rK-r(kG)=M

再对点M进行解码就能够获得明文。

在这个加密通讯中,若是有一个偷窥者H ,他只能看到Ep(a,b)、K、G、C一、C2 而经过K、G求k 或经过C二、G求r 都是相对困难的。所以,H没法获得A、B间传送的明文信息。

密码学中,描述一条Fp上的椭圆曲线,经常使用到六个参量:

       T=(p,a,b,G,n,h)。

  • (p 、a 、b 用来肯定一条椭圆曲线,

  • G为基点,

  • n为点G的阶,

  • h 是椭圆曲线上全部点的个数m与n相除的整数部分)

这几个参量取值的选择,直接影响了加密的安全性。参量值通常要求知足如下几个条件:

  • p 固然越大越安全,但越大,计算速度会变慢,200位左右能够知足通常安全要求;

  • p≠n×h;

  • pt≠1 (mod n),1≤t<20;

  • 4a3+27b2≠0 (mod p);

  • n 为素数;

  • h≤4。

ECC是RSA的强有力竞争者,其与RSA相比有如下优势:

  • 安全性能更高:如160位ECC与1024位RSA有相同的安全强度;

  • 计算量小、处理速度快:在私钥的处理速度上(解密和签名),ECC远比RSA快得多;

  • 存储空间占用小:ECC的密钥尺寸和系统参数与RSA相比要小得多,因此占用的存储空间也小得多;

  • 带宽要求低:这一优点使ECC具备更普遍的应用前景。

ECC的这些优势使其必将取代RSA,成为通用的公开密钥算法。目前,SET协议(安全电子交易协议)的制定者已把它做为下一代SET协议中不可缺乏的公开密钥算法。

尽管ECC有以上优点,但仍存在两大技术难题

第一,怎么选取合适曲线;

第二,怎么快速实现椭圆曲线密码。

因此,在严谨的密码学体制下还需进一步研究,以攻克更多技术难题,最终保障用户信息安全。

内容来源:

公众号:大转转FE、EETOP、区块链技术资讯、数学佬、Nervosfans、币链天

如下是咱们的社区介绍,欢迎各类合做、交流、学习:)

image

相关文章
相关标签/搜索