论文部分内容阅读
摘 要:在研究RSA数字签名体制和XML数字签名规范的基础上,设计了不需要第三方的基于RSA的XML数字签名方案,保证了电子公文交换和电子定单等相关信息的完整性和不可抵赖性。同时,论文给出了基于VB.NET的XML数字签名的完整实例,为基于.Net平台实现基于XML的数字签名提供了有意义的参考。
关键词:RSA;数字签名;可扩展标记语言;VB.NET
中图分类号:TP309.7文献标识码:A
XML Digital Signature Based on RSA
ZHAO Xue-min,YU Jian-guo
(ZhengZhou Institute Of Aeronautical Industry Management,Henan Zhengzhou450015)
Key words:RSA;digital signature;extensible markup language;VB.NET
随着Intemet技术的飞速发展,XML以其优良的可扩展性、互操作性、可靠性、开放性和简便性已在电子商务、电子政务领域得到了日益广泛的应用。基于XML的数字签名在防止伪造和防止抵赖方面具有无可比拟的优势,具有十分重要的实际研究意义。
1RSA数字签名体制
数字签名依赖于公钥密码学,它通过一个公钥算法产生一个加密密钥和一个解密密钥。当发送方S要将消息M发送给接收方R时,S产生公钥PKS和私钥SKS,然后将PKS公布,而SKS只有S知道。S用SKS对消息M进行加密并将加密后的消息Dsks(M)和M一起发给R。R用公钥PKS对Dsks(M)解密得到M',如果M'=M,那么签名是真实的。
RSA算法是当今在数字签名中应用较为广泛的一种算法。算法描述如下:
(1)确定参数:K=(n,p,q,e,d)。其中n=pq,p和q是两个大素数且保密,n公开;ed=1mod(p-
1)(q-1),e 公开作为公钥,d保密作位私钥;
(2)数字签名:对消息M,定义C=Me mod n 为对消息M的签名;
(3)验证签名:如果Cd mod n =M,则签名为真。
由于d保密且只有签名者知道,所以其他人不可能伪造正确的签名,也就容易验证(M,C)是否是发送方发的信息及签名,也保证了发送信息的完整性。
RSA的安全性依赖于n=pq分解的困难性。密码分析者可以采用穷举攻击、数学攻击、计时攻击等手段来攻击和破解。使用者,可以通过大密钥空间即增加e 和d 的位数抵抗攻击,不过这样就会使密钥的产生、签名、验证的过程的计算量加大,系统运行速度变慢。所以,对于大容量消息在使用RSA算法进行签名前,常常对消息使用hash算法进行运算得出其摘要,对消息摘要进行RSA的数字签名。
2基于XML的数字签名技术
2.1 XML技术简介
可扩展标记语言XML(eXtensible Markup Language)是一种简单灵活的文本格式的可扩展标记语言。XML是国际互联网联盟(World Wide Web Consortium ,W3C)创建的一组规范,于1998年2月10日通过W3C成员的鉴定和批准而成为“推荐标准”。
XML作为标记语言,与HTML相比,XML中的标记只描述文档的内容,并不描述其显示方案,实现了内容与显示的分离,数据从最原始形式就与其最终表达分离开来。XML文档重在描述数据及其之间的关系,专门用XSL和CSS来表现其内容,使同一数据可以根据实际情况具有多种表现形式。XML具有跨平台性、灵活性、自描述性和数据整合性等特点。从XML1.0规范发布以来,XML迅速发展并得到了Microsoft、IBM、Oracle和Sun等各大公司的鼎力支持,现在它已经成为Internet上的数据表示和数据交换的标准格式。
2.2 XML数字签名技术
在2001年8月20日,由IETF和W3C共同组建的XML Signature工作组公布了XML数字签名规范。规范将XML数字签名解释为:定义一种与XML语法兼容的数字签名语法描述规范,描述数字签名本身和签名的生成与验证过程。作为一个安全有效的数字签名方案,该规范提供了数字签名的完整性、签名确认和不可抵赖性。
W3C的XML数字签名规范具有标准的数字签名的需求,它要求必须以XML形式表现被签名的数据,而且可以从XML文档中选出一部分内容进行数字签名。一个完整的XML签名可由签名信息(SignInfo)、签名结果(SigValue)、密钥信息(KeyInfo)和签名对象(Object)等几个部分组成。其中,签名信息(SignInfo)部分给出本签名的规范化算法CanonicalizatlonMethod、签名算法SignatureMethod、源签名文档的URL链接Rerence、源文档在进行摘要算法之前进行的转换Transforms等。签名结果(SigValue)部分给出对信息摘要进行签名的结果。而密钥信息(KeyInfo)部分则给出验证签名的密钥信息,包括证书、密钥名、密钥算法等。
3基于RSA的XML数字签名方案
基于RSA算法的XML数字签名和验证方案如如图1所示。该方案在实现时主要包括三个阶段,即密钥生成(分发),生成签名和签名验证。第一阶段是生成公、私密钥对并进行分发,这可以由证书服务器或密钥容器实现,私钥只归签名方保密拥有,而公钥则可以公开分发。第二阶段是签名方进行签名,XML 数字签名不仅能够实现对整篇XML文档进行签名,更重要的是能够对XMI文档的特定的一部分内容签名,当文档的某个部分很关键且不能被篡改时,这一功能显得特别有效。所以,当数据存在数据库中或以其它格式存储时,可以先把其转换成XML格式,然后运用RSA算法以私钥作参数生成数字签名,若被签名的文档是机密文件,则需要进行加密传输或在安全信道上传输。第三阶段,验证方需要读取被签名的数据时,如果能用签名者的公钥解密数字签名,得到正确的XML文档,基于RSA算法的原理就可以认为读取到的数据是可信的。
在私钥的保密性得到保证的情况下,该基于RSA的XML数字签名方案不需要第三方的参与,就可防止发数据在签名年的不可更改性及签名方的抵赖行为,保证了验证方读到的数据是可信和不可否认的。该方案比较简单易行,特别是XML文档数据内容和数据式的分离,只对部分关键数据进行签名能明显提高效率和性能,可以较好的解决电子商务活动中的数字签名有效性问题,在电子商务的公文交换、电子合同的实施、网上银行的实现等方面起着非常重要的作用。
4基于VB.net的XML数字签名实现
4.1XML数字签名的实现方式
XML数字签名规范发布以来,很多科研机构和公司对其进行了深入的研究并提供了具体的实现方式,主要有IBM的XML安全套件、Java语言、VeriSign XML信任服务和Microsoft Visual Studio.NET平台。IBM的XML安全套件包括XML数字签名、XML加密和XML访问控制语言(XACL),为XML数字签名提供完整支持;Java语言为XML安全的实现提供了很好的工具包;VeriSign XML信任服务的XML密钥管理规范提供了完整的认证、数字签名和加密服务;微软公司在其·NET开发平台中提供了广阔的安全服务,利用其C#、VB.net可以方便的实现XML数字签名。
4.2基于RSA的XML数字签名的实现
微软.NET Framework 中的 System.Security.Cryptography.Xml应用了由 W3C 和 IETF 联合制定的XML 签名的语法和处理规范(缩写为 XML DSIG),支持XML数字签名的创建和验证。对XML文档进行数字签名,必须有两个元素;被签名的数据和实施签名的密钥,Microsoft .Net平台提供了实现这些操作的类和方法,为我们实现基于XML的数字签名提供了方便。
下面,我们基于此平台建立一个典型定购单的XML的数字签名。假定有一个定购单将要被发送的会计部门进行进一步的处理,对这一定购单实施基于XML的数字签名就可以确保没有人能篡改这一定购单。这可以分四步实现:
(1)建立定购单,并存入一个XML文档
Dim NewXMLdocument As New XmlDocument( )
Dim node As XmlNode =
NewXMLdocument.CreateNode(XmlNodeType.Element, "", "ElementToSign",_ "AdvisorArticleTest")
‘定购单信息
node.InnerText =
"Example text to be signed. This text could be purchase order, product info. or_credit card info."
NewXMLdocument.AppendChild(node)
Dim SaveXML As New XmlTextWriter( _FileName, New UTF8Encoding(False))
NewXMLdocument.WriteTo(SaveXML)
SaveXML.Close()
(2)生成基于RSA算法的密钥对(包括公钥和私钥),并把生成的密钥对存储在一个XML文件中。
Dim Key As New RSACryptoServiceProvider( )
Dim strKeyXML As String = Key.ToXmlString(True)
Dim objXMLdocument As New XmlDocument( )
objXMLdocument.LoadXml(strKeyXML)
objXMLdocument.Save(XMLKeyPairFileName)
(3)利用某一算法对该订购单进行签名;
Dim doc As New XmlDocument( )
doc.Load(New XmlTextReader(FileName))
Dim signedXml As New SignedXml(doc)
signedXml.SigningKey = Key
Dim reference As New Reference( )
reference.Uri = ""
Dim trns = New XmlDsigC14NTransform( )
reference.AddTransform(trns)
Dim env As New XmlDsigEnvelopedSignatureTransform( )
reference.AddTransform(env)
signedXml.AddReference(reference)
signedXml.ComputeSignature()
Dim xmlDigitalSignature As XmlElement =signedXml.GetXml()
doc.DocumentElement.AppendChild(doc.ImportNode(xmlDigitalSignature, True))
If TypeOf doc.FirstChild Is XmlDeclaration Then
doc.RemoveChild(doc.FirstChild)
End If
Dim xmltw As New XmlTextWriter(SignedFileName, New UTF8Encoding(False))
doc.WriteTo(xmltw)
xmltw.Close()
(4)验证签名,如果有人篡改了定购单就可以校验。
Dim xmlDocument As New XmlDocument()
xmlDocument.Load(Name)
Dim signedXml As New SignedXml(xmlDocument)
Dim nodeList As XmlNodeList = xmlDocument.GetElementsByTagName("Signature")
signedXml.LoadXml(CType(nodeList(0), XmlElement))
Return signedXml.CheckSignature(Key)
5结束语
XML即将成为下一代互联网的标准语言,基于XML数字签名技术可以较好的解决了电子商务活动中的数字签名有效性问题。在电子商务的公文交换、电子合同的实施、网上银行的实现等方面发挥了重大的作用,XML数字签名必将具有极为广阔的前景。
参考文献:
[1](美)弗里曼(Freeman,A.),(美)琼斯(Jones,A.)著,靳京译 .NET安全编程[M].清华大学出版社,2007-2.
[2]王会进,杨文茵,朱岸青.基于零知识证明的XML数字签名方案[J].计算机工程,2006,(07).
[3]黄寅.XML数字签名技术在远程考试中的应用研究.[J].计算机系统应用,2006,(10).
基金项目:郑州航空工业管理学院青年基金项目(Q06L108)
关键词:RSA;数字签名;可扩展标记语言;VB.NET
中图分类号:TP309.7文献标识码:A
XML Digital Signature Based on RSA
ZHAO Xue-min,YU Jian-guo
(ZhengZhou Institute Of Aeronautical Industry Management,Henan Zhengzhou450015)
Key words:RSA;digital signature;extensible markup language;VB.NET
随着Intemet技术的飞速发展,XML以其优良的可扩展性、互操作性、可靠性、开放性和简便性已在电子商务、电子政务领域得到了日益广泛的应用。基于XML的数字签名在防止伪造和防止抵赖方面具有无可比拟的优势,具有十分重要的实际研究意义。
1RSA数字签名体制
数字签名依赖于公钥密码学,它通过一个公钥算法产生一个加密密钥和一个解密密钥。当发送方S要将消息M发送给接收方R时,S产生公钥PKS和私钥SKS,然后将PKS公布,而SKS只有S知道。S用SKS对消息M进行加密并将加密后的消息Dsks(M)和M一起发给R。R用公钥PKS对Dsks(M)解密得到M',如果M'=M,那么签名是真实的。
RSA算法是当今在数字签名中应用较为广泛的一种算法。算法描述如下:
(1)确定参数:K=(n,p,q,e,d)。其中n=pq,p和q是两个大素数且保密,n公开;ed=1mod(p-
1)(q-1),e 公开作为公钥,d保密作位私钥;
(2)数字签名:对消息M,定义C=Me mod n 为对消息M的签名;
(3)验证签名:如果Cd mod n =M,则签名为真。
由于d保密且只有签名者知道,所以其他人不可能伪造正确的签名,也就容易验证(M,C)是否是发送方发的信息及签名,也保证了发送信息的完整性。
RSA的安全性依赖于n=pq分解的困难性。密码分析者可以采用穷举攻击、数学攻击、计时攻击等手段来攻击和破解。使用者,可以通过大密钥空间即增加e 和d 的位数抵抗攻击,不过这样就会使密钥的产生、签名、验证的过程的计算量加大,系统运行速度变慢。所以,对于大容量消息在使用RSA算法进行签名前,常常对消息使用hash算法进行运算得出其摘要,对消息摘要进行RSA的数字签名。
2基于XML的数字签名技术
2.1 XML技术简介
可扩展标记语言XML(eXtensible Markup Language)是一种简单灵活的文本格式的可扩展标记语言。XML是国际互联网联盟(World Wide Web Consortium ,W3C)创建的一组规范,于1998年2月10日通过W3C成员的鉴定和批准而成为“推荐标准”。
XML作为标记语言,与HTML相比,XML中的标记只描述文档的内容,并不描述其显示方案,实现了内容与显示的分离,数据从最原始形式就与其最终表达分离开来。XML文档重在描述数据及其之间的关系,专门用XSL和CSS来表现其内容,使同一数据可以根据实际情况具有多种表现形式。XML具有跨平台性、灵活性、自描述性和数据整合性等特点。从XML1.0规范发布以来,XML迅速发展并得到了Microsoft、IBM、Oracle和Sun等各大公司的鼎力支持,现在它已经成为Internet上的数据表示和数据交换的标准格式。
2.2 XML数字签名技术
在2001年8月20日,由IETF和W3C共同组建的XML Signature工作组公布了XML数字签名规范。规范将XML数字签名解释为:定义一种与XML语法兼容的数字签名语法描述规范,描述数字签名本身和签名的生成与验证过程。作为一个安全有效的数字签名方案,该规范提供了数字签名的完整性、签名确认和不可抵赖性。
W3C的XML数字签名规范具有标准的数字签名的需求,它要求必须以XML形式表现被签名的数据,而且可以从XML文档中选出一部分内容进行数字签名。一个完整的XML签名可由签名信息(SignInfo)、签名结果(SigValue)、密钥信息(KeyInfo)和签名对象(Object)等几个部分组成。其中,签名信息(SignInfo)部分给出本签名的规范化算法CanonicalizatlonMethod、签名算法SignatureMethod、源签名文档的URL链接Rerence、源文档在进行摘要算法之前进行的转换Transforms等。签名结果(SigValue)部分给出对信息摘要进行签名的结果。而密钥信息(KeyInfo)部分则给出验证签名的密钥信息,包括证书、密钥名、密钥算法等。
3基于RSA的XML数字签名方案
基于RSA算法的XML数字签名和验证方案如如图1所示。该方案在实现时主要包括三个阶段,即密钥生成(分发),生成签名和签名验证。第一阶段是生成公、私密钥对并进行分发,这可以由证书服务器或密钥容器实现,私钥只归签名方保密拥有,而公钥则可以公开分发。第二阶段是签名方进行签名,XML 数字签名不仅能够实现对整篇XML文档进行签名,更重要的是能够对XMI文档的特定的一部分内容签名,当文档的某个部分很关键且不能被篡改时,这一功能显得特别有效。所以,当数据存在数据库中或以其它格式存储时,可以先把其转换成XML格式,然后运用RSA算法以私钥作参数生成数字签名,若被签名的文档是机密文件,则需要进行加密传输或在安全信道上传输。第三阶段,验证方需要读取被签名的数据时,如果能用签名者的公钥解密数字签名,得到正确的XML文档,基于RSA算法的原理就可以认为读取到的数据是可信的。
在私钥的保密性得到保证的情况下,该基于RSA的XML数字签名方案不需要第三方的参与,就可防止发数据在签名年的不可更改性及签名方的抵赖行为,保证了验证方读到的数据是可信和不可否认的。该方案比较简单易行,特别是XML文档数据内容和数据式的分离,只对部分关键数据进行签名能明显提高效率和性能,可以较好的解决电子商务活动中的数字签名有效性问题,在电子商务的公文交换、电子合同的实施、网上银行的实现等方面起着非常重要的作用。
4基于VB.net的XML数字签名实现
4.1XML数字签名的实现方式
XML数字签名规范发布以来,很多科研机构和公司对其进行了深入的研究并提供了具体的实现方式,主要有IBM的XML安全套件、Java语言、VeriSign XML信任服务和Microsoft Visual Studio.NET平台。IBM的XML安全套件包括XML数字签名、XML加密和XML访问控制语言(XACL),为XML数字签名提供完整支持;Java语言为XML安全的实现提供了很好的工具包;VeriSign XML信任服务的XML密钥管理规范提供了完整的认证、数字签名和加密服务;微软公司在其·NET开发平台中提供了广阔的安全服务,利用其C#、VB.net可以方便的实现XML数字签名。
4.2基于RSA的XML数字签名的实现
微软.NET Framework 中的 System.Security.Cryptography.Xml应用了由 W3C 和 IETF 联合制定的XML 签名的语法和处理规范(缩写为 XML DSIG),支持XML数字签名的创建和验证。对XML文档进行数字签名,必须有两个元素;被签名的数据和实施签名的密钥,Microsoft .Net平台提供了实现这些操作的类和方法,为我们实现基于XML的数字签名提供了方便。
下面,我们基于此平台建立一个典型定购单的XML的数字签名。假定有一个定购单将要被发送的会计部门进行进一步的处理,对这一定购单实施基于XML的数字签名就可以确保没有人能篡改这一定购单。这可以分四步实现:
(1)建立定购单,并存入一个XML文档
Dim NewXMLdocument As New XmlDocument( )
Dim node As XmlNode =
NewXMLdocument.CreateNode(XmlNodeType.Element, "", "ElementToSign",_ "AdvisorArticleTest")
‘定购单信息
node.InnerText =
"Example text to be signed. This text could be purchase order, product info. or_credit card info."
NewXMLdocument.AppendChild(node)
Dim SaveXML As New XmlTextWriter( _FileName, New UTF8Encoding(False))
NewXMLdocument.WriteTo(SaveXML)
SaveXML.Close()
(2)生成基于RSA算法的密钥对(包括公钥和私钥),并把生成的密钥对存储在一个XML文件中。
Dim Key As New RSACryptoServiceProvider( )
Dim strKeyXML As String = Key.ToXmlString(True)
Dim objXMLdocument As New XmlDocument( )
objXMLdocument.LoadXml(strKeyXML)
objXMLdocument.Save(XMLKeyPairFileName)
(3)利用某一算法对该订购单进行签名;
Dim doc As New XmlDocument( )
doc.Load(New XmlTextReader(FileName))
Dim signedXml As New SignedXml(doc)
signedXml.SigningKey = Key
Dim reference As New Reference( )
reference.Uri = ""
Dim trns = New XmlDsigC14NTransform( )
reference.AddTransform(trns)
Dim env As New XmlDsigEnvelopedSignatureTransform( )
reference.AddTransform(env)
signedXml.AddReference(reference)
signedXml.ComputeSignature()
Dim xmlDigitalSignature As XmlElement =signedXml.GetXml()
doc.DocumentElement.AppendChild(doc.ImportNode(xmlDigitalSignature, True))
If TypeOf doc.FirstChild Is XmlDeclaration Then
doc.RemoveChild(doc.FirstChild)
End If
Dim xmltw As New XmlTextWriter(SignedFileName, New UTF8Encoding(False))
doc.WriteTo(xmltw)
xmltw.Close()
(4)验证签名,如果有人篡改了定购单就可以校验。
Dim xmlDocument As New XmlDocument()
xmlDocument.Load(Name)
Dim signedXml As New SignedXml(xmlDocument)
Dim nodeList As XmlNodeList = xmlDocument.GetElementsByTagName("Signature")
signedXml.LoadXml(CType(nodeList(0), XmlElement))
Return signedXml.CheckSignature(Key)
5结束语
XML即将成为下一代互联网的标准语言,基于XML数字签名技术可以较好的解决了电子商务活动中的数字签名有效性问题。在电子商务的公文交换、电子合同的实施、网上银行的实现等方面发挥了重大的作用,XML数字签名必将具有极为广阔的前景。
参考文献:
[1](美)弗里曼(Freeman,A.),(美)琼斯(Jones,A.)著,靳京译 .NET安全编程[M].清华大学出版社,2007-2.
[2]王会进,杨文茵,朱岸青.基于零知识证明的XML数字签名方案[J].计算机工程,2006,(07).
[3]黄寅.XML数字签名技术在远程考试中的应用研究.[J].计算机系统应用,2006,(10).
基金项目:郑州航空工业管理学院青年基金项目(Q06L108)