数字签名技术是“萝卜章”终结者

密码
当我们很多人看到“密码技术”时,脑袋里应该首先浮现的是银行密码、网络账号密码之类的东西,这是我们普通人接触密码最多的场景。再多想一层,则是平时似乎用不着,但从影视作品知道的加解密技术。可是上两篇我介绍的散列函数和哈希值的应用,似乎与我们所理解的密码学不是一回事。今天我来简单回顾加解密技术的发展,来隆重引出比特币技术中第二个基本的密码技术——数字签名技术。
对称加密技术
前面我介绍了古典密码学在上个世纪四五十年代被大神香农带入现代。直到七十年代,无论古典密码学还是刚刚发展二十多年的现代密码学,都是采用对称加密技术路线研究如何将信息加密和解密。
对称加密技术

所谓对称加密技术,就是加密和解密使用的密钥是一样的。在进入现代密码学以前,加密方法基本上都采用各式各样的字母替代方法,由于语言文字存在固有频率,总是会有办法找到突破口进行缩小范围的暴力破解,尤其是引进一些数学工具以后,如线性代数,这类密码最终都会被破解,整个古典时期的密码大战,解密方胜多负少。进入现代,全面与数学、信息论结合以后,对称式加密法有了数学原理的支撑,因此加密能力大幅度提升,直接针对算法解密已经极难,超过了利用其他的弱点进行破解的成本。

这种技术路线最大的弱点来自于密钥的管理与分发。经常更换密钥是提高密码安全性的极其重要手段,最高境界是实现每次发送信息都采用不同的随机密钥。然而由于收发双方需要掌握同样的密钥,那么如何将新密钥通知双方就成了个难题。二战时期的密码大战,德国使用机器来实现非常复杂的加密计算,但波兰人和英国人(图灵)先后利用密钥分发环节的弱点实现了破解。

密钥的分发环节作为对称加密技术的弱点,同时还有一个副产品弱点,就是无法确认发送信息人的身份。因为如果密钥已经被秘密破解,那么敌方可以利用密钥发送虚假的信息给接收方,这种在密码学里称为“中间人攻击”。

此外,如果需要建立点对点之间保密通信网络,那么任意两点之间需要单独建立密钥,这样随着网络节点增加,整个通信网络的密钥数将成几何倍数增加,管理起来再加上更新分发就成为非常庞大的易出错的工作。

由于对称加密技术在视频、音频通信领域里有着非常重要的地位,因此如果能够实现每次信息发送都用不同的密钥,而且分发路线绝对安全,那么则是千百年来密码学研究的梦想——无条件安全性。这是量子通信领域正在努力的目标,量子通信通过量子力学的量子纠缠效应(这里科普的话需要另外一个超难的系列,网上有很多人在做)实现了绝对安全的密钥分发。不过通过光纤或者卫星激光进行的量子通信,由于带宽太低,目前世界首条量子保密通信干线“京沪干线”,密钥率大概20千比特/秒可同时供上万用户密钥分发。但是对于需要加密解密的数据,如视频和音频,显然不可能走量子通信线路,还需要走常规更快的网络进行密文传递。

非对称加密技术

而1974年瑞夫·梅克尔(Ralph Merkle)提出了一些设想,到1976年,Whitfield Diifie 和Martin Hellman在设想基础上再一次永远改变了密码学,他们提出了非对称加密技术(又被称为公开密钥密码学),从而为实体世界进入虚拟数字世界打开了一扇门。然而后来从1997年的公开文件中大众才知道,早在1970年代早期,英国情报机构政府通信总部的数学家James H. Ellis便已发明非对称密钥密码学。可见密码技术作为极其重要的军事技术,长期以来是受军方严密控制的。

非对称加密技术

图示:非对称加密技术

插图版权说明:由Nicobon – 自己的作品,CC BY-SA 4.0,https://commons.wikimedia.org/w/index.php?curid=48484042

非对称加密技术与对称加密技术不同处在于加密和解密采用的是不同的密钥。非对称加密技术采用一些算法产生一对密钥,知道其中之一密钥,在数学上做到了非常非常非常难算出另一个密钥。使用其中一个密钥只能加密信息或者解密另一个密钥加密的信息。我们就将其中的一个密钥作为公钥(上图中的蓝色PUB)发布出去,让人人都知道,然后把上图红色的私钥(PRIV)安全保管好。

