前言 随着通信、互联网技术的发展,人们接触到的信息纷繁复杂,信息的真真假假让人难以辨认。在严肃性场合,比如电子合同、电子证照等,必须有一种手段确保信息的完整性和真实性,这时签章就派上了用场。
签章的技术原理并不复杂,签章的基石就是非对称加密算法。但是围绕着签章又衍生出一些列概念,比如证书、电子印章、PKI等,这些概念又对应着一些列国家标准。如果不对这些技术做细致的剖析,总感觉是雾里看花,难以准确把握这些概念,难以对整个签章流程有清晰的认识。
本文不泛泛而谈概念;而是从实践、具体数据、编程开发等讲起,更加贴近实战的角度入手,这样更容易理解。本人为开发人员,已独立开发了制证书、制电子印章、ofd签章验章、与加密机对接等程序,这些程序都达到商用级别;通过这些程序的开发也加深了我对签章的理解;经过大量的开发,终于从迷雾中走出,再回首,走过的路曲曲折折;希望本文能更好的加深你对签章的理解。
签章基石:非对称加密算法
常用的非对称加密算法有:RSA、ECC。国标商密算法时SM2,大的范畴属于ECC。
非对称加密算法会产生一对公钥和私钥。如果对一段数据用公钥加密,私钥解密,这就是加密过程;反之,就是签名。要把这加密和签名这两个概念吃透;
加密:我手里有一段明文,我想把这段明文加密发送,并且只能有特定的接受者解密。公钥是公开,私钥只有一个人拥有。如果用公钥加密,只能有私钥拥有者才能查看,这就是加密过程。
签名:我手里有一段明文,用我的私钥对这个明文签名;任何拥有对应公钥的人都可以验证这段明文是我签署的。签名文件是不怕公开,只是需要证明是谁签名的,数据是否完整即可。
我怎么相信这个公钥是你的?
这里有个术语Public Key Infrastructure(PKI),即公开密钥基础设施;就是解决这个问题的。PKI的主要目的是用来发行“身份证明书”,证书中关键信息就是公钥。证明书的文件构造是一种叫做 X.509 的协议规定的。以下是证书的定义:
证书包含公钥、证书持有者的一些信息。这个证书是通过权威的CA做签名,确保证书不被伪造。关于认证机关的权威性和可信度的问题,其实是一个社会基础设施建设的话题了。在很多国家认证机关都是由政府在主导建设,常常被视作一个社会性基础设施的一个环节。
为了便于解释概念,称为刚才的签署的证书为个人证书;下一个问题出现了:我怎么知道这个证书是由权威的CA签署的。其实CA本身也有证书,需要获取CA的证书去验证个人证书的真假。新问题又来了,我怎么知道CA的证书是真实的?这就是鸡生蛋蛋生鸡的问题。最终我们需要从一个可靠的来源获取CA的证书,就认定这个证书是可靠的。
实体印章盖在证书上就是一个图片,电子印章是啥样?也是一个图片?
数字签章就是模拟真实的签章的流程和外观。真实印章盖上后,就可以理解为一个图片;如何验证图片的真伪就依赖图形分析,与原始印章对比。电子印章包含:印章图片、签章人证书、制章人证书等信息;所以电子印章不仅仅包含图片,电子印章的真伪验证不依赖图片,而是数字签名。
总之:电子印章是图片和其他信息的结合体。
签章实体合同时,有盖章这个动作;对于电子印章,怎么盖章?
盖章动作对应私钥签名。私钥签名后的数据格式是怎样的,看下图。国家有对应的标准。
签名后数据包括:电子印章、原文杂凑值等信息。电子印章是包含在签章数据中的;看一个签章后的ofd文件:
Seal.esl这个文件是可有可无的,因为SignedValue.dat这个文件也包含印章文件。
怎么验章?
验章必须的三要素:公钥、原文杂凑、签名值;咱看看这三个数据从哪里获取。这三个数据都可以从SignedValue.dat这个文件获取。
公钥: SignedValue.dat(签章数据)包含 Seal.esl(电子印章),电子印章包含证书,证书包含公钥。
原文杂凑值和签名值:
以上从技术原理上,讲述了签章过程。
如果真的上一套签章系统,流程是怎样的?和谁打交道,买啥设备?
1 加密机生成和保管私钥:
2 从加密机导出证书请求文件,发给CA签名,生成证书;
3 制作电子印章,需要选定制章者和签章者角色。
需要制章者证书、签章者证书、电子印章制作软件、加密机配合,生成电子印章。
4 签章
需要输入电子印章、印章位置、待签文件,通过签章软件实现签章。
后记 本文从原理和实践上,讲述了签章流程。签章基本原理并不复杂,但是签章流程涉及多个环节,为确保每个环节严禁可靠,又衍生出了大量概念。深刻领会这些概念就离不开实践;只有从剖析证书数据、签章后的文件,这些可触摸的数据的入手,才能全面掌握领会签章流程。