区块基础-数字签名

作者: 磨链社区 | 来源:发表于2018-05-27 01:29 被阅读8次

    随着互联网的发展,网络交易普及,在交易过程中经常会碰到数字签名这个概念,当然区块链中也通过数字签名来验证交易信息的可靠性,这里简单介绍下数字签名的概念,如有理解不当的地方,请及时指正。

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

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

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

    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

    顺便提一句目前国密算法的中M2算法也是基于该算法。

    大致介绍了数字签名和一些基本的数字签名算法,签名算法涉及到比较专业的数学知识,这里大致就介绍了功能和过程。

    相关文章

      网友评论

        本文标题:区块基础-数字签名

        本文链接:https://www.haomeiwen.com/subject/fvwvjftx.html