当有人(发送方)需要发送秘密信息给某人(接收方),则发送方使用接收方的公钥(人人都能获得)对信息进行加密并发布。尽管人人都能得到密文,但只有接受人有私钥,可以解密阅读信息。其他人尽管有接受人的公钥,也没办法破解密文。这种方式彻底解决了密钥分发问题。

在非对称加密技术中,算法大多基于计算复杂度上的难题,通常来自于数论,按照算法不同分了许多种类。使用最广泛的是源于整数因数分解问题的RSA算法,这是1978年发明,由发明者Rivest、Shmir和Adleman三位姓氏首字母缩写而来。近年发展快速的椭圆曲线密码学则基于和椭圆曲线相关的数学难题,与离散对数相当,被称为椭圆曲线加密算法(英语:Elliptic Curve Cryptography, ECC)。比特币采用的是ECDSA(Elliptic Curve Digital Signature Algorithm),是椭圆曲线加密算法(ECC)与数字签名算法(DSA)的结合。我这里也就提提名词,让大家被一连串不明觉厉的名词提升一下逼格而已,细节没办法深入,实在太太太深奥了。

不对称加密技术一出,几乎彻底改变了密码学的研究方向,但是不对称加密技术采用的算法降低了计算机运算速度,比对称加密技术慢上百倍,所以这两个技术经常组合运用。尤其是对比较大同时需要快速解密的数据,如视频、音频等,一般采用对称加密技术来加解密数据,用不对称加密技术来分发对称加密技术的密钥。

不对称加密技术不仅解决了密钥分发难题,同时还带来了一个副产品,就是能够安全完美鉴别发送人的身份。也就是把上图加密过程反过来(变成逆时针方向)。当发送人用自己的私钥对发送信息进行加密,发布后全网的人都获得密文,都可以通过发送人之前发布的公钥进行解密,因此大家都确认这个信息的发送人身份是那个公钥对应的人。这就是数字签名技术。

数字签名技术

说了那么多,大家应该对密码学的技术大框架有了一个概貌的了解,然后我要告诉大家,其实区块链技术里(至少目前的数字加密货币应用里)根本没有任何加密需求。所以我要擦黑板,前面说的什么对称不对称的加密技术几乎全部擦掉,这并不是区块链中要用到的技术,只有那个副产品——数字签名技术才是我们这一篇要介绍重点。

好烂的开场白

在又长又臭的前面我已经把数字签名的基本原理已经说了一次了,就是用私钥对信息进行加密,其他人用公钥解密,成功则为确定了签名信息。数字签名技术对于传统签字画押不仅仅是取代,而是完全的超越。

我们对合同的签署传统上都是通过签字盖章来表示对文件的确认,纸质文本如果很多页,我们会采用每页小签或者骑缝章来对整体进行确认,工作量有时会很大。另外遇到诉讼纠纷时,对于签字盖章确认的纸质文件会被质疑真实性,鉴别成本很高,需要非常专业的笔迹鉴定,而签定过程因为技术门槛高且无法透明,则只能通过法律手段强制确认。对于图章由于图形固定,更是容易伪造,有时用“萝卜章”来嘲笑图章的伪造门槛有多低。

萝卜章

数字签名技术完美解决问题,成为“萝卜章”的终结者,应用中具体原理和工作过程如下图。签名人将需要签名的数据进行散列函数计算得到一个固定长度的散列值(不理解的看前两篇),然后用签名人的私钥对散列值加密变成了一串密文(也是一串数字),这个密文就是所谓的签名。签名和数据放一起,称为带数字签名的数据。

数字签名原理

当接受人收到带数字签名的数据后,首先把里面数据和密文分开来,用同样的散列函数对数据进行计算,得到一个散列值。再用签名人的公钥对那串加密密文进行解密,得到另一个散列值。将两个散列值进行比对,如果一样,则表示签名有效,否则无效。

这样的原理,可以看出签名与需要签名的文件是一一对应的,同一个签名人对不同文件的签名是完全不一样的。这来自于散列函数不同输入得到不同输出的特性,因此复制某一个文件的有效签名,粘贴到其他文件之中意图伪造签名,是非常容易被校验出来的。此外同样有效的带数字签名的电子文件,经过复制,只要不修改,就同样有效,因此就没有副本这个概念了。

