从零开始学习区块链――数字签名

签名的作用

现实生活中,有很多场景需要我们签名,刷卡消费、签订协议、书信往来,等等。这些签名是为了证明我是我,信息真实发生,签名者同意,不可抵赖。在网络通信中,如果发送方在发送某个消息之后突然反悔,不承认发送过该消息,而网络中又无法确认信息发送者的身份,就会比较麻烦,因此现实生活中的身份确认在网络通信中同样需要,只不过这时候不是手写的签名,而是一种物理签名——数字签名。

数字签名

首先我们需要清楚什么是私匙和公匙。

公匙和私匙

用户注册的时候会得到一个账户,包括一对公匙和私匙。公匙是公开的,私匙是只有自己知道的。通过公匙加密的信息只有对应的私匙可以解密,通过私匙加密的信息只有对应的公匙可以解密。

他人通过使用我们的公匙加密向我们传递信息,我们可以用私匙解密。

私匙是我们自己用来签名确认的,私匙加密的信息上传到网络,他人可以通过公匙解密确认我们的身份。

签名的生成

签名的生成是具有特殊性的,取决于传递的信息,因此每次签名的字符串都是不一样的。

1、将消息进行哈希计算,得到相应的哈希值,也成摘要;

2、将得到的哈希值用发送者的私匙进行加密 ,生成签名;

3、将签名和消息一起发送,就像写信一样,信纸上是传递的信息,签名要写在信封上一起发送。

签名的验证

1、接收者提取信息中的签名;

2、用发送者的公匙可以解密,得到信息的哈希值;

3、用自己的私匙解密原文信息,在进行哈希计算,得到另一个哈希值;

4、对比两个哈希值,如果一致则验证成功。

信息传递中的流程

为了保护信息的安全和身份确认,网络中信息发送和接收过程中同时平行进行双重处理:1、发送方将需要传递的信息通过接收方的公匙加密,接受方用自己的私匙解密;2、发送方将信息摘要用自己的私匙加密,接收方用接收方的公匙解密。这两个信息(原文密文和签名)一起发送。

按照图上的流程,如果A想要给B发送信息“hello kitty”,

发送:首先A需要对“hello kitty”进行双重处理,首先将“hello kitty”用B的公匙加密,得到原密文,然后对“hello kitty”极性哈希计算得到相应的哈希值,再用A自己的私匙对该哈希值加密,得到A的数字签名,最后将签名后得到的原文密文和A的签名一起发送给B。

接收:B接收到A打包发送的信息后,通过A的公匙解开A的签名,可以得到“hello kitty”的哈希值,再通过B自己的私匙解开原文密文,在进行哈希计算,得到摘要,将两个摘要进行对比就可以判断A的身份和信息是否准确,如果一致,则接受完成。

数字签名的作用

确认身份,通过公匙解密,数字签名可以指定接收者确认发送者的身份;

信息完整、不被篡改,通过对信息进行不对称加密,加大了网络中恶意篡改的难度,通过私匙解密,可以判断信息是否受损;

不可抵赖,由于接收方手中有发送方的签名为证,证明信息源,所以不容抵赖。

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();