我承认,标题有点标题党的意思,但内容应该不会让你失望~
收到好些公众号粉丝的反馈,公众号怎么没有更新了。哭,懒呀。18年,要戒懒。
18年第1篇,还是说说电子签名相关内容。
电子签名,主要通过技术手段和法律手段来做保证其有效性。本篇主要从产品思路,说说电子签名的常用技术手段,普及下电子签名技术,自己也好通过系统梳理加深印象。
我们先先看看,有效的电子签名,需要解决哪些问题:
1、消息的保密性,防止数据被别人读取或泄露;
2、发送人的不可抵赖性,发送人无法否认自己发送过这份文件;
3、消息不可篡改性,发现和防止文件内容被篡改;
4、发送人的身份认定问题,不能有人冒充我发消息;
那我们就来看看,这些问题是如何通过技术手段来有效解决的。
一、对称加密和非对称加密
1、对称加密
要解决消息的保密性,常用的方法是对消息进行加密和解密,在常用的技术有对称加密和非对称加密。
对称加密,很好理解,加密和解密使用同一个密钥。因为使用相同的密钥,所以加解密速度快、效率高。常见的对称密钥算法有DES、3DES、AES等。
例如,小A向小B发送一份合同,他们约定使用对称加密的DES算法,图解如下:
1)在加密合同之前,小A和小B需要约定使用哪个密钥;
2)小A通过约定的密钥加密,小B通过约定的密钥解密;
因使用同一个密钥,需要将密钥给到另一方。如果不考虑将密钥在分发过程中的安全性,其算法的安全性还是有保障的。
拿对称加密中DES算法举例,到目前为止,除了用穷举搜索法对DES算法进行攻击外,还没有发现更有效的办法。而56位长的密钥的穷举空间为256,这意味着如果一台计算机的速度是每一秒钟检测一百万个密钥,则它搜索完全部密钥就需要将近2285年的时间。而3DES(3次DES操作)、AES算法的安全性则更高。由此可见,使用对称密钥对文件进行了加密,基本上不用太担心文件可能泄密。
但实际情况是,密钥的在网络传输过程中常有被拦截和泄露的风险。
同时,如果小A需要和小C、小D、小E…等N个人通讯,小A需要和每个人都约定加解密算法和密钥,运作成本高。怎么办?
而非对称加密恰好能解决这个2个问题。
2、非对称加密
非对称加密,使用的是一对密钥,私钥和公钥。私钥只能由一方安全保管,不能外泄;公钥可以发个任何需要的人。
私钥和公钥的特性有:私钥和公钥成对出现;公钥加密的内容,仅对应的私钥可以解开;私钥加密的内容,仅对应的公钥可以解开。单独的知道公钥或私钥,却没有办法推出另一份密钥。
常见的非对称密钥算法有RSA、DSA、ECC等。
如果由小A生成一对私钥、公钥,小A和小B如何使用这对私钥、公钥互发消息呢?这里存在2中情况。
情况1:小B给小A发送消息,公钥负责加密,私钥负责解密
比如,小B给小A发送合同,他们约定使用非对称加密中的RSA算法。图解如下:
1)在加密合同之前,小A生成一对私钥、公钥,并把公钥放在公开密钥库中,小B和其他人都可以方便的获取;
2)小B通过小A的公钥,把合同加密后发给小A;
3)小A通过自己的私钥,解密合同;
因私钥由小A自己保存,不在网络中传输,所以不存在对称加密中密钥传输问题。
同时,小A把公钥放在公开密钥库中,所有人都可以去申请获得,这就解决了对称加密中小A和很多人通讯中需要频繁约定加密算法和密钥的问题。
情况2:小A给小B发消息,私钥负责加密,公钥负责解密
小A使用自己的私钥加密消息,小B使用公钥解密。一方面能确保信息不被泄露,另一方面还能证明消息是小A发的,小A不能抵赖,因为只有小A有私钥。这就是签名的过程,后面在“消息摘要和电子签名”中进一步说明。
这两种情况,不管谁给谁发消息,对称加密的2个问题,在非对称加密这里都能得到解决。
但是,非对称加密也有自己的缺点。因为非对称加密的复杂性,加解密速度偏慢、效率偏低,如果加密的文件比较大,效率会很低。
要解决这个问题,一种巧妙的方法是结合对称加密和非对称加密来解决。
即对“对称加密的密钥”进行非对称加密,然后传送给需要它的人,保证“对称加密的密钥”传输的安全性。接收人在安全获得“对称加密的密钥”后,再对消息进行对称加密解密,从而保证消息的安全和加解密效率。但是使用对称加密,仍存在小A向多方通讯而需要频繁约定“对称加密的密钥”的问题。
另一种方法是,在非对称加密中引入信息摘要,见下述。
二、消息摘要和电子签名
消息摘要,是指把消息作为参数,经过哈希函数(Hash)的计算后,得到的散列值。这个值是固定长度的值,不因消息的长短、大小而变化。
消息摘要有如下几个显著特点:
1)无论输入的消息有多长,计算出来的消息摘要的长度总是固定的;
2)用相同的摘要算法对相同的消息进行计算,其结果必然相同;
3)用相同的摘要算法对不同的消息进行计算,其结果必然不同。虽然理论上存在“碰撞”(即2个不同的消息,得到的消息摘要相同),但实践中遇到概率极低;
4)消息摘要函数是单向不可逆的,即只能进行正向的信息摘要,而无法从摘要中恢复出任何的消息。即一旦形成摘要,原文不可再从摘要中恢复;
5)消息摘要计算过程中不需要密钥,免去了密钥的管理和分发;
消息摘要是固定长度,非常小,MD5输出的信息摘要只有128bit,SHA1输出的信息摘要只有160bit,通过对小容量的消息摘要进行非对称加密,速度和效率问题就解决了。
同时,如果消息在途中改变了,则接收者通过对“收到消息后新产生的摘要”与“原摘要”比较,就可知道消息是否被改变了。这个前提是,消息和消息的摘要需要发给接收者。
常用的消息摘要算法有MD5和SHA1。
比如,小A向小B发送合同文件,约定通过非对称加密+消息摘要算法进行,图解如下:
小A先生成一套私钥、公钥:
1)小A对合同进行一次摘要算法,得到合同的摘要X
2)小A然后用自己的私钥,再对合同摘要X进行加密,得到合同摘要X的密文
3)小A最后将自己的公钥、合同摘要X的密文、合同一起发给小B
小B收到消息后,要进行3个步骤的处理:
1)小B先通过小A的公钥,对合同摘要X的密文进行解密,得到原始合同摘要X
2)小B在使用和小A同样的摘要算法,将接收到的合同进行一次摘要,得到合同摘要X’
3)最后,比较合同摘要X和X’,看他们是否一致。如果一致,说明合同未更改;如果不一致,说明合同发送过程中有被更改。
对合同的摘要进行私钥加密,就是前面提到的数字签名。而对数字签名的解密、计算摘要、对比摘要就是验签。数字签名技术是消息摘要技术和非对称加密技术的综合应用。
由上可以知道,电子签名技术中,由于使用私钥加密,私钥只有发送人持有,发送人无法否认自己发送的消息;同时,通过对固定长度的消息摘要加解密,提升了加解密效率;通过对2个摘要进行对比,能有效检查和防止消息篡改。还有,使用非对称加密技术,也能保证信息传输的保密性。
至此,电子签技术在保密性、不可抵赖性、不可篡改性、加解密效率提升上都得到了满足。
但是,这里还有一个问题:我们知道,小A的公钥存放在公开密钥库中,供别人获取,小B如何识别小A的公钥是小A的而不是小S的呢?如果小S伪装成小A的公钥供大家获取,该怎么办呢?小A的公钥说自己确实是小A的,这可信吗?
这是数字证书要解决的问题。
三、CA机构和数字证书
为了证明小A的公钥确实是小A的,这是需要一个权威的第三方机构,来对小A的公钥及相关数据进行认证,来证明该公钥确实是小A的。这个权威的第三方机构就是“CA数据证书认证中心”,简称CA机构,这个证明文件,就是数字证书或叫CA证书。
类似现实生活中,需要“公安局”给你发一个“身份证”,来证明你就是你。所以CA证书也被称为你的“网络身份证”。
CA机构如何针对小A的公钥等信息认证呢?其实也是前面说到的数字签名技术(使用私钥对消息或消息摘要进行加密)。
仍以小B获取小A的公钥为例,图解如下:
CA机构自己也有一对私钥、公钥,私钥自己保存,公钥通过权威信道(如官网、官方媒体、权威媒体等方式)公布。
CA机构使用自己的私钥加密小A的数据包,小A的数据包包括小A的公钥、公钥算法、公钥版本号、公钥有效期、小A的身份信息等。这个数据包,我们称为PKCS10数据包。
包含小A公钥的数据包被CA机构加密的结果称为数字证书,数字证书对于小A的身份认证具有权威性,能证明该公钥确实是小A的。
如果小B想要获得小A的公钥,只需拿CA机构的公钥进行解密,就可以了。
至此,一次完整的电子合同签名、验签就完成。图解如下:
不知大家发现了没有,这里其实这里还有2个问题。
1、怎么传递CA的公钥给小B?
上面有提到,通常是通过权威信道,比如CA机构官方网站申请获得。
2、怎么确保CA的公钥本身安全和真实性呢?
其实数字证书的信用是一级一级背书的,最顶级的证书预装在操作系统、浏览器中,这里不在继续展开。你可以认为CA机构就是顶级证书,有法律和国家为CA机构背书。
目前市场上第三方电子签名厂商提供的电子签名服务的,核心是通过电子签名技术(也可成为PKI技术),结合时间戳技术、第三方存证技术,来提供可靠的电子签名服务。
四、小结
我们再回到文章开头提到的,有效的电子签名需要解决几个问题,是否得到有效解决。
1、保密性,防止数据被别人读取或泄露
——通过加密技术(对称加密或非对称加密)解决;
2、不可抵赖性,发送人无法否认自己发送过这份文件
——通过签名技术(使用私钥对消息或消息摘要进行加密)解决;
3、不可篡改性,防止文件内容被篡改
——摘要技术(对比新生成摘要和解密出的摘要)解决;
4、发送人的身份认定问题
——通过数字证书(本质是也是签名技术)来解决;
电子签名所用的密码学,是门学科,是个很复杂的东西。以上只是基于野路子的产品思维的简单梳理,如有不准确之处,欢迎批评指正。
评论(0)