CN100334518C - 文档数字签名及其实现电子印章和手写签名的方法 - Google Patents
文档数字签名及其实现电子印章和手写签名的方法 Download PDFInfo
- Publication number
- CN100334518C CN100334518C CNB2005100276493A CN200510027649A CN100334518C CN 100334518 C CN100334518 C CN 100334518C CN B2005100276493 A CNB2005100276493 A CN B2005100276493A CN 200510027649 A CN200510027649 A CN 200510027649A CN 100334518 C CN100334518 C CN 100334518C
- Authority
- CN
- China
- Prior art keywords
- signature
- sax
- xml
- incident
- document
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Storage Device Security (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明涉及一种文档数字签名及其实现电子印章和手写签名的方法,其中该数字签名方法包括安全环境初始化操作、生成数字签名操作和数字签名的验证操作;该电子印章的方法包括验证该签名或者签章有效、获得当前文档需要签章的位置、选择印章、插入印章图片并对文档进行数字签名;该手写签名的方法包括验证该签名或者印章有效、启动手写输入设备并初始化、从剪贴板获得手写输入信息、选定插入手写签名的位置、将手写输入信息插入文档中、获取当前用户持有的证书、对文档进行数字签名。采用该种方法,安全性较高,手写签名与数字签名紧密绑定在一起,共同构成了一个完整的计算机文档安全认证体系,增强了适用范围,同时对用户其操作过程非常方便快捷。
Description
技术领域
本发明涉及计算机信息安全领域,特别涉及计算机文档数字签名领域,具体是指一种文档数字签名及其实现电子印章和手写签名的方法。
背景技术
在现代生活中,计算机越来越成为人们必不可少的工具,而同时对于计算机信息安全的要求也越来越高,特别是对于计算机文档数字签名和身份认证来说,更是应用的非常广泛。
但是在现有技术中,对于文档的数字签名,还是采用传统的方式进行,而且对丈档进行数字签名会改变文档本身的内容和属性,因此潜在一定的不安全因素,而且数字签名的效率较低;同时传统的电子印章安全性很差,仅仅是一个图片文件,没有和数字签名结合起来;并且缺乏灵活的手写签名功能,给人们的生活带来了一定的不便。
发明内容
本发明的目的是克服了上述现有技术中的缺点,提供一种安全性较高、不会改变文档本身内容、不易破解、使用方便快捷的文档数字签名及其实现电子印章和手写签名的方法。
为了实现上述的目的,本发明的文档数字签名及其实现电子印章和手写签名的方法如下:
该文档数字签名的方法,包括安全环境初始化操作、生成数字签名操作和数字签名的验证操作,其主要特点是,所述的安全环境初始化操作包括以下步骤:
(1)创建系统安全上下文环境;
(2)判断是否采用系统默认证书库;
(3)如果是,则进行将系统默认证书库添加至密钥管理器的操作;
(4)反之,则进行将用户证书添加至密钥管理器的操作;
所述的生成数字签名操作包括以下步骤:
(1)数字签名之前,XML导出器将XML简单API事件SAX直接传递给SAX写入器;
(2)当XML导出器需要输出签名元素时,创建SAX事件保持器,插入到XML导出器和SAX写入器之间,SAX事件保持器作为过滤器;
(3)XML导出器创建XML文档构建签名模板,该模板是一个没有摘要值和签名值的签名元素;
(4)XML导出器为该模板创建签名产生器;
(5)系统进行被签名元素和签名模板的收集操作;
(6)当需要签名的元素保存完整后,SAX事件保持器通知签名产生器收集结束;
(7)签名产生器知道被签名元素和签名模板都已获得,然后调用XML签名器进行数字签名操作;
(8)签名产生器请求SAX事件保持器释放缓冲区数据,移除阻塞点;
(9)SAX事件保持器移除阻塞点,并请求XML文档将签名模板的所有SAX事件传递给SAX写入器;
(10)XML导出器从SAX链中移除SAX事件保持器;
所述的数字签名的验证操作包括以下步骤:
(1)解析签名元素之前,XML导入器直接从SAX解析器获得SAX事件;
(2)解析过程中出现签名元素,则在XML导入器和SAX解析器之间创建SAX事件保持器;
(3)XML导入器创建签名验证器;
(4)系统进行被签名元素和签名模板的收集操作;
(5)在签名模板和被签名元素都收集完成后,签名验证器触发XML签名器进行签名验证操作;
(6)签名验证器将验证结果传递给XML导入器,并请求SAX事件保持器释放所缓冲数据;
(7)XML导入器从SAX链中移除SAX事件保持器。
该文档数字签名的方法的将系统默认证书库添加至密钥管理器的操作包括以下步骤:
(1)将系统密钥库添加至密钥管理器中;
(2)将系统根目录下的密钥库添加至密钥管理器中;
(3)将系统值得信任的密钥库添加至密钥管理器中;
(4)将系统CA库添加至密钥管理器中。
该文档数字签名的方法的将用户证书添加至密钥管理器的操作包括以下步骤:
(1)将对称密钥添加至密钥管理器中;
(2)将非对称公钥添加至密钥管理器中;
(3)将非对称私钥添加至密钥管理器中。
该文档数字签名的方法的系统进行被签名元素和签名模板的收集操作包括以下步骤:
(1)XML导出器请求SAX事件保持器缓冲后面的输出元素,而且建立阻塞点,阻止向SAX写入器传递SAX事件;
(2)XML导出器将签名模板作为SAX事件传递给SAX事件保持器;
(3)SAX事件保持器不再向SAX写入器传递SAX事件;
(4)SAX事件保持器将SAX事件传递给XML文档,请求XML丈档缓冲签名模板;
(5)当签名模板完全收集后,SAX事件保持器将告知签名产生器;
(6)签名元素之后的SAX事件仍然传递给SAX事件保持器进行缓冲;
(7)在传递需要签名的元素之前,XML导出器请求SAX事件保持器缓冲即将传递的元素;
(8)SAX事件保持器传递SAX事件给XML文档并且请求XML丈档保存这些元素;如果有多个缓冲元素包含相同的数据,那么SAX事件保持器确保事件在内存中只保存一次;
(9)当需要签名的元素保存完整后,SAX事件保持器通知签名产生器收集结束。
该文档数字签名的方法的XML签名器进行数字签名操作为:
XML签名器读取XML文档内的文档对象模型DOM树,计算签名值,并且根据计算出的结果给模板中的摘要和签名赋值。
该文档数字签名的方法的系统进行被签名元素和签名模板的收集操作包括以下步骤:
(1)XML导入器请求SAX事件保持器缓冲当前SAX事件的签名元素,作为签名模板;
(2)SAX事件保持器接受来自SAX解析器的签名元素过程中,将这些SAX事件传递给XML文档缓冲,同时将签名元素传递给XML导入器;
(3)XML导入器通过分析签名元素,获得所有引用URI;
(4)XML导入器告诉签名验证器签名内有多少引用;
(5)当签名模板完全缓冲,SAX事件保持器通知签名验证器收集结束;
(6)XML导入器移出SAX事件保持器,因此签名元素之后的SAX事件又直接从SAX解析器直接传递到XML导入器;
(7)XML导入器根据引用的URI检测SAX事件流中的被签名元素;
(8)当被签名元素标记开始时,XML导出器重新和SAX事件保持器建立连接;
(9)XML导入器请求SAX事件保持器从当前SAX事件开始缓冲元素;
(10)SAX事件保持器接受来自SAX解析器的被签名元素过程中,将这些SAX事件传递给XML文档缓冲,同时将SAX事件传递给XML导入器;
(11)当元素完全缓冲,SAX事件保持器通知签名验证器收集结束。
该文档数字签名的方法的XML签名器进行签名验证操作为:
在XML签名器内,读取XML文档内的文档对象模型DOM树,签名被验证。
该使用上述的方法实现文档电子印章的方法,其主要特点是,所述的方法包括以下步骤:
(1)如果文档存在签名或者签章,需要验证该签名或者签章有效;
(2)在验证通过后,进行电子印章的后续工作;
(3)获得当前文档需要签章的位置;
(4)根据用户操作选择印章,即获得插入到文档中的印章图片和进行数字签名的证书;
(5)插入印章图片,同时使用所述的文档数字签名方法对文档进行数字签名;
(6)定时器对印章状态进行监控,定时器触发,验证文档签名;
(7)如果签名依然有效,定时器重新开始监控;如果签名失效,那么印章图片自动消失,定时器停止工作。
该使用上述的方法实现文档手写签名的方法,其主要特点是,所述的方法包括以下步骤:
(1)如果文档存在签名或者印章,需要验证该签名或者印章有效;
(2)在验证通过后,进行手写签名的后续工作;
(3)启动手写输入设备,初始化目前状态为手写输入状态;
(4)用户手写输入结束,从剪贴板获得手写输入信息;
(5)根据用户操作选定插入手写签名的位置,将手写输入信息插入文档中;
(6)从用户证书管理中获取当前用户持有的证书;
(7)使用所述的文档数字签名方法进行数字签名。
该进行文档手写签名的方法的手写输入信息是以图片的形式保存在剪贴板中的信息。
采用了该发明的文档数字签名及其实现电子印章和手写签名的方法,由于其数字签名本身采用了将证书信息与原有文件分成两个独立文件的方法,使得这种方法在不影响原有文档结构情况下进行签名与验证,同时该数字签名信息不易被篡改,安全性较高;不仅如此,采用上述方法可以将传统的电子印章、手写签名与数字签名紧密绑定在一起,共同构成了一个完整的计算机文档安全认证体系,对于保证计算机文档的安全起到了一定作用,而且该方法可以允许用户自由选择电子印章的形式并可以将用户手写输入的签名作为图片进行数字签名,增强了其适用的范围,同时对用户其操作过程非常方便快捷。
附图说明
图1为本发明的安全环境初始化操作中将证书导入安全环境的流程图。
图2为本发明的生成数字签名操作中数字签名对象间的关系示意图。
图3为本发明的生成数字签名操作中各对象间交互的顺序图。
图4为本发明的数字签名的验证操作中数字签名对象间的关系示意图。
图5为本发明的数字签名的验证操作中各对象间交互的顺序图。
图6为本发明的电子印章方法中选择印章的界面示意图。
图7为本发明的电子印章方法操作的顺序图。
图8为本发明的电子印章方法中的印章监控状态示意图。
图9为本发明的电子印章方法中的文档中有多个印章的操作界面示意图。
图10为本发明的电子印章方法中的文档中签名信息操作界面示意图。
图11为本发明的电子印章方法中的查看证书信息操作界面示意图。
图12为本发明的手写签名状态示意图。
图13为本发明的手写签名方法操作的顺序图。
图14为本发明的文档数字签名及其实现电子印章和手写签名的方法中的统一系统调用服务示意图。
图15为本发明的文档数字签名方法的整体流程图。
图16为本发明的实现电子印章方法的整体流程图。
图17为本发明的实现手写签名方法的整体流程图。
具体实施方式
为了能够更清楚地理解本发明的技术内容,特举以下实施例详细说明。
本发明具体实施方式中所涉及的文档由压缩包组成,可以通过压缩工具打开。基本由四个XML文件,Pictures和META_INF文件夹组成。XML文件分别是:content.xml setting.xmlmeta.xml stypes.xml。Pictures用来存储文档包含的图片,签名信息documentsignatures.xml保存在META_INF文件夹中。
(一)数字签名
在进行数字签名说明之前,需要简单介绍XML解析的基本知识。XML的解析通常有两种方案:DOM(Document Object Model)和SAX(Simple API for XML),它们都是为了让程序员不用写一个解析器就可以访问xml丈件信息。DOM可以让你以分层次对象模型来访问储存在XML文档中的信息。DOM生成一棵节点树(以XML文档的结构和信息为基础),XML文档中的文本信息转变成一组树的节点,那么可以通过这棵树来访问信息。SAX不是通过节点树,而是一系列的事件访问储存在XML文档中的信息。SAX会对每一个开始标签和结束标签抛出事件。SAX分析模型能够提供比DOM模型更加优异的性能和利用更少的存储空间。使用SAX,一个应用程序每次只能处理一条标记。如果其它的标记内容在处理的过程中必须被用到,那必须在处理的整个过程保持一种全局状态。因此大部分开发在使用SAX的时候都会创建一个完整的或者部分的DOM树。而保持全局状态正是DOM模型目的的精髓。
本发明所涉及的文档信息全部保存成XML文件格式,因此在在Load一个文件时,采用SAX的方式解析丈档,解析过程中存在一个SAX链,在后面数字签名的说明中,将多次使用这个SAX链。
1、安全环境初始化
请参阅图1所示。首先要将证书载入,既可以通过访问数据库的方式获得用户自己订制的证书,也可以从系统中证书库载入证书。然后创建XML安全上下文环境,既要获得所有需要签名文件的句柄,同时又要创建签名信息输出文件句柄。所述的安全环境初始化操作包括以下步骤:
(1)创建系统安全上下文环境;
(2)判断是否采用系统默认证书库;
(3)如果是,则进行将系统默认证书库添加至密钥管理器的操作,该操作包括以下步骤:
(a)将系统密钥库添加至密钥管理器中;
(b)将系统根目录下的密钥库添加至密钥管理器中;
(c)将系统值得信任的密钥库添加至密钥管理器中;
(d)将系统CA库添加至密钥管理器中;
(4)反之,则进行将用户证书添加至密钥管理器的操作,该操作包括以下步骤:
(a)将对称密钥添加至密钥管理器中;
(b)将非对称公钥添加至密钥管理器中;
(c)将非对称私钥添加至密钥管理器中。
2、生成数字签名
再请参阅图2所示,数字签名涉及到的对象以及说明:
XMLExporter:XML导出器,将文档转换成SAX事件,创建SAXWriter。
SAXWriter:SAX写入器,接受产生的SAX事件,并且写入到XML丈件中。如果不需要进行数字签名,那么SAX链中只有XMLExporter和SAXWriter。XMLExporter直接将SAX事件传递给SAXWriter。数字签名时,需要初始化安全环境。首先XMLExpoter读取配置丈件,以决定用户采用的安全类库。目前支持两种类库:XMLSec类,采用XMLDocPtr的数据格式;JSR105,w2c.dom.DOM是其数字格式。然后创建SAXEventKeeper(SAX事件保持器),用于缓冲SAX事件,此时,SAX链中将包含三个构件:XMLExporter,SAXWriter和SAXEventKeeper。
XMLDocument(XML丈档)的创建和采用的安全类库有关。XMLDocument用来缓冲SAX事件,便于生成临时的DOM树,也即签名模板,摘要值和签名值都是空的。用来产生数字签名和进行签名验证。
SAXEventKeeper接受所有和签名信息有关的SAX事件,决定SAX事件是否保存,并且控制XMLDocument何时开始缓冲SAX事件,保证建立的DOM树和原始丈件具有相同的结构。如果元素需要缓冲,SAXEventKeeper将这个元素作为SAX事件传递给XMLDocument,XMLDocument负责将SAX事件转换成DOM树。
当数字签名所需的条件具备后,SignatureCreator(签名产生器)调用XMLSignature(XML签名)进行数字签名。
XMLSignature对XMLDocument中缓冲的数据进行签名计算和签名验证,并且将数值回填到XMLDocument模板中。
再请参阅图3所示,生成数字签名的操作流程如下:
(1)数字签名之前,XMLExporter将SAX事件直接传递给SAXWriter;
(2)当XMLExporter需要输出Siganture元素时,创建SAXEventKeeper,插入到XMLExporter和SAXWriter之间。SAXEventKeeper作为filter;
(3)XMLExporter创建XMLDocument构建签名模板,该模板是一个没有摘要值和签名值的签名元素;
(4)XMLExporter为该模板创建SignatureCreator。然后请求SAXEventKeeper缓冲后面的输出元素,而且建立阻塞点,阻止向SAXWriter传递SAX事件;
(5)XMLExporter将签名模板作为SAX事件传递给SAXEventKeeper;
(6)SAXEventKeeper不再向SAXWriter传递SAX事件;
(7)SAXEventKeeper将SAX事件传递给XMLDocument,请求XMLDocument缓冲Signature模板;
(8)当Signatute模板元素完全收集后,SAXEventKeeper将告知SignatureCreator;
(9)Signature元素之后的SAX事件仍然传递给SAXEventKeeper进行缓冲;
(10)在传递需要签名的元素之前,XMLExporter请求SAXEventKeeper缓冲即将传递的元素;
(11)SAXEventKeeper传递SAX事件给XMLDocument并且请求XMLDocument保存这些元素。如果有多个缓冲元素包含相同的数据,那么SAXEventKeeper确保事件在内存中只保存一次;
(12)当需要签名的元素保存完整后,SAXEventKeeper通知SignatureCreator收集结束;
(13)一旦SignatureCreator知道需要签名的元素和签名模板都已获得,将会调用XMLSignature进行数字签名;
(14)XMLSignatrue读取XMLDocument内的DOM树,计算签名值,并且根据计算出的结果给模板中的摘要和签名赋值;
(15)SignatureCreator请求SAXEventKeeper释放缓冲区数据,移除阻塞点;
(16)阻塞点被移除,SAXEventKeeper请求XMLDocument将签名模板的所有SAX事件传递给SAXWriter;
(17)XMLExporter从SAX链中移除SAXEventKeeper。
3、数字签名的验证
再请参阅图4所示,数字签名验证涉及到的对象以及说明:
SAXParser(SAX解析器)解析XML文件,并且转换成SAX事件。
XMLImporter(XML导入器)创建SAXParser,将产生的SAX事件转换成丈档。
在解析XML文件过程中,如果不需要验证签名,XMLImporter直接从SAXParser接受SAX事件。否则XMLImporter将创建XMLDocument,SAXEventKeeper,SignatureVerifier(签名验证器)和XMLSignature,由SAXParser解析的SAX事件首先将传递到SAXEventKeeper。
接收到Signature元素的开始标记后,XMLImporter将创建SignatureVerifier,请求SAXEventKeeper为当前元素创建缓冲点。在接受SAX事件的过程中,XMLImporter分析签名信息:获取每个引用的URI,计算引用数。
当SignatureVerifier知道所有签名元素,签名模板以及密钥资源信息后,将调用XMLSignature验证签名,并且将最终验证结果告诉XMLImpoter。
SAXEventKeeper和XMLDocument以及XMLSignature的功能参看数字签名产生部分的介绍。
再请参阅图5所示,验证签名的流程如下:
(1)解析Signature元素之前,XMLImporter直接从SAXParser获得SAX事件;
(2)解析过程中出现Signature元素,在XMLImporter和SAXParser之间创建SAXEventKeeper;
(3)XMLImporter创建SignatureVerifier。并请求SAXEventKeeper缓冲当前SAX事件的Signature元素,作为Signature模板;
(4)SAXEventKeeper接受来自SAXParser的Signature元素过程中,将这些SAX事件传递给XMLDocument缓冲,同时将Signature元素传递给XMLImporter;
(5)XMLImporter通过分析Signature元素,获得所有引用URI;
(6)XMLtmporter告诉SignatureVerifierSignature内有多少引用;
(7)当Signature模板完全缓冲,SAXEventKeeper通知SignatureVerifier收集结束;
(8)XMLImporter移出SAXEventKeeper,因此Signature元素之后的SAX事件又直接从SAXParser直接传递到XMLImporter;
(9)XMLImporter检测被签名元素,在SAX事件流中根据引用URI;
(10)当被签名元素标记开始时,XMLExporter重新和SAXEventKeeper建立连接;
(11)XMLImpoter请求SAXEventKeeper从当前SAX事件开始缓冲元素;
(12)SAXEventKeeper接受来自SAXParser的被签名元素过程中,将这些SAX事件传递给XMLDocument缓冲,同时将SAX事件传递给XMLImporter;
(13)当元素完全缓冲,SAXEventKeeper通知SignatureVerifier收集结束;
(14)在Signature模板和被签名元素都收集完成后,SignatureVerifier触发XMLSignature进行签名验证;
(15)在XMLSignature内,读取XMLDocument内的DOM树,签名被验证;
(16)SigantureVerifier将验证结果传递给XMLImpoter,并请求SAXEventKeeper释放所缓冲数据;
(17)XMLImporter从SAX链中移除SAXEventKeeper。
其相应的文件格式如下:
应用程序读取XML文件,为了识别是否签名需要特殊的格式。签名元素都具有“id”属性,“refNum”属性表明该元素被签名元素引用了多少次。形如:
<Data_C id=″C″refNum=″3″>
This is Data_C
</Data_C>
Signature模板的格式和w3c’s定义类似,如表一所示:
<Signature>
<KeyInfo>
<RetrievalMethod URI=″...″>
</RetrievalMethod>
<KeyValue>...</KeyValue
</KeyInfo>
<SignedInfo>
<Reference URI=″C″>
<DigestValue>
d.i.g.e.s.t.V.a.l.u.e
</DigestValue>
</Reference>
...
</SignedInfo>
<SignatureValue>
s.i.g.n.a.t.u.r.e.v.l.a.u.e
</SignatureValue>
<Object>
...
</Object>
</Signature>
在SignedInfo元素下面可以包含多个Reference元素,一般NeoShine Office压缩包中主要包含四个XML文件,settings.xml,styles.xml,content.xml,meta.xml,还可以包含二进制文件。Object元素是可选的。
完整的保存数字签名信息的XML文件如下:
<?xml version=″1.0″encoding=″UTF-8″?>
<document-signatures xmlns=″http://openoffice.org/2004/documentsignatures″>
<Signature xmlns=″http://www.w3.org/2000/09/xmldsig#″
Id=″ID_00eb00fc008800f000e200ee001100d900a10037009c003100ae00c5004c00b2″>
<SignedInfo>
<CanonicalizationMethod
Algoritbm=″http://www.w3.org/TR/2001/REC-xml-c14n-20010315″/>
<SignatureMethod Algorithm=″http://www.w3.org/2000/09/xmldsig#rsa-shal″/>
<Reference URI=″meta.xml″>
<Transforms>
<Transform Algorithm=″http://www.w3.org/TR/2001/REC-xml-c14n-20010315″/>
</Transforms>
<DigestMethod Algorithm=″http://www.w3.org/2000/09/xmldsig#shal″/>
<DigestValue>ZxchP6jfdiacbIZs5YYTSd25agA=</DigestValue>
</Reference>
<Reference URI=″settings.xml″>
<Transforms>
<Transform Algorithm=″http://www.w3.org/TR/2001/REC-xml-c14n-20010315″/>
</Transforms>
<DigestMethod Algorithm=″http://www.w3.org/2000/09/xmldsig#shal″/>
<DigestValue>88pCtjj0LFfQmCgg9b7fv723YWY=</DigestValue>
</Reference>
<Reference URI=″styles.xml″>
<Transforms>
<Transform Algorithm=″http://www.w3.org/TR/2001/REC-xml-c14n-20010315″/>
</Transforms>
<DigestMethod Algorithm=″http://www.w3.org/2000/09/xmldsig#shal″/>
<DigestValue>gPG+BFJ5YIwxxQM6XpxrB8VApfw=</DigestValue>
</Reference>
<Reference URI=″content.xml″>
<Transforms>
<Transform Algorithm=″http://www.w3.org/TR/2001/REC-xml-c14n-20010315″/>
</Transforms>
<DigestMethod Algorithm=″http://www.w3.org/2000/09/xmldsig#shal″/>
<DigestValue>3HUdDxTBtloDy8pNVWSzGx01MTY=</DigestValue>
</Reference>
<Reference
URI=″#ID_00eb00fc008800f100e200ee001100d90094007d009c003100ae00c5004c00b2″>
<DigestMethod Algorithm=″http://www.w3.org/2000/09/xmldsig#shal″/>
<DigestValue>0MF3NdXf+zFo9VRNQ53uz7jnNuA=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>
cxH6SQxZ1DUB7XRx79aVdViECz113KbB8Jo1HBib1k1vhIQtW3RFugakuy50zxMe
HfQwMgZoLw3KfnI/v0z5Kqw+RtCQWDeNFsbR5CWoTyBGpX7+DAx2Yj+nZjIywJMz
wuPjJNN+rOqjEE/BYs97++th4jH0e1k7RaVRd5DqnPA=
</SignatureValue>
<KeyInfo>
<X509Data>
<X509IssuerSerial>
<X509IssuerName>CN=Test Issuer</X509IssuerName>
<X509SerialNumber>123450003</X509SerialNumber>
</X509IssuerSerial>
<X509Certificate>
MIIB2TCCAUKgAwIBAgIEB1uykzANBgkqhkiG9w0BAQQFADAWMRQwEgYDVQQDEwtU
ZXN0IE1zc3V1cjAeFw0wMzExMjcwNTQzMDFaFw0wNzAyMjcwNTQzMDFaMBoxGDAW
BgNVBAMTD1R1c3QgQ2VydCBUaHJ1ZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgykC
gYEAr1rufiF7Bxwyf3RMWWe9ADXVkLemnEZt7zp/mpa6Fn85V1MVpSOOx0dMaFwj
KH8zGOIHIx4H3nZGTF0adBrPaXRNeOj40TR/kNyRN8OmhtMRHVaX5LfY1ybowRm3
tawEQvBshH410C6SIGr5GOSvV9bV51d6VEkTS6NWmUFnd1kCAwEAAaMwMC4wEQYJ
YIZIAYb4QgEBBAQDAgcAMAkGA1UdEwQCMAAwDgYDVR0PAQH/BAQDAgP4MA0GCSqG
SIb3DQEBBAUAA4GBAKsKNFA2VXqqXN4VvZjhCm8Eh11uJ8K4+sXqbmX47FPvXOve
pmqf1hnt406dITgzxwFaLG7jouJ840hpRMMrFvuN6xICP9AgbV1Y/hCiD+XPdweb
Pj3qDGIddum7x7a3XT4t++c4IYifz1FA8VrkCFvL9gZfKvNCDYhROm6zyNaw
</X509Certificate>
</X509Data>
</KeyInfo>
<Object>
<SignatureProperties>
<SignatureProperty
Id=″ID_00eb00fc008800f100e200ee001100d90094007d009c003100ae00c5004c00b2″
Target=″#ID_00eb00fc008800f000e200ee001100d900a10037009c003100ae00c5004c00b2″>
<dc:date
xmlns:dc=″http://purl.org/dc/elements/1.1/″>2005-06-22T15:26:09,40</dc:date>
</SignatureProperty>
</SignatureProperties>
</Object>
</Signature>
</document-signatures>
(二)电子印章
电子印章是一种形式上和传统的纸制盖章方式相类似的可以取代传统盖章方式的一种技术,它利用印章图片与数字签名绑定来实现,插入印章,同时进行签名。
再请参阅图7所示,其实现的流程如下:
(1)如果文档存在签名或者签章,需要验证该签名或者签章有效。在验证通过的前提下,进行电子印章的后续工作;
(2)需要保证签章文件的文档格式为前面所述的文档格式;
(3)获得当前文档需要签章的位置;
(4)请参阅图6所示,在弹出“选择印章”对话框中选择印章,即获得插入到文档中的印章图片和进行数字签名的证书;
(5)插入图片,同时调用数字签名接口对文档进行签名;
(6)可以多次签章。如果文档已有签名或者签章需要验证签名,验证通过后才能进行签章;
(7)可以查看选择印章的证书信息;
(8)文档签名失效,印章消失。
再请参阅图6所示,启动电子印章功能,文档保存后,弹出“选择签章”的对话框。“证书列表”表示导入系统的证书(具体实现在上面已经说明)。唯一选中证书,“证书绑定图片列表”显示所有和证书绑定的图片,一个证书可以应用到多个签章上。如果没有绑定图片,那么显示无。“为证书绑定印章”可以重新给证书选择不同签章。
其中,Stamper由两部分组成:证书信息和证书绑定印章图片信息。
如果文档已经盖章,那么印章状态通过定式器进行监控。定时器触发,验证文档签名。如果签名依然有效,定时器重新开始监控;如果签名失效,那么印章图片自动消失,定时器停止工作。如果保存印章失效的文档,文档中所有签名都将不存在。印章监控状态图如图8所示。
其文件格式如下:
保存印章属性以及证书和印章绑定的信息:
……
<KeyInfo>-
<X509Data>-
<X509IssuerSerial>
<X509IssuerName>CN=Test Issuer</X509IssuerName>
<X509SerialNumber>123450001</X509SerialNumber>
</X509IssuerSerial>-
<X509Certificate>…</X509Certificate>
</X509Data>
<StampPic:frame stamppicture:name=″″StampPic:style-name=″″>-
<StampPic:image xlink:href=″″xlink:actuate=″onLoad″></StampPic:image>
</StampPic:frame>
</KeyInfo>
……
文档盖章后的抓图如下:
文档中有多个印章的示意图请参阅图9所示。
查看当前文档中签名信息示意图请参阅图10所示。
查看选择证书信息示意图请参阅图11所示。
(三)手写签名
调用手写输入设备接受用户输入信息,手写过程结束,将用户手写输入信息保存成图片放置系统剪贴板上。从剪贴板获取图片并将图片插入当前文档中,同时获得用户证书调用数字签名对文档进行签名。手写签名状态图如图12所示。
再请参阅图13所示,该流程如下:
(1)如果文档存在签名或者印章,需要验证该签名或者印章有效。在验证通过的前提下,进行手写签名的后续工作;
(2)启动手写输入设备,初始化目前状态为手写输入状态;
(3)手写输入结束,从剪贴板获得手写输入信息(以图片的形式保存在剪贴板中)。选定插入手写签名的位置,将插入图片于文档中;
(4)从用户证书管理中获取当前用户持有的证书;
(5)在签名之前需要将文档保存为前面所述的文档格式,调用数字签名接口进行签名;
(6)可以查看选择手写签名的证书信息;
(7)签名失效,手写签名消失。
手写签名失效原理参看图8及其相应说明。
文件格式如下:
保存手写签名属性以及证书和手写签名图片绑定的信息:
<KeyInfo>-
<X509Data>-
<X509IssuerSerial>
<X509IssuerName>CN=Test Issuer</X509IssuerName>
<X509SerialNumber>123450001</X509SerialNumber>
</X509IssuerSerial>-
<X509Certificate>…</X509Certificate>
</X509Data>
<HandSignpic:frame stamppicture:name=″″HandSignpic:style-name=″″>
<HandSignpic:image xlink:href=″″xlink:actuate=″onLoad″></
HandSignpic:image>
</HandSignPic:frame>
</KeyInfo>
在实现本发明方法的系统中,采用了系统抽象层中的统一系统调用服务,该方法解决了跨平台的问题:通过先判断操作系统,后调用相应操作系统提供的API来实现。其实现的流程图如图14所示。
再请参阅图15所示,文档数字签名的目的是使文档具有不可否认性,防止被篡改。通过该流程实现,并且为了不影响原有文件结构,采用将证书信息存放到另一文件的方式,和原有文件打包成一个文件,这样就有效地解决了不影响原有文档结构情况下签名与验证的问题。
再请参阅图16所示,电子印章是一种形式上和传统的纸制盖章方式相类似的可以取代传统盖章方式的一种技术,它利用印章图片与数字签名绑定来实现。同时对图片进行处理,包括使图片不可选中和置于底层等。
再请参阅图17所示,手写签名是利用手写设备将用户的手写签名存成图片,利用剪贴板技术将图片插入到当前文档位置,再与数字签名绑定,达到手写签名的目的。它既保留了手写签名直观的优点,又增强了安全性,而且去处了需要打印成纸制品在进行签名的弊端。
采用了以上的文档数字签名及其实现电子印章和手写签名的方法,由于其数字签名本身采用了将证书信息与原有文件分成两个独立文件的方法,使得这种方法在不影响原有文档结构情况下进行签名与验证,同时该数字签名信息不易被篡改,安全性较高;不仅如此,采用上述方法可以将传统的电子印章、手写签名与数字签名紧密绑定在一起,共同构成了一个完整的计算机文档安全认证体系,对于保证计算机文档的安全起到了一定作用,而且该方法可以允许用户自由选择电子印章的形式并可以将用户手写输入的签名作为图片进行数字签名,增强了其适用的范围,同时对用户其操作过程非常方便快捷。
在此说明书中,本发明已参照其特定的实施例作了描述。但是,很显然仍可以作出各种修改和变换而不背离本发明的精神和范围。因此,说明书和附图应被认为是说明性的而非限制性的。
Claims (10)
1、一种文档数字签名的方法,包括安全环境初始化操作、生成数字签名操作和数字签名的验证操作,其特征在于,所述的安全环境初始化操作包括以下步骤:
(1)创建系统安全上下文环境;
(2)判断是否采用系统默认证书库;
(3)如果是,则进行将系统默认证书库添加至密钥管理器的操作;
(4)反之,则进行将用户证书添加至密钥管理器的操作;
所述的生成数字签名操作包括以下步骤:
(1)数字签名之前,XML导出器将XML简单API事件SAX直接传递给SAX写入器;
(2)当XML导出器需要输出签名元素时,创建SAX事件保持器,插入到XML导出器和SAX写入器之间,SAX事件保持器作为过滤器;
(3)XML导出器创建XML文档构建签名模板,该模板是一个没有摘要值和签名值的签名元素;
(4)XML导出器为该模板创建签名产生器;
(5)系统进行被签名元素和签名模板的收集操作;
(6)当需要签名的元素保存完整后,SAX事件保持器通知签名产生器收集结束;
(7)签名产生器知道被签名元素和签名模板都已获得,然后调用XML签名器进行数字签名操作;
(8)签名产生器请求SAX事件保持器释放缓冲区数据,移除阻塞点;
(9)SAX事件保持器移除阻塞点,并请求XML文档将签名模板的所有SAX事件传递给SAX写入器;
(10)XML导出器从SAX链中移除SAX事件保持器;
所述的数字签名的验证操作包括以下步骤:
(1)解析签名元素之前,XML导入器直接从SAX解析器获得SAX事件;
(2)解析过程中出现签名元素,则在XML导入器和SAX解析器之间创建SAX事件保持器;
(3)XML导入器创建签名验证器;
(4)系统进行被签名元素和签名模板的收集操作;
(5)在签名模板和被签名元素都收集完成后,签名验证器触发XML签名器进行签名验证操作;
(6)签名验证器将验证结果传递给XML导入器,并请求SAX事件保持器释放所缓冲数据;
(7)XML导入器从SAX链中移除SAX事件保持器。
2、根据权利要求1所述的文档数字签名的方法,其特征在于,所述的将系统默认证书库添加至密钥管理器的操作包括以下步骤:
(1)将系统密钥库添加至密钥管理器中;
(2)将系统根目录下的密钥库添加至密钥管理器中;
(3)将系统值得信任的密钥库添加至密钥管理器中;
(4)将系统CA库添加至密钥管理器中。
3、根据权利要求1所述的文档数字签名的方法,其特征在于,所述的将用户证书添加至密钥管理器的操作包括以下步骤:
(1)将对称密钥添加至密钥管理器中;
(2)将非对称公钥添加至密钥管理器中;
(3)将非对称私钥添加至密钥管理器中。
4、根据权利要求1至3中任一项所述的文档数字签名的方法,其特征在于,所述的系统进行被签名元素和签名模板的收集操作包括以下步骤:
(1)XML导出器请求SAX事件保持器缓冲后面的输出元素,而且建立阻塞点,阻止向SAX写入器传递SAX事件;
(2)XML导出器将签名模板作为SAX事件传递给SAX事件保持器;
(3)SAX事件保持器不再向SAX写入器传递SAX事件;
(4)SAX事件保持器将SAX事件传递给XML文档,请求XML文档缓冲签名模板;
(5)当签名模板完全收集后,SAX事件保持器将告知签名产生器;
(6)签名元素之后的SAX事件仍然传递给SAX事件保持器进行缓冲;
(7)在传递需要签名的元素之前,XML导出器请求SAX事件保持器缓冲即将传递的元素;
(8)SAX事件保持器传递SAX事件给XML文档并且请求XML文档保存这些元素;如果有多个缓冲元素包含相同的数据,那么SAX事件保持器确保事件在内存中只保存一次;
(9)当需要签名的元素保存完整后,SAX事件保持器通知签名产生器收集结束。
5、根据权利要求1至3中任一项所述的文档数字签名的方法,其特征在于,所述的XML签名器进行数字签名操作为:
XML签名器读取XML文档内的文档对象模型DOM树,计算签名值,并且根据计算出的结果给模板中的摘要和签名赋值。
6、根据权利要求1至3中任一项所述的文档数字签名的方法,其特征在于,所述的系统进行被签名元素和签名模板的收集操作包括以下步骤:
(1)XML导入器请求SAX事件保持器缓冲当前SAX事件的签名元素,作为签名模板;
(2)SAX事件保持器接受来自SAX解析器的签名元素过程中,将这些SAX事件传递给XML文档缓冲,同时将签名元素传递给XML导入器;
(3)XML导入器通过分析签名元素,获得所有引用URI;
(4)XML导入器告诉签名验证器签名内有多少引用;
(5)当签名模板完全缓冲,SAX事件保持器通知签名验证器收集结束;
(6)XML导入器移出SAX事件保持器,因此签名元素之后的SAX事件又直接从SAX解析器直接传递到XML导入器;
(7)XML导入器根据引用的URI检测SAX事件流中的被签名元素;
(8)当被签名元素标记开始时,XML导出器重新和SAX事件保持器建立连接;
(9)XML导入器请求SAX事件保持器从当前SAX事件开始缓冲元素;
(10)SAX事件保持器接受来自SAX解析器的被签名元素过程中,将这些SAX事件传递给XML文档缓冲,同时将SAX事件传递给XML导入器;
(11)当元素完全缓冲,SAX事件保持器通知签名验证器收集结束。
7、根据权利要求1至3中任一项所述的文档数字签名的方法,其特征在于,所述的XML签名器进行签名验证操作为:
在XML签名器内,读取XML文档内的文档对象模型DOM树,签名被验证。
8、一种使用权利要求1所述的方法实现文档电子印章的方法,其特征在于,所述的方法包括以下步骤:
(1)如果文档存在签名或者签章,需要验证该签名或者签章有效;
(2)在验证通过后,进行电子印章的后续工作;
(3)获得当前文档需要签章的位置;
(4)根据用户操作选择印章,即获得插入到文档中的印章图片和进行数字签名的证书;
(5)插入印章图片,同时使用所述的文档数字签名方法对文档进行数字签名;
(6)定时器对印章状态进行监控,定时器触发,验证文档签名;
(7)如果签名依然有效,定时器重新开始监控;如果签名失效,那么印章图片自动消失,定时器停止工作。
9、一种使用权利要求1所述的方法实现文档手写签名的方法,其特征在于,所述的方法包括以下步骤:
(1)如果文档存在签名或者印章,需要验证该签名或者印章有效;
(2)在验证通过后,进行手写签名的后续工作;
(3)启动手写输入设备,初始化目前状态为手写输入状态;
(4)用户手写输入结束,从剪贴板获得手写输入信息;
(5)根据用户操作选定插入手写签名的位置,将手写输入信息插入文档中;
(6)从用户证书管理中获取当前用户持有的证书;
(7)使用所述的文档数字签名方法进行数字签名。
10、根据权利要求9所述的进行文档手写签名的方法,其特征在于,所述的手写输入信息是以图片的形式保存在剪贴板中的信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2005100276493A CN100334518C (zh) | 2005-07-08 | 2005-07-08 | 文档数字签名及其实现电子印章和手写签名的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2005100276493A CN100334518C (zh) | 2005-07-08 | 2005-07-08 | 文档数字签名及其实现电子印章和手写签名的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1719371A CN1719371A (zh) | 2006-01-11 |
CN100334518C true CN100334518C (zh) | 2007-08-29 |
Family
ID=35931223
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2005100276493A Active CN100334518C (zh) | 2005-07-08 | 2005-07-08 | 文档数字签名及其实现电子印章和手写签名的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100334518C (zh) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101163001B (zh) * | 2006-10-11 | 2011-09-07 | 中国民生银行股份有限公司 | 电子印章制作系统以及方法 |
US8949706B2 (en) | 2007-07-18 | 2015-02-03 | Docusign, Inc. | Systems and methods for distributed electronic signature documents |
US8655961B2 (en) * | 2007-07-18 | 2014-02-18 | Docusign, Inc. | Systems and methods for distributed electronic signature documents |
CN102542521A (zh) * | 2010-12-17 | 2012-07-04 | 周佳 | 一种电子印章及电子装置 |
CN103092940A (zh) * | 2013-01-10 | 2013-05-08 | 昆山百润科技有限公司 | 一种重构可验证的文档结构、数字签名方法和数字签名验证方法 |
CN103295097A (zh) * | 2013-05-22 | 2013-09-11 | 蓝盾信息安全技术股份有限公司 | 基于平板电脑的现场检查记录系统 |
CN104239774A (zh) * | 2013-09-18 | 2014-12-24 | 摩尔动力(北京)技术股份有限公司 | 手工痕迹钥匙 |
CN104298899A (zh) * | 2014-08-29 | 2015-01-21 | 苏州蓝恩信息科技有限公司 | 基于文件摘要信息对电子数据进行手写签名的方法 |
CN109891822B (zh) * | 2017-05-27 | 2022-07-26 | 深圳市大疆创新科技有限公司 | 电子签名系统、电子签名服务器及电子签名方法 |
CN108052807A (zh) * | 2017-12-27 | 2018-05-18 | 北京云京科技有限公司 | 实现电子印章的方法和装置 |
CN111159733A (zh) * | 2019-12-17 | 2020-05-15 | 渤海造船厂集团有限公司 | 一种具有防获取功能的矢量签名的方法 |
CN113553798B (zh) * | 2020-04-23 | 2024-06-18 | 珠海金山办公软件有限公司 | 一种图章插入方法、装置、电子设备及存储介质 |
CN114116248A (zh) * | 2021-09-30 | 2022-03-01 | 江西金格科技有限公司 | 一种保护Office电子文档印章图像的装置和方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1998054633A1 (en) * | 1997-05-29 | 1998-12-03 | Sun Microsystems, Inc. | Method and apparatus for signing and sealing objects |
CN1391198A (zh) * | 2001-06-11 | 2003-01-15 | 周忠信 | 手写式数字签名系统与方法 |
CN1421814A (zh) * | 2001-11-30 | 2003-06-04 | 温天 | 一种数字防伪方法 |
CN1601490A (zh) * | 2003-09-26 | 2005-03-30 | 刘任 | 信息安全认证及其加密装置的方法 |
CN1614600A (zh) * | 2003-11-03 | 2005-05-11 | 吴建明 | 一种新的盖章文件防伪方法 |
CN1635533A (zh) * | 2003-12-30 | 2005-07-06 | 刘瑞祯 | 数字印章系统 |
-
2005
- 2005-07-08 CN CNB2005100276493A patent/CN100334518C/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1998054633A1 (en) * | 1997-05-29 | 1998-12-03 | Sun Microsystems, Inc. | Method and apparatus for signing and sealing objects |
CN1391198A (zh) * | 2001-06-11 | 2003-01-15 | 周忠信 | 手写式数字签名系统与方法 |
CN1421814A (zh) * | 2001-11-30 | 2003-06-04 | 温天 | 一种数字防伪方法 |
CN1601490A (zh) * | 2003-09-26 | 2005-03-30 | 刘任 | 信息安全认证及其加密装置的方法 |
CN1614600A (zh) * | 2003-11-03 | 2005-05-11 | 吴建明 | 一种新的盖章文件防伪方法 |
CN1635533A (zh) * | 2003-12-30 | 2005-07-06 | 刘瑞祯 | 数字印章系统 |
Also Published As
Publication number | Publication date |
---|---|
CN1719371A (zh) | 2006-01-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100334518C (zh) | 文档数字签名及其实现电子印章和手写签名的方法 | |
US9009477B2 (en) | Archiving electronic content having digital signatures | |
JP4949269B2 (ja) | 電子文書に署名情報を追加するための方法および装置 | |
US20180268504A1 (en) | Indexing Mortgage Documents via Blockchains | |
CN101702150A (zh) | 一种pdf文档页内容的保护、验证及撤销方法 | |
US20080184033A1 (en) | System and method for generating agreements | |
EP1594252A3 (en) | Systems and methods for data compression and decompression | |
CN107992759A (zh) | 实现电子印章的装置、方法及计算机可读存储介质 | |
CN101964710B (zh) | 数字签名和验签方法 | |
CN111177272A (zh) | 一种基于区块链的大数据可信审计方法 | |
CN101997643B (zh) | 一种电子文件封装的方法及系统 | |
US20120017092A1 (en) | Non-transitory computer readable medium storing program, information processing apparatus, and information processing method | |
JP5108285B2 (ja) | 署名方法、情報処理装置、および署名プログラム | |
Hühnlein et al. | FutureTrust–Future Trust Services for Trustworthy Global Transactions | |
US8725776B2 (en) | Digests to identify elements in a signature process | |
JP2007214691A (ja) | 画像形成装置 | |
CN102117389A (zh) | Word文件签署方法及系统 | |
CN104517203A (zh) | 一种电子印章的盖章方法、装置及系统 | |
JP5511270B2 (ja) | 情報処理装置、及び情報処理方法 | |
CN103577969A (zh) | 一种电子印章的盖章方法 | |
KR101417825B1 (ko) | 전자 문서 검증 방법 및 이러한 방법을 수행하는 장치 | |
KR100934741B1 (ko) | 전자 문서 보존 방법과 장치, 전자 문서 배부 방법과 장치그리고 상기 방법을 수행하는 프로그램이 기록된 기록 매체 | |
JP6703116B2 (ja) | Epubファイル暗号化のための単位ファイルに対する圧縮及び復元方法 | |
Apvrille et al. | Streamed or detached triple integrity for a time stamped secure storage system | |
TW201424322A (zh) | 驗證由簽章識別符所表示之數位簽章之裝置、系統及方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C56 | Change in the name or address of the patentee |
Owner name: CHINA STANDARD SOFTWARE CO., LTD. Free format text: FORMER NAME: SHANGHAI ZHONGBIAO SOFTWARE CO. LTD. |
|
CP01 | Change in the name or title of a patent holder |
Address after: 200120, No. 518, Shangcheng Road, Pudong New Area, Shanghai, 24 floors of inner and outer United building Patentee after: China Standard Software Co., Ltd. Address before: 200120, No. 518, Shangcheng Road, Pudong New Area, Shanghai, 24 floors of inner and outer United building Patentee before: Shanghai Zhongbiao Software Co., Ltd. |