首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

虾说区块链-84-blockchain笔记三

签名:在现实社会中,签名作为签名者身份的一种证明,签名代表对签名文件的认可,不可抵赖。理论上签名是可信、不可伪造的。每次你刷卡消费后,营业员肯定需要你对回执上进行签名,这就是一种对消费交易的认可。

数字签名(又称公钥数字签名、电子签章):是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。就是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。简单证明“我就是我”。

和传统的签名不一样,互联网的发展和数字签名的出现,让签名认证这个概念应用到了更多的层面。

1.签名认证,数字签名在网络交易上和实际签名一样的认可功能,不可抵赖,签名放拥有私钥,保证签名只能自己操作,在出现签名的环境下,使用私钥验证签名的真伪。

2.防篡改,这个通过网络下载来说明最为直观,你在网络上下载一个文件,数字签名和文件混合一个整体数据包,通过对数字签名的验证,保证文件在传输过程中未被篡改。

3.验证数据的完整性,如2同理,如果文件有丢失,签名将不完整,解开数字签名和之前的比较就会出现不一致。保证文件的完整。

4.仲裁机制,数字签名也可以认为是一个数字身份,通过唯一私钥生成,在网络上交易互动时要求收到一个数字签名的回文,保证过程的完整。如果对交互过程出现抵赖,那么用数字便于仲裁。

5.保密性,对于有安全级别要求文件,数字签名加密后传输,保证数据在被中途截取后无法获得其真实内容。有利于数据的安全性。

6.防重放:在数字签名中,如果采用了对签名报文添加流水号、时戳等技术,可以防止重放攻击。

7.多重数字签名,通过多次数字签名,对文件数据进行多人认证。

数字签名整个过程验证简单,只需要公钥、私钥进行加解密的验证,和传统签名不一致,一般都会看到电视剧中常出现签名验证的时候需要专业的笔记签证专家,采用数字签名节省了验证流程和成本。

从数字签名过程来简单理解下原理。

所谓数字签名就是附加在数据单元上的一些数据,或是对数据单元所作的密码变换。这种数据或变换允许数据单元的接收者用以确认数据单元的来源和数据单元的完整性并保护数据,防止被人(例如接收者)进行伪造。它是对电子形式的消息进行签名的一种方法,一个签名消息能在一个通信网络中传输。

1.一段需发送的数据经过hash计算生成一份摘要。

2.摘要通过发送者私钥进行加密。

3.发送者将使用私钥加密后的摘要和报文,生成一段待发送的数据包。数字签名即为经过私钥加密后的加密摘要。

4.接收者使用之前一样的hash算法对报文计算摘要。

5.接收者再通过发送者公钥对摘要进行加密计算D。

6.接收者通过发送者公钥对数字签名进行解密D’。

7.两者进行比较即可验证。

实现数字签名有很多方法,数字签名采用较多的是公钥加密方式,如基于RSA Date Security 公司的PKCS(Public Key Cryptography Standards)、Digital Signature Algorithm、x.509、PGP(Pretty Good Privacy)。1994年美国标准与技术协会公布了数字签名标准而使公钥加密技术广泛应用。公钥加密系统采用的是非对称加密算法。之前的文章对非对称加密也有过说明,有兴趣可以参考。它的主要方式是,报文的发送方从报文文本中生成一个128位的散列值(或报文摘要)。发送方用自己的私人密钥对这个散列值进行加密来形成发送方的数字签名。然后,这个数字签名将作为报文的附件和报文一起发送给报文的接收方。报文的接收方首先从接收到的原始报文中计算出128位的散列值(或报文摘要),接着再用发送方的公用密钥来对报文附加的数字签名进行解密。如果两个散列值相同、那么接收方就能确认该数字签名是发送方的。通过数字签名能够实现对原始报文的鉴别。上文数字签名步骤解释的也就是一种公钥加密签名的模式。当然还有对称加密方式,现在常用为非对称加密算法。

结合区块链技术看下公钥、私钥、地址、签名的概念。

上图是公钥、私钥、地址的生成过程,有了这三个要素,然后通过上述数字签名的从过程发送信息摘要和数字签名,验证一致性。区块链中目前用到的是椭圆曲线算法。

椭圆曲线算法:椭圆曲线算法ECC来做非对称加密基础算法。ECC的210位算法难度就相当于RSA 2048的难度,性能则是数量级的区别。这里涉及到一些专业的数学知识点,椭圆算法ECC其实就是利用乘法容易,而除法难的特点,设计一个乘法:K = k * G,其中大K是公钥,小k是私钥,G是生成点。由私钥推导公钥很容易,只需要k个G相加即可。但是从公钥推导私钥很难,也就是无法计算公钥K除以G。如果有兴趣可以参考下文:

http://rdc.hundsun.com/portal/article/750.html

区块链入门时候最难理解的应该就时候这个椭圆加密算法,椭圆加密算法用于生成公钥生成,现在国密SM2算法的也是基于椭圆机密算法的非对称算法,这里对椭圆加密算法做个最简单的介绍,深奥的数学定理笔者也不懂。

参考:http://www.pediy.com/kssd/pediy06/pediy6014.htm

有理解不当的地方请及时指正。

