小微企业电子合同防篡改实现#
1. 背景#
传统纸质合同公章,利用了公章在公安局备案和复刻公章的难度,从而保证合同难以伪造。自从口罩时期,不方便面签合同,电子合同开始流行。
小微企业非常欢迎电子合同,可以节省面签合同的时间和金钱成本。然而没有专业的电子签章系统,一来系统不便宜,二是考虑客户接受程度。签个合同要么下个app,要么注册个系统,可能就使用一次,客户不情愿配合注册或者下载app。于是,采用和专业电子签章看着很像的公章图片直接作为电子合同公章使用。方便是方便了,但是公章图片存在较大的伪造风险,从而引起不必要的法律纠纷。
按照当前的法律,法律对合同的形式认可相对宽松,盖章扫描件、甚至电子版PDF格式文件,都可以作为合同文件使用,但同时要求需记录双方缔约过程。其实缔约过程留痕,也非常简单,例如使用电子邮件,明确回复确认合同。利用邮箱的安全性,基本可以达到和纸质合同相当的伪造难度。
然而,小微企业的客户们往往不习惯使用邮件,通常只接受使用微信进行签合同,钉钉、飞书、QQ都基本不用。A把草拟合同电子版发给B,B收到合同后,同意后,打印盖章,再微信回复给A,这样就算签订合同了。微信聊天记录碎片化严重,整理聊天记录也比较混乱。另外换手机、手机空间清理等情况会造成签合同记录丢失。此时如果合同对方篡改了合同,或者图片公章泄漏被冒用,怎么证明合同是双方真实意愿?无法提供有力证据证明合同的有效性,造成不必要的法律诉讼风险。
例如下面的文档,高清印章很容易通过pdf编辑工具提取到公章图片原件。

2. 解决方案#
解决方案需要满足下面几个条件:
必须免费,小微企业不愿花钱
迎合客户习惯,尽量不改变客户习惯,邮件虽好,客户不喜欢。保持使用使用微信传递合同。
能防篡改
能防止图片公章冒用
3. 实现方法#
电子版合同转成JPG 图片,适当降低分辨率,然后再转PDF。基本防止抠图冒用公章图片。
设置文件修改密码,只允许客户打印,禁止复制粘贴
添加自签名数字证书签名,即使被破解了修改密码,只要修改或者另存,数字签名丢失,只需验证对方手中的电子合同的数字签名,就有效防止篡改和伪造
4.数字签名和密码保护具体步骤#
4.1创建自签名数字证书#
有多种方法,例如macOS可以使用钥匙串工具创建数字证书
操作步骤很简单,这里不再赘述。
或者可以使用openssl命令行工具。
4.1.1 生成4096位私钥#
openssl genrsa -aes256 -out sec.key 4096
Enter pass phrase for sec.key:
Verifying - Enter pass phrase for sec.key:
4.1.2 创建公钥#
openssl rsa -in sec.key -out pub.key -pubout
4.1.3 创建证书签名请求csr#
openssl req -new -key sec.key -out csr.csr
4.1.4 创建证书crt#
openssl x509 -req -days 365 -in csr.csr -signkey sec.key -out cert.crt
4.1.5 创建pkcs12文件#
openssl pkcs12 -export -in cert.crt -inkey sec.key -out cert.p12
创建完成,文件结构如下:

4.2 安装证书#
windows 系统直接双击,安装证书即可。
macOS 系统,Firefox 浏览器,导入证书。

4.3 准备文档#
创建文档,导出JPG格式,适当降低分辨率,然后转成PDF。
4.3 添加密码保护#
在Libreoffice中,文件 > 数字签名 > 签署现有的pdf,打开准备好的pdf文件。
文件 > 导出为 > 导出为pdf 设置密码保护,禁止复制粘贴等操作

4.4 添加数字签名#

4.5 最终效果#
4.5.1 复制保护#
maccOS系统下,使用预览查看文档属性,编辑不可用,所有者密码保护
(虽然转成了图片,但是macOS系统集成了OCR识别,仍然可识别为文字)尝试复制内容,需要输入密码才能复制

4.5.2 检查数字签名#

4.5.3 修改签名丢失#

5 总结#
传统的纸质合同,利用公章的难伪造保证真伪,而图片公章容易抠图复制,伪造难度极小。所以远低于纸质公章的安全性。我们通过加盖数字签名公章,只要验证一下数字签名是否正确,就可以判断是否被篡改过。可以达到甚至超过纸质公章相同的防伪强度。当然前提是,不要在网上随便泄漏数字签名私钥。