↑ 点击上方“蓝字”关注更多文章

前言

最近在开发关于PDF合同文档电子签章的功能,大概意思就是在一份PDF合同上签名,盖章,使其具有法律效应。签章有法律效应必须满足两个条件:

在纸质合同中,由于签名字迹的不可复制性,盖章的唯一性以及纸质合同对涂改的防范措施(比如金额用大写)可以保证上述两点,从而具备法律效应自签名证书,那么PDF合同如何保障呢?两个重要的概念就是数字签名和数字证书。这项技术广泛运用于文件认证,数据传输等。

为了弄懂这些,我花了2天时间从加密算法开始,到数字签名和CA证书,最后再重新认识下https的原理。

非对称加密

加密我了解的不多,只知道有这么两种算法:对称加密和非对称加密。

数字签名

接着聊上面发邮件的例子,假设A用自己的私钥对Email加密发送,这样还存在啥问题吗?当然,它至少存在下面2个问题:

自签名证书_个人代码签名证书_代码签名证书与数字证书

看完这个过程,是不是觉得数字签名不过如此。其实就是利用算法(不一定是非对称算法)对原文hash值加密,然后附着到原文的一段数据。数字签名的作用就是验证数据来源以及数据完整性!解密过程则称为数字签名验证。

不过先别着急,我在梳理数字签名流程时候有下面几点疑惑,不知你也是否一样?

1.如果中间人同时篡改了Email正文和数字签名,那B收到邮件无法察觉啊。

答案:数字签名的生成需要对方私钥,所以数字签名很难被伪造。万一私钥泄漏了呢,不好意思,你私钥都能弄丢了那这篇文章当我白写。(私钥绝对保密不参与传输)

2.公钥是公开的并且可以自行导入到电脑,如果有人比如C偷偷在B的电脑用自己公钥替换了A的公钥,然后用自己的私钥给B发送Email,这时B收到邮件其实是被C冒充的但是他无法察觉。

答案:确实存在这种情况!解决办法就是数字证书,一环套一环请接着看。

数字证书

上面第2点描述的安全漏洞根源在哪?就是A的公钥很容易被替换!我举个更生动的例子引出“数字证书”:

1.首先A去找”证书中心”(certificate authority,简称CA),为公钥做认证。证书中心用自己的私钥,对A的公钥和一些相关信息一起加密,生成”数字证书”(Digital Certificate):

自签名证书_个人代码签名证书_代码签名证书与数字证书

2.A在邮件正文下方除了数字签名,另外加上这张数字证书

个人代码签名证书_自签名证书_代码签名证书与数字证书

3.B收到Email后用CA的公钥解密这份数字证书,拿到A的公钥,然后验证数字签名,后面流程就和图1的流程一样了,不再赘述。

和数字签名一样我在梳理这个流程时有下面几点疑惑:

举个栗子

上面一直在说虚拟场景,下文举个实际例子看看数字签名+数字证书如何验证文件的来源,以及文件的完整性。比如下载文件:我们开发中一般是服务端给文件信息加上md5,客户端下载完成后校验md5来判断文件是否损坏,这个其实就是简单的校验机制,而很多正规企业比如google都会给官方软件签署数字签名和证书,而windows已经预置了很多CA根证书:

然后看下我之前从网上下载的Chrome.exe,右键属性,通过鼠标点击一步验证:

代码签名证书与数字证书_自签名证书_个人代码签名证书

Google Inc就是google从CA中心申请的数字证书。这样看来,这个软件确实来源于google官方自签名证书,并且文件完整。接下来我干点坏事,用notepad打开这个exe文件并且篡改里面的内容(修改二进制数据,09 改为33),保存:

再看下数字签名还正常吗?

代码签名证书与数字证书_个人代码签名证书_自签名证书

文件被篡改导致数字签名无效,数字证书没有问题。

限时特惠:本站每日持续更新海量设计资源,一年会员只需29.9元,全站资源免费下载
站长微信:ziyuanshu688