目录
法律意义上可靠的电子签名是如何实现的
什么是法律意义上可靠的电子签名
什么是数字签名
什么是PKI体系
什么是公开密钥加密
一份电子文件的数字签名及加密传输过程
为什么是对Hash值加密,为什么Hash值未变,即可断定文件未被修改…
实际文件加密传输过程中使用的双证书体系
CA机构与数字证书
表达签署人签署意愿
时间戳服务
基于PKI体系实现的数字签名是否法律意义上可靠的电子签名
随着国家政策的推动,电子签名正在普及化,其是具有法律效力的。其实,早在2000年,国家新的《合同法》即首次确认了电子合同、电子签名的法律效力。2005年4月1日起,《中华人民共和国电子签名法》正式实施,对于电子签有着完整、详尽的解释。
其中,对于电子签名的定义如下:
是指数据电文中以电子形式所含、所附用于识别签名人身份并表明签名人认可其中内容的数据。
对于可靠的电子签名关键说明如下:
电子签名同时符合下列条件的,视为可靠的电子签名:
当事人也可以选择使用符合其约定的可靠条件的电子签名。
数字签名:是以数学算法或其他方式运算对数据电文加密而形成的电子签名。
从此定义来看,数字签名只是电子签名的一种实现形式,理论上实现法律意义上可靠的电子签名应该是有很多方法的,符合法律对于电子签名的要求即可。
数字签名不是指将签名扫描成数字图像,或者用触摸板获取的签名,更不是落款。
数字签名过的文件的完整性是很容易验证的(不需要骑缝章、骑缝签名,也不需要笔迹鉴定),而且数字签名具有不可抵赖性(即不可否认性),不需要笔迹专家来验证。
这个就是今天我们要介绍的,通过基于PKI体系的数字签名来实现法律意义上可靠的电子签名。
PKI(Public Key Infrastructure)体系,中文叫:公开密钥基础设施,其是利用公开密钥加密建立起来的基础设施。
对很多同事来说,公开密钥基础设施是很抽象的,首先我们来了解下PKI体系的要点,通过对这些要点的理解,应当会对其形成一个更直观的认识。
网络上因大家不能见面,所以伪造身份是非常容易的,如何在网络上验明正身,是否可以有像线下“公民身份证”或者“企业营业执照”等一样的“网络身份证书”就非常重要了,相互通信的时候,能够确认“网络身份证书”,那么就知道自己在跟对的人通信。
该有谁来制作这个“网络身份证书”呢?,在现实生活中,如果公民身份证不是由公安机关来制作的话,那么这个身份证我们还能信任吗?同样,在网络世界中,我们需要一个信的过的发证机构来发行“网络身份证书”,同时用户要好好保管好自己的“网络身份证书”,就像派出所给你发的公民身份证,自己要好好保管一样。
一般来说,构成PKI体系的要素有如下三个:
本质上,PKI体系就是网络身份证书的制作和分发的一种机制,在这个机制的保障下,用户进行可信赖的网络通信,即安全的网络通信保障机制。实际上,网络身份证书也是存放在硬盘或者是其他硬件卡(U盘)里面的,证书的构造是一种叫做X.509的协议规定的;另一方面,认证机构也可以理解为一个网络应用程序,它按照相应的机制来制作和分发网络身份证书。
证书库其实也就是文件系统而已,在网络上将证书放在一起,供其他应用来下载获取,或者因为某些特殊情况,证书制作好之后,直接分发出去,甚至没有证书库。
一旦利用了网络身份证书确认了用户身份,与其进行加密通信就可以实现了,因为证明书里包含了用来加密的密钥。
比如说,你要和李雷通信,这个自称李雷的男人,会在通信的最开始,将自己从认证机构那里获取到的“网络身份证书”发给你,通过这个证书你可以确认他就是李雷。
然后,你用这个“证书中的密钥”,将你要发送给李雷的内容进行加密,然后发送给李雷。
用李雷“证书中的密钥”加密过的内容,只能用李雷才有的另一个“私人的密钥”才能解密。这样的话,如果你发送给李雷的内容被他人窃取的话,他人也无法解密。
如果李雷好好保管好自己才有的“私人的密钥”,那么如果有人拿着李雷的“证书中的密钥”想要胡作非为的话,是不可能的。因为用“证书中的密钥”加密过的内容,只有李雷自己才有“私人的密钥”能解密。
所以这么一来,PKI提供的网络身份证书可以用来做身份确认和加密通信,同时实现这两个重要的功能。
对于李雷来说,只要保证自己的“私人的密钥”不被盗走,包含在“网络身份证书”中的密钥给多少人是没有关系的。也就是说,想跟李雷通信的人,必须要有李雷的“网络身份证书”,要用“证书中的密钥”对通信内容进行加密,为了能让其他人可以方便的获取李雷的“网络身份证书”,证书库就显得非常必要了。
在PKI机制中,放在“网络身份证书”中的密钥可以被任意自由分发,这里的“证书中的密钥”被叫做“公开密钥(Public Key)”,与此对应,证书持有人本人保管的那个“私人的密钥”就称作“私有密钥(Private Key)”。
如上文提到,“公开密钥(Public Key)”是放在“网络身份证书”中的,所以用什么样的方式去分发“网络身份证书”都没有关系。放到U盘里给别人,或者放到网上让人下载,或者用邮件发送都是可以的。
按照上面说的,我们使用包含“网络身份证书”中的公开密钥去给通信内容加密,但是这个“网络身份证书”真的可以被信任吗?说到底,这个“网络身份证书”也就是普通的文件而已,不像货币(或者公民身份证)那样,本身有着特殊的材质或者物理上的防伪措施。
而认证机构所用的证书生成器说到底也就是一个应用软件而已,如果搞到这个软件,谁都可以发行“网络身份证书”,所以在技术上来看,伪造“网络身份证书”也是非常简单的。所谓假的“网络身份证书”,比如有一个所谓的“李雷的网络身份证书”,但是如果认证机构的证书生成器将“韩梅梅的公开密钥”替换了其中“李雷的公开密钥”,那么,其他用户发给李雷的信息,韩梅梅可以使用自己“私人的密钥”解密,李雷反而用自己“私人的密钥”不能解密了。
这样看来,认证机构就至关重要了,认证机构的可信度,直接与证书的可信度挂钩,也就是与整个PKI机制的可信度息息相关。
关于认证机构的权威性和可信度的问题,其实是一个社会基础设施建设的话题了。比如,在我们国家,认证机构基本都是有国家主导建设,比如上海CA,广东CA,深圳CA,CFCA等各地的CA机构。
通过以上要点的说明,相信大家已经明白,PKI体系是为保障网络上用户身份的确认以及内容加密传输而设计的,而在实际应用中,不仅仅我们今天说到的数字签名是基于此体系来设计的,我们熟知的HTTPS加密传输协议,也是基于PKI体系而设计的。
其中涉及到的“公开密钥”以及“私人的密钥”到底是什么呢?
公开密钥加密(Public-key cryptography):也称为非对称式加密,即密码学的一种算法,它会有两个密钥,一个是公开密钥,一个是私有密钥,其特性如下:
若用公钥加密,则只能用对应的私钥进行解密,若使用私钥加密,则只能用对应的公钥进行解密。公钥可以公开,任意向外发布,私钥不可以公开,必须由用户自行严格保管,绝不透过任何途径向任何人提供,也不会透漏给被信任的通信的另一方。
通常我们使用公钥加密,用私钥解密,如上面介绍的加密通信。而在数字签名中,我们使用私钥加密(相当于生成签名,由于私钥仅有本人持有,也即说明电子签名制作数据属于电子签名人专有),公钥解密(相当于验证签名,能用某人的公钥解密,说明加密一定是用持有人的私钥来做的)。
首先我们来看一张图:
这张图可以算是一份电子文件的数字签名与传输过程的简化版,下面简要描述一下:
假设李雷与韩梅梅要签署一份合作协议,
看完上面电子签文件的签名及加密传输过程,大家一定产生了不少疑问:
解答这3个问题,首先我们需要了解Hash值的特点,非对称加密以及对称加密的特点,然后我们需要弄清楚,电子签系统授权使用用户的“私人的密钥”是否违背了“私钥不可以公开,必须由用户自行严格保管”的要求。
Hash值是基于数学上的Hash算法得出的,任意长度的数据通过Hash算法的计算,最终都可变为固定长度数据输出。我们平时提到的哈希算法、散列算法、摘要算法等其实都是Hash算法的别名,所谓的哈希值,散列值,摘要值,特征值等等都可算作Hash值的别名。
在数学上,Hash算法有一些独有的特点:
其实上面我们已经有介绍过非对称加密,即我们的公开密钥加密算法,它的特点是加密与解密用的是不同的密钥,最大的好处即传输密文时无需再传递密钥,因为解密的密钥就在接收方“自己的手上”,当然它也有缺点,即其加密的效率很低,随着数据量增大,加解密要消耗很大的计算资源且速度很慢,此时,对称加密的好处就体现出来了。
对称加密是相对非对称加密而言的,它的加解密都使用同一个密钥,这就意味着密文传给对方时,密钥也必须传给对方,同样,它也有自己的优点,即加密的效率很高,对于数据量大,其效率要远远好于非对称加密。
通过以上的介绍,相信大家应该明白了为什么要对文件的Hash值做“签名”,而不是直接对文件做“签名”了,因为这里的“签名”要用“私人的密钥”做非对称加密计算。
另外,大家理解了Hash值的第一个特点相信也就自然明白了其可以作为判定文件未发生变动的原因。
目前网络上加密传输数据基本上都是这样混合使用非对称加密算法与对称加密算法,充分发挥他们的优点,所谓扬长避短。
关于电子签系统是否可以使用用户授权的“私人的密钥”,这里的答案是肯定的,虽然电子签系统作为程序,拿到了这个“私人的密钥”,但是这个是用户登录电子签系统授权的操作,电子签系统只需严格按照此授权规范来使用“私人的密钥”,同时通过制度约束此“私人的密钥”绝不透过任何途径向任何人泄露,包括电子签系统的管理人员以及开发人员,则依然没有违背“私钥不可以公开,必须由用户自行严格保管”的要求。
最后,大家可能会问,李雷在电子签系统里是如何获得韩梅梅的“公开密钥”以及韩梅梅是如何获取到李雷的“公开的密钥”的?
上面说过,在认证机构获取到的“网络身份证书”中会包含这个证书持有人的“公开密钥”,就上面的示例来看,由于李雷需要签署,其一定是之前向认证机构申请获取了“网络身份证书”的,可是如果此时韩梅梅还未申请过“网络身份证书呢”?
在电子合同的实际应用中,除了上面所述的情况外,一个用户获取的“网络身份证书”可能会过期或者被吊销,导致“网络身份证书”中的公钥发生变化(此时私钥也一定会发生变化,因为此公私钥总是成对出现),这会直接影响用其之前公钥加密过的文件无法解密等问题。
所以在真实的电子签系统实现中,会采用双证书,即一个用户会用到两个证书,一个证书用于确认其真实身份,也即“网络身份证书”(需要认证机构颁发),一个证书仅用于加密,称为加密证书(用于对“对称密钥”进行加密,电子签系统即可生成),都与用户账号绑定。
现在我们再来看上面说的问题,李雷在电子签系统中确认要给韩梅梅发送合作协议文件时,电子签系统即会为韩梅梅创建账号,此时也为其生成加密证书,即一对用于加密的公私钥,公钥可让李雷获取使用,私钥仅韩梅梅自己在系统中授权使用。
李雷在签名前必须获取到自己的“网络身份证书”,所以李雷在电子签系统提交真实身份资料被确认后,电子签系统同时为其生成一对用于“签名”的公私钥,其中私钥仅李雷自己在系统中授权使用,公钥和确认后的认证资料一并提交给认证机构用于申请“网络身份证书”,认证机构审核确认后,颁发“网络身份证书”(包含了提交的公钥和真实身份资料的部分信息)给到电子签系统,电子签系统将其与此李雷账号绑定。
实际上,李雷在做“签名”时,为了在表现上更接近传统纸质合同的效果,电子签系统会将李雷的手写签名外观图片也合并到协议文件里,另外还会将其“网络身份证书”也合并至协议文件中。然后针对这所有的数据进行Hash运算,取得Hash值以后,由李雷授权电子签系统使用其用于签名的私钥进行“签名”。所以当韩梅梅收到协议文件并进行解密后,其中是有李雷的“网络身份证书”的,自然获取到了其签名证书中的“公开的密钥”。
以上我们提到了认证机构以及“网络身份证书”,那么在实际实现时,到底谁可以做这个认证机构,“网络身份证书”具体又是什么样的呢?
在我们国家,认证机构就是由国家主导建设的CA机构,具备权威性,比如上海CA,广东CA,深圳CA,CFCA等各地的CA机构。
由他们颁发出来的“网络身份证书”即数字证书。以下以上海CA颁发的事件型证书与长期证书的简图来说明数字证书所包含的主要信息以及验证逻辑。
首先我们可以看到,数字证书里至少包含:认证主体的名称,认证主体的签名公钥,证书发布者(上海CA)的名称,证书发布者的签名。其实在数字证书中应当还会有证书有效期等其他信息。
由于数字证书上有上海CA的“签名”(我们可以再回顾一下签名的过程,即这个证书由上海CA用自己的签名私钥对相关数据的Hash值做过加密的),当我们通过获取上海CA自己的数字证书,拿其中的签名公钥,解密了此“签名”数据,则可确认,此证书的确由上海CA颁发。
大家可能会问,上海CA自己的数字证书又是由谁来发布,怎么信任呢?其实是一样的验证过程,只是我们会发现,上海CA自己的数字证书上发布者的签名是仍是上海CA自己签署上去的(一样通过其签名公钥验证一下),这种证书我们称为根证书,对于根证书的信任,是因为我们信任上海CA,上海CA的公钥我们可以通过线下确认,事实上不可能伪造。
由此我们可以看到数字证书的一个信任链,即我们会逐层验证直到对根证书的信任。
我们再来看上海CA长期证书简图:
其中不同点在于,针对上海CA颁发的长期证书,其中上海CA的签名证书并非由自己颁发,而是由WebTrust为其颁发的数字证书,而WebTrust的证书由其自己签名颁发,才是根证书。WebTrust是国际CA机构,具备权威性,其根证书被很多软件默认信任,其中就有Adobe的软件(这也是为什么使用上海CA长期证书签署的文件,在Adobe阅读器中被默认显示签名有效绿色标记的原因)。
最后我们再来看下事件型证书和长期证书对应的签名私钥的保存和使用:
事件型证书:是在用户签署前获取,电子签系统是在内存中为用户生成一对临时的公私钥,将公钥以及认证资料一并给到CA机构获取证书,获取证书后,由用户授权电子签系统使用之前生成的临时的私钥进行“签名”,签名完成后此私钥即不再用了,不会保存在电子签系统的数据库中。下次签署时,会重新生成一对临时的公私钥,再次获取事件型证书进行签署,也就是说,给用户颁发事件型证书,其每次签署都是使用不同的签名“私钥”,也即“一次一密”。
长期证书:用户认证后,电子签系统在内存中为用户生成一对公私钥,同时将公钥以及认证资料一并给到CA机构获取证书,证书获取成功后,电子签系统将这对公私钥加密保存至数据库,虽然由电子签系统保存,但电子签系统需要查看和使用,一样需要经过用户授权。(通过技术以及制度保障,没有管理人员或者开发人员可以直接通过数据库获取到此数据。)
以上所说的事件型证书或者长期证书,都可算作软证书,即签名证书对应的私钥并未存储在单独的硬件设备里。相对应而言,我们平时也会用到UKey(或者上海法人一证通,本质上和UKey是一样的,只不过是由工商部门提供),签名证书存储在Ukey中,其对应的私钥也存储在Ukey之中。
证书有效期说明:仍以上海CA颁发的事件型证书和长期证书为例,事件型证书有效期一般为10分钟,而长期证书有效期通常在1-2年,此有效期指的是数字证书本身的有效期,即在这个有效期内可以使用此数字证书进行签名,过了有效期则不可使用,但在有效期内使用的数字证书,其所代表的真实身份信息一直有效,不因数字证书本身失效而受影响。
传统纸质文件签署,盖章动作以及手写签名,由于有公安备案的印章实体或者是签名人的笔迹,所以理论上拿到真实印章的人盖章的动作或者手写签名本身就已经可以表明是签署人自己在操作了(然而实际上,传统纸质文件上的传统印章和笔迹鉴定,落实下来成本非常高,花费时间长)。
而在电子签系统里,用户持有“私人的密钥”和使用“私人的密钥”盖章或者签名都可以认为是授权完成的,在使用时,如何通过一个操作行为确定是持有人本人的操作,来表达他的签署意愿呢?
这个与大家熟悉的线上支付的操作基本一样,可以通过短信验证码、自己设置的签署密码,或者是自己持有的动态口令卡,UKey的PIN码等等方式来表达,即只要是能确定是账号所有人本人在操作即可。
用户在电子签系统里进行电子签时,为了能够明确签署时间,并且此时间可以被信任,通常电子签系统会同时获取一个时间戳的证书,其中包含国家授时中心的时间以及CA的签名(表明CA对此时间的认可),此时间戳证书信息也会合并到待签文件中。
若电子签服务无法连接外网,则电子签系统无法实时获取时间戳的证书,虽然可以获取本地服务器时间,但是此时间作为用户实际签署时间的公信力会降低。
通过以上的内容介绍,相信大家基本了解了基于PKI体系实现的数字签名是怎样的过程,现在我们再来回顾一下法律上关于可靠的电子签名的解释。
对于可靠的电子签名关键说明如下:
电子签名同时符合下列条件的,视为可靠的电子签名:
在我们实现的电子签系统里,用于签名的“私人的密钥”即电子签名制作数据,因仅用户授权可用,可认为是属于电子签名人专有。
在签署时,通过用户签署意愿的确认,可认为电子签名制作书,也即用于签名的“私人的密钥”仅由电子签名人控制。
在签署的内容里是包含有签名人的数字证书的,通过证书中的公钥若能解密签名数据,则可说明电子签名本身未发生改动,反之,则说明电子签名有发生改动。
针对文件内容重新计算的Hash值若与解密签名数据后得到的Hash值一致,则可说明数据电文内容和形式未发生改动,反之,则说明数据电文内容和形式有发生改动。
当事人也可以选择使用符合其约定的可靠条件的电子签名。
综上来看,基于PKI体系实现的数字签名已满足法律意义上可靠的电子签名的关键要求。
1.《5分钟让你知道什么是PKI》,链接:https://zhuanlan.zhihu.com/p/30136885
2.Wikipedia上的Public Key Infrastructure,链接:https://en.m.wikipedia.org/wiki/Public_key_infrastructure