不过肯定有朋友会提出来,我们说用签名人的公钥去校验,从原理是来说没问题,但是我们怎么知道哪个公钥是签名人的呢?因为公钥也不过是看不懂的数字呀。是的,在现实生活中,我们绝大部分场合需要把签名人的身份与公钥进行绑定,而这种绑定需要通过第三方来执行,被称作数字证书认证机构( Certificate Authority,缩写为CA )。中国目前主要有CFCA( 中国金融认证中心 China Financial Certification Authority)在做这项业务,这可是一个很有钱途,未来旱涝保收的领域呀。

需要进行电子签名的人可以向CFCA申请,CFCA对申请人审核后会提供申请人一对公钥私钥(也可以是很多对,看业务和费用了),还有一个数字证书。这样申请人就把公钥私钥与自己的身份绑定了,他对一份文件签名以后,不仅把带签名的文件发给其他人,也把那个数字证书发给其他人,其他人需要校验身份时,可以向CFCA求证是否真的是本人的密钥签名的文件。不过,这带来一个问题,CFCA好像拥有所有的公钥私钥……

数字证书认证机构看来是数字签名最终能建立起一个信任体系中的不可或缺的机构,它或者依靠强权,或者依靠口碑,总之取得了整个体系中的一个中心地位。没有它似乎系统将无法运行,这种模式就叫做“中心化”。这样的模式是目前我们生活的几乎主流模式,从政权到金融体系,从支付宝到微信,都存在一个权威部门仲裁着一切。

有朋友要问我,现在说起区块链技术或者比特币,必提“去中心化”这个概念,这到底是什么意思?去中心化这个概念现在绝大部分的解读就是通过某种技术能够去掉中间那个认证机构仍然能正常运转,因为那个机构知道得实在太多了。

知道的太多了

但这个概念其实含有丰富的内容,有些会触及世界观。未来我们会不断提到这个概念,每一次会有不同角度的思考,我高深莫测的不把问题一次解决是因为这真是一个深刻的话题,也许本漫谈系列结束后都不会停止探讨。希望朋友们不要把快速理解和表面理解当作学习方法,蜻蜓点水式的碎片化学习只会让人越来越不会用大脑,只知道辛苦眼球的学习不是学习,是洗脑。(还记得第四篇的封面照吗?)

中心化与去中心化

回到数字签名认证机构与比特币的去中心化问题,首先先简单的说一下我对比特币实现去中心化方式的理解。比特币是依靠技术和运行机制组合实现了去中心化的一些目标。技术的确非常重要,我们目前谈的密码学技术是信任的基石,是从技术上解决可靠性和安全性问题。但是要实现去中心化的信任更重要是人性部分,没有什么技术是能彻底控制人不会做出违反规则的事情。那就需要设计一些技术的或者其他办法,让故意干坏事的人干不成坏事。所以从某种意义上来说,比特币实现的去中心化是有着精妙的技术框架,深刻的人性思考,简单易行的规则合成的管理成效。

比特币的目标是实现虚拟现金的功能,大家还记得第二篇里关于货币历史,我说到,制造比特币就是希望能在网络世界解决只有现金才能解决的匿名问题。匿名呀,当然不能有身份绑定和签订了。所以在比特币的世界里,不需要知道谁在里面,公钥就是身份,管它在现实世界谁的手上。

由于比特币的公钥私钥的算法是公开的,谁都可以随时生成一对公钥私钥,数学原理又保证了不同的人恰巧生成一样的公私钥是非常非常非常困难的。比特币甚至干脆不再做一个账号管理,因为这也绕不开中心化方式,直接使用公钥作为账号(其实是公钥的哈希值,这里不细说)。那么我们只要有公钥,就算有身份,就算有账号,所以公钥=身份=账号,你可以拥有无数身份、账号。因此CA在这里根本不需要,每个在比特币网络里的人,只需要提供公钥,保管好自己的私钥,就OK了。

 

(本篇首发于2018年3月18日微信公众号geekszone


Warning: printf(): Too few arguments in /home/geekszon/public_html/wp-content/themes/simplelin/inc/template-tags.php on line 76

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据