比特币与区块链基本原理学习笔记03(关于数字签名)

关于数字签名

"数字签名"(digital signature)和"数字证书"(digital certificate)到底是什么?

    帐本和电子签名,一本公共帐本是个很简单的支付系统 , 协议看起来是这样的,谁都能在帐本上新添行,每隔一段时间结算,然而这样的公共帐本有一个问题:既然谁都能新加一行,怎样才能信任这些交易呢?这就涉及到了密码学的第一点内容:电子签名(而且其他人应当几乎不可能伪造他的签名)乍一看,电子签名似乎是不可能的,在现实世界里,你的手写签名,不管在什么文件上看起来都是一样的,而在虚拟世界里,不管这签名用的是什么数据,电脑都可以读取并复制,那怎么才能避免伪造呢。


    大致可以猜到,要防止别人通过复制的方式把你的签名用在其他地方,这需要你每次的签名不一样,而这又产生另外一个问题,别人怎么知道这是你的签名,而且怎么才能知道你签了名的信息没被改过?

    一个精妙的办法同时解决了这几个问题:所有人都生成一个“公钥-私钥对”(一串比特),“私钥”又是也叫“密钥”写成sk,而公钥写成pk,顾名思义,密钥是你自己要私藏保密的,公匙是公开的,你用你的私钥和信息,生成*数字签名,生成的数字签名会根据信息的改变而改变,只是稍微改变一下信息对应的签名也会变得完全不同,生成签名的函数,它的结果取决于信息本身以及你的私钥,私钥确定只有你能给出那个签名,而信息能改变签名。这就同时解决了防止别人通过复制的方式把你的签名用在其他地方和防止别人更改你签过名的数据的问题(不管是哪种情况,信息都变了,对应的数字签名也就变了,于是和你确认过的信息的数字签名就不一样了)。

*注:这里通过私钥和信息“生成”数字签名的过程是通过哈希函数实现的,在后面会提到。

问题还没解决完,别人不知道你的私钥,那又是怎么知道你给的数字签名是通过你的私钥给出来的呢,这里就用到了公匙,其他人就是同过签名者给出的公匙来确认签名者确实有私钥的。

这个过程比较复杂,暂时就知道能这样干就好。

总结一下,数字签名需要满足的条件:

1.数字签名需要证明该信息经过了其本人确认。

2.要防止别人通过复制的方式把你的签名用在其他地方。

3.要能知道你签了名的信息没被改过。

满足的方法是生成配套的私钥和公匙,把私钥和信息作为自变量放入哈希函数的到数字签名,其他人通过公匙确认签名者有私钥。


猜你喜欢

转载自blog.csdn.net/qq_27467365/article/details/80009839