椭圆加密算法是一种公钥加密体制,最初由Koblitz和Miller两人于1985年提出,其数学基础是利用椭圆曲线上的有理点构成Abel加法群上椭圆离散对数的计算困难性。

有理点:一个n维空间中的几何物体,它的每一点的坐标可以用(x_1,x_2,...,x_n)表示。如果所有x_i都是有理数,则称该点为有理点。

平行线和射影平面:初中数学中有个定理,两条平行线永不相交。那么这里我们换一种思考方式,两条平行线在无穷远处会相交,有一个交点。(不要和之前学的数学去较真)然后根据这个理解,出来下面几个无穷远处点的性质:

1.一条直线,无穷远处点就一个。(一条线你还能要求它有几个点)

2.在平面上一组互相平行的平行线在无穷远处有公共的无穷远处点。

3.平面上相交的两条线在无穷远处有不同的无穷远处点。

4.平面上所有无穷远处点构成一条直线,叫无穷远处直线,那平面上的无穷远处点和正常点构成一个射影平面。

引入一个射影平面坐标系,联系下之前初中数学学的平面直角坐标系:

那么把坐标系的任意点(x,y),改变成x=X/Z ,y=Y/Z(Z≠0)则坐标系内点可以表示为(X:Y:Z)。有三个参量的坐标就建立了新的坐标体系。例:平面(4,8),射影平面坐标(4Z,8Z,Z),那么Z不等于0,(4,8,1)(8,16,2)(6,12,1.5)这些都是(4,8)在射影平面坐标下的点。再根据初中的坐标直线方程求解,aX+bY+c1Z =0; aX+bY+c2Z =0 (c1≠c2),方程联立求解,c2Z= c1Z= -(aX+bY)且c1≠c2,aX+bY=0,那么解得(X,Y,0)来表示无穷远点。那么表示这类型的坐标体系为射影平面坐标系。

根据上述的方程式,在射影平面坐标系中的椭圆曲线的定义:

该方程名为维尔维斯特拉斯方程,椭圆曲线的形状不是椭圆,只是因为其描述的方程类似于计算一个椭圆周长的方程。到这里才明白这个名字的来历。

加法法则:任意取椭圆曲线上两点P、Q (若P、Q两点重合,则做P点的切线)做直线交于椭圆曲线的另一点R’,过R’做y轴的平行线交于R。我们规定P+Q=R。

曲线上三个点A,B,C处于一条直线上,则A+B+C=O∞ 下面,我们利用P、Q点的坐标(x1,y1),(x2,y2),求出R=P+Q的坐标(x4,y4)。 P,Q,R'共线,设为y=kx+b, 若P≠Q,k=(y1-y2)/(x1-x2) 若P=Q,k=(3x2+2a2x+a4 -a1y) /(2y+a1x+a3) 解方程组得到: x4=k2+ka1-a2-x1-x2; y4=k(x1-x4)-y1-a1x4-a3;

到这里说椭圆曲线在密码学中的应用,其实之前把整个函数理解成一个曲线光滑的连续曲线,结合笔者之前文章讲加密中质数分解的说明,加密必须是离散的,那么把椭圆曲线定义在一个有限域上。

给出一个有限域Fp,这个域只有有限个元素。

Fp中只有p(p为素数)个元素0,1,2 …… p-2,p-1;

Fp 的加法(a+b)法则是 a+b≡c (mod p);即,(a+c)÷p的余数 和c÷p的余数相同。

Fp 的乘法(a×b)法则是 a×b≡c (mod p);

Fp 的除法(a÷b)法则是 a/b≡c (mod p);即 a×b-1≡c (mod p);(b-1也是一个0到p-1之间的整数,但满足b×b-1≡1 (mod p);)。

Fp 的单位元是1,零元是 0。

同时,并不是所有的椭圆曲线都适合加密。y2=x3+ax+b是一类可以用来加密的椭圆曲线,也是最为简单的一类。下面我们就把y2=x3+ax+b 这条曲线定义在Fp上:

选择两个满足下列条件的小于p(p为素数)的非负整数a、b

4a3+27b2≠0 (mod p)

则满足下列方程的所有点(x,y),再加上 无穷远点O∞ ,构成一条椭圆曲线。

y2=x3+ax+b (mod p)

其中x,y属于0到p-1间的整数,并将这条椭圆曲线记为Ep(a,b)。

我们看一下y2=x3+x+1 (mod 23)的图像

椭圆曲线这里成为了离散的点。

接下来就是加密解密:

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

根据加法法则,计算K很容易;但给定K和G,求k就相对困难了。 我们把点G称为基点(base point),k(k

整个加密通信过程:

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

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

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

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

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

6、用户B将C1、C2传给用户A。

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

因为C1-kC2=M+rK-k(rG)=M+rK-r(kG)=M 再对点M进行解码就可以得到明文。

最后说下椭圆曲线优点:与经典的RSA,DSA等公钥密码体制相比安全性高,160位的椭圆密钥与1024位的RSA密钥安全性相同。处理速度快。在私钥的加密解密速度上,ecc算法比RSA、DSA速度更快。存储空间占用小。带宽要求低。

本文由币乎(bihu.com)优质内容计划支持。

笔者微信:

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180209G07BYF00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券