趙登攀,高 凱
(陜西理工學(xué)院教務(wù)處 陜西 漢中 723000)
電子商務(wù)從出現(xiàn)以來就以其巨大的能量和動力給整個世界的經(jīng)濟運行方式和社會生活形態(tài)帶來了深刻的變化。它不僅開辟一條新的網(wǎng)上銷售渠道,而且改善企業(yè)經(jīng)營模式、優(yōu)化交易過程、降低庫存損耗、保持資金全部周轉(zhuǎn)和降低實際銷售支出,進而降低經(jīng)營成本,增加企業(yè)收入和效率,并幫助企業(yè)與客戶、供應(yīng)商以及合作伙伴建立更為密切的合作關(guān)系??梢哉f誰掌握了電子商務(wù)、誰就在未來的商戰(zhàn)中掌握了制勝的商機[1]。可擴展標(biāo)記語言XML由于其自身的優(yōu)點迅速成為在電子商務(wù)網(wǎng)絡(luò)數(shù)據(jù)表示和信息交換的事實標(biāo)準。本文正是基于以上背景,提出一種新的XML安全策略來保證電子商務(wù)信息的安全。
擴展標(biāo)記語言XML(Extensible Markup Language)是世界萬維網(wǎng)聯(lián)盟W3C制定的一種數(shù)據(jù)標(biāo)準。它以其結(jié)構(gòu)化、互操作性、易于交換和可擴展性的特點在很多行業(yè)得到了廣泛的應(yīng)用[2]。由于XML具有良好的數(shù)據(jù)存儲格式、可擴展性、高度結(jié)構(gòu)化和便于網(wǎng)絡(luò)傳輸,非常適合電子商務(wù)應(yīng)用的需要。由于其卓越的性能表現(xiàn)以及為其所制訂的一些與電子商務(wù)相關(guān)的規(guī)范,使XML成為一種廣泛應(yīng)用的電子商務(wù)描述語言,并在電子商務(wù)的各種信息交換中發(fā)揮重大作用[3-4]。
隨著XML技術(shù)在互聯(lián)網(wǎng)的廣泛應(yīng)用和發(fā)展,XML數(shù)據(jù)的安全得到了廣泛關(guān)注,XML安全技術(shù)包括XML加密標(biāo)準、XML數(shù)字簽名標(biāo)準、XML公鑰管理規(guī)范、XML存取控制標(biāo)記語言以及XML權(quán)利標(biāo)記語言(XrML)等[5]。
XML加密技術(shù)的基礎(chǔ)是XML加密規(guī)范,此規(guī)范由W3C制定。XML加密的最主要特點是可以對整個XML文檔加密,還可以對XML文檔中的任意元素和元素內(nèi)容進行加密。XML加密技術(shù)用于對網(wǎng)絡(luò)數(shù)據(jù)進行加密,形成加密后的XML格式文件后再安全地發(fā)送給接收方,達到了提高文件傳送安全性的目標(biāo)。
XML加密技術(shù)能夠?qū)φ麄€文件加密。但是其最主要的特點是其作為一種結(jié)構(gòu)化數(shù)據(jù),能夠控制對不同元素的授權(quán)查看[6-7]。
XML加密技術(shù)的主要特點有:
1)在數(shù)據(jù)傳輸過程中的每個節(jié)點都能保持數(shù)據(jù)的安全性;
2)支持包括XML文檔在內(nèi)的任意內(nèi)容的加密;
3)以XML形式表現(xiàn)被加密的數(shù)據(jù);
4)可以從XML文檔中選出一部分內(nèi)容進行加密。
XML加密技術(shù)實現(xiàn)這種應(yīng)用的方法是引入了加密顆粒度(Encryption Granularity)的概念,即對每個 XML文件都可以進行如下操作:
1)加密整個XML文檔;
2)加密文檔中的任意元素;
3)加密文件中元素的內(nèi)容;
4)對加密過的元素或內(nèi)容進行再加密。
目前已經(jīng)存在一些Internet加密和安全協(xié)議,SSL/TLS則只能是對整個文檔進行加密。XML加密并不能替代這些己有的安全協(xié)議,不過它能解決完全不同類型的安全性問題。目前對XML文檔加密的研究都只限于一般加密標(biāo)準的使用,國外近幾年在新的加密標(biāo)準上也有所研究,特別是將高級加密標(biāo)準結(jié)合XML文件傳輸在電子商務(wù)平臺應(yīng)用的也較少,為此正是本文研究的意義。
本節(jié)首先提出結(jié)合XML文檔傳送的電子商務(wù)平臺安全框架,并結(jié)合使用高級加密標(biāo)準 (AES)算法,以.NET開發(fā)的電子商務(wù)平臺中訂單轉(zhuǎn)化XML文件,并對該訂單進行加密解密處理,最后測試實現(xiàn)了XML文檔加密解密的模塊功能,提高了電子商務(wù)交易中的在線支付的安全性。
為了保證購物中訂單信息的安全性,根據(jù)網(wǎng)站平臺對XML數(shù)據(jù)安全的要求,所設(shè)計的電子商務(wù)平臺XML數(shù)據(jù)安全框架如圖1所示,首先需要把訂單在發(fā)送端轉(zhuǎn)化為XML文檔,然后進行安全處理并通過網(wǎng)絡(luò)傳送。
圖1 XML安全系統(tǒng)框架Fig.1 The XML security system framework
隨著對稱密碼的發(fā)展,DES數(shù)據(jù)加密標(biāo)準算法由于密鑰長度較小(56位),已經(jīng)不適應(yīng)當(dāng)今分布式開放網(wǎng)絡(luò)對數(shù)據(jù)加密安全性的要求,因此1997年NIST公開征集新的數(shù)據(jù)加密標(biāo)準,即AES。經(jīng)過三輪的篩選,比利時Joan Daeman和Vincent Rijmen提交的Rijndael算法被提議為AES的最終算法。此算法將成為美國新的數(shù)據(jù)加密標(biāo)準而被廣泛應(yīng)用在各個領(lǐng)域中。盡管人們對AES還有不同的看法,但總體來說,AES作為新一代的數(shù)據(jù)加密標(biāo)準匯聚了強安全性、高性能、高效率、易用和靈活等優(yōu)點。AES設(shè)計有3個密鑰長度:128,192,256位,相對而言,AES的 128密鑰比 DES的 56密鑰強1 021倍。AES算法主要包括3個方面:輪變化、圈數(shù)和密鑰擴展。綜上所訴,AES是指定的標(biāo)準密碼系統(tǒng),未來將由政府和銀行業(yè)用戶使用。為了進一步提高電子商務(wù)應(yīng)用領(lǐng)域電子訂單加密的安全性,在后面的設(shè)計中將采用這種算法。
根據(jù)設(shè)計分析和前面章節(jié)對數(shù)據(jù)加密算法的分析結(jié)果,從加解密速度、系統(tǒng)開銷、密鑰管理和安全性等方面考慮,該電子商務(wù)平臺中的重要關(guān)鍵信息用到AES加解密算法進行加密。再結(jié)合System.Security.Cryptography.Xml命名空間中的類設(shè)計數(shù)字簽名模塊。首先設(shè)計出整個加密解密的系統(tǒng)流程圖如圖2所示。
圖2 XML文檔加密和數(shù)字簽名流程圖Fig.2 XML encryption and digital signature flow chart
在后臺登錄管理新添加一個加密設(shè)置模塊頁面Manager Security.aspx,管理員通過登錄后臺管理界面,在“加密信息設(shè)置”菜單內(nèi)設(shè)置加密和數(shù)字簽名的方案,并且可以靈活的設(shè)置需要加密的字段。這個管理權(quán)限只有管理員可以使用,這樣即使前臺用戶查看已經(jīng)加密的訂單,也無法獲知本平臺是設(shè)置的何種加密方式,保證了訂單在網(wǎng)上傳送的安全性。如圖3電子商務(wù)平臺后臺管理界面中的加密信息設(shè)置模塊。管理員可以在后臺管理中設(shè)置需要加密的字段,如在購物過程中
圖3 后臺管理界面中的加密信息設(shè)置模塊Fig.3 Encryption information background management interface settings module
通過上面的分析過程,目前完成Signature.cs、Asymmetric.cs和SymmetricKey.cs這3個類的設(shè)計是系統(tǒng)的核心問題,結(jié)合高級加密標(biāo)準 (AES)算法和C#編程的方式,下面具體分析一下其實現(xiàn)的核心算法程序。
1)用對稱密鑰對XML元素進行加密的實現(xiàn)過程
可以使用 System.Security.Cryptography.Xml命名空間中的類對XML文檔中的元素進行對稱加密。此加密使用高級加密標(biāo)準(AES)算法對XML元素進行加密。主要程序如下:
public class SymmetricKey
{public static RijndaelManaged CryptographyXml(string fileUrl, string targetUrl, string tagName){RijndaelManaged key=null;
try{
key=new RijndaelManaged();
XmlDocument xmlDoc=new XmlDocument();
xmlDoc.PreserveWhitespace=true;
xmlDoc.Load(fileUrl);
Encrypt(xmlDoc, tagName, key);xmlDoc.Save(targetUrl);}
catch (Exception e)
{throw new Exception("出現(xiàn)異常"); }
return key;}
2)對稱密鑰對XML元素解密的方案
當(dāng)使用對稱算法對XML數(shù)據(jù)進行加密時,必須考慮使用相同的密鑰對XML數(shù)據(jù)進行解密。上述的方案不在加密的XML中存儲或加密AES密鑰。
使用System.Security.Cryptography.Xml命名空間中的類對XML文檔中的元素進行非對稱加密。使用了兩個密鑰對一個XML元素進行加密。它生成RSA公鑰/私鑰對,并將密鑰對保存到安全密鑰容器中。然后使用高級加密標(biāo)準(AES)算法創(chuàng)建一個單獨的會話密鑰XML數(shù)據(jù)保存到XML文檔中的新
public class Asymmetric
{public static void CryptographyXml (string fileUrl, string targetUrl, string tagName)
{XmlDocument xmlDoc=new XmlDocument();
try{
xmlDoc.PreserveWhitespace=true;
xmlDoc.Load(fileUrl);}
catch
{throw new Exception(“加載文件錯誤”);}
CspParameters cspParams=new CspParameters();
cspParams.KeyContainerName= “XML_ENC_RSA_KEY”;
RSACryptoServiceProvider rsaKey=new
RSACryptoServiceProvider(cspParams);
try
{Encrypt(xmlDoc, tagName, “EncryptedElement1”,rsaKey, “rsaKey”);
xmlDoc.Save(targetUrl);}
catch
{throw new Exception("加密文件失敗");}
finally
{rsaKey.Clear();}}
對XML元素進行非對稱密鑰解密,可從密鑰容器中檢索出 RSA私鑰,用它對密鑰進行解密,然后使用會話密鑰對文檔進行解密。
3)XML數(shù)字簽名和驗證的實現(xiàn)過程
可以使用 System.Security.Cryptography.Xml命名空間中的類通過數(shù)字簽名對XML文檔或XML文檔的部分進行簽名。數(shù)字簽名后還可以驗證簽名數(shù)據(jù)沒有被更改。下面的程序算法創(chuàng)建一個RSA簽名密鑰,將該密鑰添加到安全密鑰中,然后使用該密鑰對XML文檔進行數(shù)字簽名。最后我們可以檢索該密鑰來驗證XML數(shù)字簽名。對 XML文檔進行數(shù)字簽名的算法實現(xiàn)方案,主要程序如下:
///
public class Signature
{public static void CryptographyXml (string fileUrl,string targetUrl,string tagName)
{XmlDocument xmlDoc=new XmlDocument();
try{xmlDoc.PreserveWhitespace=true;
xmlDoc.Load(fileUrl);}
catch{}
CspParameters cspParams=new CspParameters();
cspParams.KeyContainerName= “XML_DSIG_RSA_KEY”;
RSACryptoServiceProvider rsaKey=new
RSACryptoServiceProvider(cspParams);
try{
SignXml(xmlDoc, rsaKey);
xmlDoc.Save(targetUrl);}
catch{}
finally{rsaKey.Clear();}}
驗證 XML文檔的數(shù)字簽名算法實現(xiàn)方案:
①必須使用與簽名時所使用的非對稱密鑰相同的密鑰。
②使用RSACryptoServiceProvider類檢索公鑰。
③通過從磁盤加載XML文件創(chuàng)建的對象。
④創(chuàng)建一個新的 SignedXml對象,并將 XmlDocument對象傳遞給它。
⑤找到
⑥將第一個
⑦使用CheckSignature方法和 RSA公鑰檢查簽名。此方法將返回指示成功或失敗的布爾值。
由于網(wǎng)上交易涉及到買賣雙方和銀行,買賣雙方只需要知道購買的訂單信息和客戶的聯(lián)系方式,而不需要知道客戶的信用卡信息。而作為雙方中介的銀行不需要知道客戶的訂單信息,只需要知道客戶的信用卡信息。這樣我們就需要對訂單中需要加密和保護隱私的元素進行選擇加密,然后再把訂單信息通過網(wǎng)絡(luò)發(fā)送出去,完成網(wǎng)上交易,保證信息的安全性。以加密訂單文件中的最為重要的信用卡信息為例進行測試。
選擇的系統(tǒng)測試環(huán)境如下:
1)測試軟件:Microsoft Visual Studio 2008,C# 編程
2)測試環(huán)境:Windows XP SP2,NET Framework 3.5,Internet Explorer 7.0,IIS 5.1
3)引用組件:System.Security.dll
4)命名空間:System.Xml、System.Security.Cryptography 和System.Security.Cryptography.Xml。
電子商務(wù)網(wǎng)站生成一個名為 “20091218204059.xml”的訂單文件。 且該文件中包含一個“
1)用對稱密鑰對
加密后生成一個20091218204059_3.xml的訂單文件,表示對源XML文件加密已經(jīng)成功。
2)對稱密鑰解密程序在此省略。用對稱密鑰對
非對稱密鑰對XML元素加密和解密的測試和XML數(shù)字簽名和驗證的測試在此省略。
通過對稱密鑰對 XML元素加密和解密測試,在XML文檔編寫符合規(guī)范情況下,可以對任意需要加密的XML元素進行加密,這樣就提高了XML文檔在網(wǎng)絡(luò)中傳輸?shù)陌踩?。通過非對稱密鑰對XML元素加密和解密測試,也達到了加密任意XML元素的目的。通過XML元素數(shù)字簽名和驗證的測試,達到了XML文檔在網(wǎng)絡(luò)傳輸中簽名和驗證的需要,進一步提高了電子商務(wù)平臺的安全性。
本文對電子商務(wù)的概念及其安全性做了相關(guān)的介紹說明,探討了如何利用XML技術(shù)加強其安全性,即XML加密和XML數(shù)字簽名不但可以保護數(shù)據(jù)的私有性,還能對整個交易提供數(shù)字證明,保證交易的不可抵賴性。同時,基于軟件復(fù)用性的思想,將XML簽名與加密技術(shù)的實現(xiàn)進行組件化封裝,在保護數(shù)據(jù)安全的同時也提高了軟件的可重用性。
[1]Gray P Schneider,James T Perry.電子商務(wù)[M].成棟,譯.北京:中國機械工業(yè)出版社,2000.
[2]傅海英,李輝,王育名.XML及相關(guān)安全研究進展[J].計算機應(yīng)用研究,2004(4):86-88.FU HAI-ying,LI Hiu,WANG Yu-ming.An overview of XML and XML-related security[J].Application Research of Computers,2004(4):86-88.
[3]Mark Birbeck.XML高級編程[M].北京:機械工業(yè)出版社,2005.
[4]趙克立.XML1.x編程培訓(xùn)教程[M].清華大學(xué)出版社,2002.
[5]XrML [EB/OL].http://technet.microsoft.com/zh-cn/library/cc747717(WS.10).aspx.
[6]耿建勇.XML安全技術(shù)的應(yīng)用研究[D].北京:中國科學(xué)院,2005.
[7]耿建勇,魯士文.基于XML加密規(guī)范的安全數(shù)據(jù)交換的實現(xiàn)[J].計算機應(yīng)用與軟件,2005(2):99-101.GENG Jian-yong,LU Shi-wen.Safe data exchange based on XML encryption[J].Computer Applications and Software,2005(2):99-101.