区块链与密码学全民课堂:区块链基础技术大剖析之数字签名

昨天我们讲到区块链基础技术之一的哈希函数,今天这一讲我们来认识另一个区块链的基础技术——数字签名。
数字签名从字面上理解,是数字化签名。签名由来已久,用途极广。早在中国古代签名便已经广泛应用。我们最熟悉的可能是电视剧中,官老爷升堂断案,对堂下贫民,私用大刑,屈打成招。最后签字画押,按上红手印,这人就天牢见了。
其实古代文人墨客也极喜欢签名,花押又称“押字”,始于唐,兴于宋,盛于元,故又称“元押”。元押多为长方,一般上刻楷书姓氏,下刻八思巴文或花押。
从实用意义上说历代印章大都有防奸辨伪的作用,作为个人任意书写,变化出来的“押字”(有些已不是一种文字,只作为个人专用记号),自然就更难以摹仿而达到防伪的效果,因而这种押字一直沿用到明清时代。花押不是日本语,此名词在中国早有使用,其意思是个人化的署名。

宋徽宗赵佶是著名的书画家,他的“签名档”被人称为“绝押”,其外形有点像写得松散的“天”字,实际上赵佶玩的是拆字游戏,把“天下一人”四字连贯在一起,来表明自己不仅是君临天下的皇帝,且在艺术造诣上也是天下第一。乾隆皇帝更是在自己喜爱的书画作品上盖上数百个印章,来表达物品的归属权。

由此可见,在古代签名就逐渐衍生出一些作用,如:防伪认证,表明主权等等。
时间挪移到现代,签名已经广泛应用到方方面面:购物刷信用卡时,需要签名;友人互达书信时需要签名;公司双方签署合同或协议时也需要签名。而这些基本都是手写签名。
在网络时代,人们通过网络支付费用、买卖股票,为了保证网上商务活动的安全,需要一个很重要的安全机制——数字签名。
数字签名是手写签名数字化的产物,但又有着显著的区不同消息的签名不同,甚至相同消息也有不同的签名,否则签名就会被获取并复制到另外的文件中。数字签名的基础是公钥密码学。
数字签名(又称公钥数字签名)是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。
它是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术来实现的,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。数字签名是非对称密钥加密技术与数字摘要技术的应用。
数字签名原理
数字签名的文件的完整性是很容易验证的(不需要骑缝章,骑缝签名,也不需要笔迹专家),而且数字签名具有不可抵赖性(不可否认性)。
简单地说,所谓数字签名就是附加在数据单元上的一些数据,或是对数据单元所作的密码变换。这种数据或变换允许数据单元的接收者用以确认数据单元的来源和数据单元的完整性并保护数据,防止被人(例如接收者)进行伪造。
它是对电子形式的消息进行签名的一种方法,一个签名消息能在一个通信网络中传输。基于公钥密码体制和私钥密码体制都可以获得数字签名,主要是基于公钥密码体制的数字签名。
包括普通数字签名和特殊数字签名。普通数字签名算法有RSA、ElGamal、Fiat-Shamir、Guillou- Quisquarter、Schnorr、Ong-Schnorr-Shamir数字签名算法、Des/DSA,椭圆曲线数字签名算法和有限自动机数字签名算法等。特殊数字签名有盲签名、代理签名、群签名、不可否认签名、公平盲签名、门限签名、具有消息恢复功能的签名等,它与具体应用环境密切相关。
显然,数字签名的应用涉及到法律问题,美国联邦政府基于有限域上的离散对数问题制定了自己的数字签名标准(DSS)。
我们通过一个例子来了解数字签名的应用,先看下图:

这里面会产生两个问题:
· 这么大一笔资金,这消息是爱丽丝发送的吗,如果是别人呢?怎么确定?
· 要是过后爱丽丝不承认这笔转账怎么办?
数字签名是运用哈希算法和非对称加密算法实现的,要解决上面的两个问题,爱丽丝首先要写一个小纸条“我爱丽丝要向鲍勃转100万”并在下面签名,确保内容认可。
然后将“我爱丽丝要向鲍勃转100万”的小纸条用哈希算法运算一次,会得到一串“天书”般的文字——看不懂且不可逆的字符串。

之后对方用私钥给这段字符加密,加密后是一段密文。这段密文就是双方的数字签名了。双方公布了文本内容,和加密私钥对应的公钥,但两方的私钥不告诉任何人。
我们如何知道笔迹是爱丽丝的呢?这里就涉及到笔迹的鉴别,首先鉴别方要把“我爱丽丝要向鲍勃转100万”哈希处理换算一下,因为哈希算法的性质,会得出一样的结果。之后用公开密钥来解密,如果双方内容完全一致。那么就可以证明,这段文字确实是由保存私钥的人签署的。
并且如果当事人不承认的话,比如事后爱丽丝说我想给鲍勃1万,请他退回99万,如果文本有所改动,就算是私钥正确,哈希处理后的内容也会改变,内容就不是原有哈希值。
这里可以看到数字签名方案一般包括三个过程:
· 系统初始化过程:产生数字签名方案中的所有系统和用户参数(公开的+秘密的)。
· 签名过程:用户利用给定的签名算法对消息签名,签名过程可以公开也可以不公开,但一定包含仅签名者才拥有的秘密信息(签名密钥)。
· 验证过程:验证者利用公开的验证方法对给定消息的签名进行验证。

所以数字签名具有以下目的和要求
数字签名的目的:保证信息的完整性和真实性,即消息没有被篡改,而且签名也没有被篡改,消息只能始发于所声称的一方。
一个完善的签名方案应满足以下三个条件:
不可伪造性:其他任何人均不能伪造签名,也不能对接收或发送的信息进行篡改、伪造和冒充。
不可否认性:签名者事后不能否认或抵赖自己的签名。
公正的仲裁:若当事双方对签名真伪发生争执时,能通过公正的仲裁者验证签名来确定其真伪。
有关于数字签名的课程就讲到这里啦,下节课我们将继续解析区块链基础技术之共识算法,共识算法是区块链的发动机,那它是如何运作的呢?下节课揭晓!