隱私和XML
金橋論壇?? 已閱讀次數(shù):472
?
概述?
?????????由于企業(yè)不能保證客戶提交給它們的資料的安全,電子商務(wù)的發(fā)展受到了嚴(yán)重的影響。那些上網(wǎng)但不進(jìn)行在線購物活動的消費(fèi)者表示,他們不進(jìn)行在線購物的原因是擔(dān)心個人資料被黑客竊取或?yàn)E用。從某種意義上說,XML能夠解決這一問題,而且已經(jīng)出現(xiàn)了許多利用XML解決隱私問題的標(biāo)準(zhǔn)。
簡介?
?????????在本篇文章中,隱私是指用戶控制其他人對自己的個人資料進(jìn)行搜集、使用和分發(fā)的能力,它已經(jīng)成為當(dāng)今互聯(lián)網(wǎng)面臨的一個重要問題。企業(yè)紛紛設(shè)立了隱私總監(jiān),各國政府也通過立法強(qiáng)制企業(yè)遵守在收集、使用用戶資料方面的一些規(guī)定。
但企業(yè)總是要收集用戶的資料,從某種意義上來說,如果不收集一些用戶資料,企業(yè)和用戶之間就無法進(jìn)行交易。但一個更令人感興趣的問題是,企業(yè)應(yīng)當(dāng)收集用戶的哪些資料,才能對雙方都有利,達(dá)到“雙贏”。
既然這不是一個新問題,那么它為何會在最近引起如此大的關(guān)注?原因有以下幾點(diǎn):
· 大多數(shù)用戶對互聯(lián)網(wǎng)技術(shù)不熟悉。用戶需要對他們不熟悉的問題作出決定和選擇,例如,瀏覽器的cookie,在正常使用的情況下,它可以用來維持企業(yè)與客戶間的關(guān)系,使用戶無需重復(fù)輸入相同的數(shù)據(jù)。但大多數(shù)用戶認(rèn)為它提供了一種使企業(yè)非法訪問他們計算機(jī)的方式。
· 網(wǎng)絡(luò)使信息的流動更快速和簡單━━包括授權(quán)的和未經(jīng)授權(quán)的。隨著越來越多的用戶資料被移到了網(wǎng)上,非法訪問發(fā)生的機(jī)會大大增加了。十年前,企業(yè)可能在沒有聯(lián)網(wǎng)的大型主機(jī)上維護(hù)客戶資料,而現(xiàn)在,它們都被移植到與互聯(lián)網(wǎng)服務(wù)器相連的數(shù)據(jù)庫中了,盡管方便了使用,但也為非法訪問埋下了伏筆。
過去,用戶資料大都被保存在紙上或磁存儲媒介上,盡管可能出現(xiàn)非法拷貝,但規(guī)模不可能很大,互聯(lián)網(wǎng)技術(shù)則能夠輕易地實(shí)現(xiàn)對信息的大規(guī)模非法訪問。
· 移動技術(shù)的出現(xiàn)。在未來數(shù)年內(nèi),智能電話將在歐美大量普及,這在過去是不可想象的,例如能夠通過移動設(shè)備發(fā)射的信號知道用戶的準(zhǔn)確位置。盡管這一技術(shù)能夠給用戶帶來便利,但同時也可能被濫用。
· 聯(lián)邦身份。微軟的.NET My Services和自由聯(lián)盟旨在為用戶設(shè)定統(tǒng)一的身份,用戶在一個網(wǎng)站上注冊,就可以登錄所有使用諠服務(wù)的網(wǎng)站。但是,多家網(wǎng)站共享用戶的資料,增加了濫用用戶資料的擔(dān)心。?
如果說對信息的訪問是隱私問題的一部分的話,XML將使隱私問題更嚴(yán)重。設(shè)想一下,如果黑客知道銀行在一個XML文件的<creditCardNumber>元素中維護(hù)客戶的信用卡號,他就無需再查找多個數(shù)據(jù)庫中的多個表,而只要釋放一個“寄生蟲”程序,讀取它遇到的所有文件,查找適當(dāng)?shù)臉?biāo)記,一旦發(fā)現(xiàn)后,就可以讀取其中的數(shù)據(jù)。
幸運(yùn)的是,XML還提供了其他的機(jī)制來阻止黑客竊取用戶的資料,在本篇文章中,我們將討論現(xiàn)有和未來的XML應(yīng)用程序中的隱私問題。在齫討論前,我們需要先來討論幾個與隱私相關(guān)的概念。
隱私的概念
個人身份資料
?????????個人身份資料(PII)是某人獨(dú)有的資料,至少是一個人區(qū)別于他人的一種方式。例如社會保險號、電話號碼、家族地址甚至是電子郵件地址,象年齡、性別以及工資都不能單獨(dú)確定一個人,因此它們就不是合適的PII。
Opt-in .VS. Opt-out
?????????Opt-in和Opt-out是指企業(yè)獲得用戶批準(zhǔn)共享倉儲資料的模式,二者之間的判別在于對資料價值的推斷以及采用什么樣的缺省共享策略。
Opt-in模式指用戶的資料具有較高的價值,用戶應(yīng)當(dāng)對每個共享他們資料的可能作出明確的選擇。在這種方式下,缺省的選擇是不共享用戶的資料。如果一個用戶愿意讓企業(yè)共享其資料,必須明確地作出“肯定”的選擇。
opt-out指用戶的資料具有不太大的價值。在這種模式下,除非用戶明確地作出“否定”的回答,用戶的資料將被企業(yè)共享。
隱私策略
?????????對于對企業(yè)信任,并愿意與之發(fā)生交易的客戶,如果客戶愿意,企業(yè)應(yīng)當(dāng)能夠讓客戶讀取或理解其有關(guān)數(shù)據(jù)保護(hù)和共享方面的策略。一般情況下,隱私策略將詳細(xì)地解釋數(shù)據(jù)保護(hù)的程度和所采取的機(jī)制,以及客戶的資料會在何時、何種情況下如何被共享。目前已經(jīng)有一些交互式的、基于web的工具幫助企業(yè)一步一步地開發(fā)利用隱私策略。
透明度
?????????企業(yè)需要考慮的另一個重要的問題是透明度,即消費(fèi)者能夠訪問自己被收集的資料。受法律與希望與客戶保持良好關(guān)系的愿望的影響,企業(yè)在這一問題上的態(tài)度是讓客戶在線訪問他們被收集的數(shù)據(jù)。然而,讓客戶在線訪問數(shù)據(jù)又不可避免地帶來安全性問題,因?yàn)檫@樣可能使第三方非法地訪問客戶的個人資料。
如果能夠使用適當(dāng)?shù)牟襟E驗(yàn)證用戶查看它們信息的請求,例如使用用戶名和口令等技術(shù),這一機(jī)制對雙方都有利。一方面客戶會對他們被收集的資料“非常放心”,另一方面,企業(yè)也節(jié)約了維護(hù)客戶資料的成本。
信息的使用
?????????信息的使用可以歸結(jié)為三大類:
· 被批準(zhǔn)有計劃的使用:企業(yè)通知了客戶,并得到了客戶的批準(zhǔn)。一個例子是收集并存儲客戶的發(fā)貨信息,簡化客戶未來的購物過程。
· 未經(jīng)批準(zhǔn)的有目的的使用:企業(yè)沒有通知客戶或者通知了客戶但沒有得到客戶的批準(zhǔn)。目的只是企業(yè)一方的,與客戶無關(guān)。一個例子就是企業(yè)將用戶的購物記錄出售給其他企業(yè)。
· 非計劃性使用:企業(yè)或客戶都沒有計劃或批準(zhǔn)的對資料的使用。一個例子是黑客打進(jìn)一個后端信用卡號數(shù)據(jù)庫,并將獲取的內(nèi)容公布到互聯(lián)網(wǎng)上去。
大多數(shù)與隱私有關(guān)的法律和技術(shù)都是通過讓客戶查看“未經(jīng)批準(zhǔn)的有計劃”使用清單,以作出相應(yīng)的決定。另外,企業(yè)還必須提供對“非計劃性使用”的預(yù)防。
安全
?????????安全與隱藏緊密相關(guān)。如果沒有相應(yīng)的安全機(jī)制的保障,隱私是沒有任何意義的。當(dāng)前大多數(shù)的隱私討論集中在用戶通知和選擇上,然而,不幸的是,客戶的選擇對能夠闖入后端數(shù)據(jù)庫系統(tǒng)的黑客沒有限制作用。客戶的選擇和通知對于解決最大嚴(yán)重的在線隱私問題沒有一點(diǎn)幫助:身份竊賊、計算機(jī)信用卡欺詐,安全問題不解決,就談不上真正的網(wǎng)上隱私。
安全經(jīng)常包含著機(jī)密、授權(quán)、認(rèn)證等這樣的概念,它們都在一定程度上與隱私有關(guān)。
信息共享
?????????當(dāng)前,互聯(lián)網(wǎng)用戶可能會與多家企業(yè)維持著相互獨(dú)立的個人資料,造成了浪費(fèi)和管理上的負(fù)擔(dān)。例如必須向只購過一次物的所有網(wǎng)站提供其地址。還會給在未來采用微軟的.NET My Services以及自由聯(lián)盟的類似服務(wù)時帶來麻煩。
在信息共享模式中,保證用戶資料的隱私要求:
1、受保護(hù)的數(shù)據(jù)儲存
2、請求應(yīng)用程序的授權(quán)和認(rèn)證
3、傳輸數(shù)據(jù)的保密性
?????????除對用戶信息訪問的控制外,上面描述的模式的另一個方面是一個中心認(rèn)證服務(wù)。安全專家已經(jīng)對由一家公司(微軟或其他公司)扮演電子商務(wù)交易中的這一中心角色表示擔(dān)心。微軟已經(jīng)承諾,它不會使用用戶的個人資料,也不會將它們賣給第三方,所有參與“自由聯(lián)盟”的廠商也需要作出類似的承諾。.NET My Services將通過一個XML API發(fā)布用戶的信息,微軟將它稱為“XML消息接口”(XMI),對于開發(fā)人員而言,它能夠簡化信息的獲取和與其應(yīng)用程序(基于瀏覽器和非基于瀏覽器的應(yīng)用程序)整合的難度。下面是一個存儲的XML的例子:
<c:contact xmlns:c="xmlns:p="<c:firstName xml:lang="en-us">Bill G.</c: firstName>
<c:lastName xml:lang="en-us">Ates<c:lastName>
<c:emailAddress>
<p: address>billg.ates@microsoft.com</p:address>
</c:emailAddress>
</c:contact>
與隱私相關(guān)的基于XML的技術(shù)
?????????目前,有許多標(biāo)準(zhǔn)組織和機(jī)構(gòu)都在進(jìn)行利用基于XML的技術(shù)解決與隱私相關(guān)的各方面問題的研究,下面我們將介紹相關(guān)的研究活動。
P3P
?????????“隱私參數(shù)選擇平臺”(P3P)是由“全球Web聯(lián)盟”(W3C)開發(fā)的一個協(xié)議,它描述了一種計算機(jī)能夠理解、網(wǎng)站可以用來描述它們的隱私政策的基于XML的語言。信息的種類包括聲明隱私政策的僉實(shí)體的聯(lián)系信息、用戶是否可以訪問他們被收集的個人資料、被收集的信息的不同類別、收集資料的目的以及哪些機(jī)構(gòu)能夠訪問收集的數(shù)據(jù)等。P3P是對長期以來網(wǎng)站向用戶提供的機(jī)器不能理解、容易引起歧義的“隱私”政策的響應(yīng)。下面是一個假想的網(wǎng)站的P3P策略:
<POLICIES xmlns="<POLICY discuri="<ENTITY>
<DATA-GROUP>
<DATA ref="#business.name">WebSite.com</DATA>
<DATA ref="#business.contact-info.postal.street">200
Main Street</DATA>
</DATA-GROUP>
</ENTITY>
<ACCESS><nonident/></ACCESS>
<STATEMENT>
<PURPOSE><admin/><develop/></PURPOSE>
<RETENTION><stated-purpose/></RETENTION>
<DATA-GROUP>
<DATA ref="#dynamic.http"/>
</DATA-GROUP>
</STATEMENT>
</POLICY>
</POLICIES>
上面的P3P策略表示,該公司沒有獲得任何個人身份資料(PII),僅獲得了用于管理和開發(fā)目的的動態(tài)HTTP數(shù)據(jù)記錄。
在IE6中包含了對P3P客戶端的支持,提供了一個用戶可以表明其選擇的界面,如下圖所示:
如上圖所示,微軟早期對客戶端P3P的支持需要用戶有對cookie行為的控制權(quán)。
如果用戶瀏覽的網(wǎng)站與用戶記錄的參數(shù)不同,或沒有發(fā)現(xiàn)隱私政策,IE就會通過其狀態(tài)欄中的一個圖標(biāo)警告用戶(參見下圖),并使用戶如何處理這一情況。
XACML━━XML訪問控制標(biāo)記語言
?????????XACML是一種獲取資源授權(quán)策略的提議,它將解決授權(quán)活動的控制問題。它之所以與隱私有關(guān)是因?yàn)椋L問控制是企業(yè)保證用戶隱私的一種安全機(jī)制,XACML可能被用來獲取用戶為資料源定義的隱私策略。?
?????????下面是一個XACML策略的例子,病人能夠訪問他自己的病歷。這一策略說明了XACML和SAML(安全主張標(biāo)記語言)之間的聯(lián)系。SAML定義了一種語法,認(rèn)證、授權(quán)主張和查詢能夠用它來表達(dá),并在網(wǎng)絡(luò)上傳輸。在下面的例子中,我們假設(shè)已經(jīng)收到了SAML AuthorizationDecisionQuery,它詢問應(yīng)當(dāng)授予要求查詢自己病歷的病人什么樣的權(quán)限。
<?xml version="1.0"/>
<rule>
<target>
<subject>
samlp:AuthorizationDecisionQuery/Subject/NameIdentifier/Name
</subject>
<resource>
<patternMatch>
<attributeRef>
samlp:AuthorizationDecisionQuery/Resource
</attributeRef>
<attibutevalue>medico.com/record.*</attibutevalue>
</patternMatch>
</resource>
<actions>
<saml:Actions>
<saml:Action>read<saml:Action>
</saml:Actions>
</actions>
</target>
<condition>
<equal>
<attributeRef>
samlp:AuthorizationDecisionQuery/Subject/NameIdentifier/Name
</attributeRef>
<attributeRef>
file://medico.com/records/patient/patientName
</attributeRef>
</equal>
</condition>
<effect>Permit</effect>
</rule>
XML Encryption
?????????XML Encryption是一個獲取在任意數(shù)據(jù)上完成加密操作結(jié)果的XML符號的提案。XML Encryption提案的一個重要功能就是它支持只對部分XML文檔加密,這不但能夠減少加密的工作量,更重要的是,它能夠?qū)⒎菣C(jī)密數(shù)據(jù)仍然用純文本形式表達(dá),使一般的XML工具能夠處理這部分內(nèi)容。下面的圖顯示了一個工資元素被使用XML Encryption加密在單獨(dú)的xenc名字空間的員工檔案:
<?xml version="1.0"?>
<employee id="b3456">
<name>John Smith</name>
<title>Senior Analyst</title>
<salary>
<xenc:EncryptedData>
<xenc:CipherData>
<xenc:Ciphervalue>AbC234ndZ...</xenc:Ciphervalue>
</xenc:CipherData>
</xenc:EncryptedData>
</salary>
</employee>
只有員工自己或被授權(quán)的人力資源代表才能夠解密<Ciphervalue>元素中的內(nèi)容,看到員工實(shí)際的工資。
XML Signature
?????????數(shù)字簽名定義了一個獲取對任何數(shù)據(jù)進(jìn)行數(shù)字簽名操作結(jié)果的XML模型。與以前的非XML數(shù)字簽名標(biāo)準(zhǔn)不同的是。XML數(shù)字簽名既是為了解決了互聯(lián)網(wǎng)和XML應(yīng)用中所帶來的問題,但它又充分利用了互聯(lián)網(wǎng)和XML。
XML Signature與隱私密切相關(guān),因?yàn)椋紫仍谙?NET My Services和Liberty這樣的信息共享環(huán)境中,將通過XML Signature對要求應(yīng)用程序驗(yàn)證的SOAP請求進(jìn)行處理;第二,用戶“肯定”的確認(rèn)可以作為XML Signature,以防止用戶以后再對作出的選擇反悔,如下圖所示:
如果用戶選擇了“Sign Confirmation”(確認(rèn))按鈕,就會(使用用戶的私有密碼)生成一個與顯示出的HTML網(wǎng)頁相關(guān)的XML Signature,并進(jìn)行存檔,以防止用戶對作出的選擇反悔。
當(dāng)然了,現(xiàn)在的瀏覽器還不支持完成對顯示的HTML網(wǎng)頁的數(shù)字簽名,更不用說XML Signature了。但擴(kuò)展瀏覽器功能,使它支持簽名的技術(shù)已經(jīng)問世了,最終XML Signature技術(shù)也會得到支持。
WS-Security
?????????WS-Security是由微軟提出的一個有關(guān)在SOAP消息中添加安全元數(shù)據(jù)的提案。在這里,我們將討論一個從NET My Services請求用戶資料的網(wǎng)站,它有二個方面與WS-Security有關(guān):
1. 請求用戶資料的應(yīng)用程序?qū)⑹褂肳WS-Security機(jī)制獲得.NET My Services的認(rèn)證,以便.NET My Services確定該用戶是否被授予了在其隱私策略中描述的權(quán)限。
2. 返回的用戶資料的機(jī)密性將通過WS-Security對加密功能的支持得到保障。?
?????????為了保證只有被授權(quán)的用戶能夠訪問相關(guān)資料,網(wǎng)站必須首先對用戶的身份進(jìn)行認(rèn)證。應(yīng)用程序并不直接向.NET My Services認(rèn)證,而是向微軟的Passport服務(wù)認(rèn)證,以獲得一個令牌。然后應(yīng)用程序再把令牌提交給NET My Services,在對令牌進(jìn)行驗(yàn)證并確認(rèn)它是來自Passport后,.NET My Services將確認(rèn)請求符合用戶的隱私策略。然后就會接受請求,并在SOAP響應(yīng)中返回請求的資料。?
?????????下面是一個SOAP客戶端向.NET My Services請求資料的例子,它說明了WS-Security名字空間和HSDL(.NET My Services的數(shù)據(jù)處理語言)的元素。為了簡單起見,我們在下面的代碼中活力了實(shí)際的名字空間定義:
<SOAP:Envelope>
<SOAP:Header>
<wsse:Security>
<wsse:BinarySecurityToken wsse:valueType="wsse:Kerberosv5"
EncodingType="wsse:Base64Binary" Id="token">
MIIEZzCCA9CgAwIBAgIQEmtJZc0...
</wsse:BinarySecurityToken>
<dsig:Signature>
<dsig:Reference="#busmsg"/>
<dsig:SignatureMethod Algorithm="#hmac-sha1">
<HMACOutputLength>128</HMACOutputLength>
</dsig:SignatureMethod>
<dsig:Signaturevalue>IU(89.Hl8*.</dsig:Signaturevalue>
<dsig:KeyInfo>
<wsse:SecurityTokenReference>
<wsse:Reference URI="#token"/>
</wsse:SecurityTokenReference>
</disg:KeyInfo>
</dsig:Signature>
</wsse:Security>
</SOAP:Header>
<SOAP:Body>
<hsdl:queryRequest id="busmsg">
<xpQuery select='/contact[Name="Smith"]'/>
</hsdl:queryRequest>
</SOAP:Body>
</SOAP:Envelope>
為了對SOAP消息進(jìn)行認(rèn)證和授權(quán),.NET My Services應(yīng)當(dāng)執(zhí)行下面的處理:?
?????????1、使用與Passport共享的私鑰加密<BinarySecurityToken>元素中的Kerberos說明書。說明書中包含:?
??????????????????A、發(fā)出請求的用戶的Passport的PUID。?
??????????????????B、發(fā)出請求的應(yīng)用程序的標(biāo)識符。?
??????????????????C、臨時的對話關(guān)健字。?
?????????2、檢查XML Signature中的<Reference>元素,判斷SOAP消息中的哪個元素是計算出來的MAC。?
?????????3、使用從Kerberos證書中解析出來的對話關(guān)健字,計算出相同元素的MAC。?
?????????4、對計算出的MAC與由發(fā)出請求的應(yīng)用程序提供的MAC進(jìn)行比較。?
?????????5、如果二個MAC相同,則比較被認(rèn)證的發(fā)出請求的應(yīng)用程序和用戶的隱私政策,判斷其請求是否應(yīng)當(dāng)被批準(zhǔn)。
?????????下面是一個SOAP響應(yīng)的例子,我們假設(shè)在SOAP響應(yīng)中返回的用戶資料是機(jī)密資料,用戶的隱私政策要求在傳輸過程中保證資料的保密性:
<SOAP:Envelope>
<SOAP:Header>
<wsse:Security>
<xenc:EncryptedData id="encdata">
<xenc:EncryptionMethod
Algorithm='http://www.w3.org/xmlenc#3des-cbc'/>
<xenc:CipherData>
<xenc:Ciphervalue>JS*du89sad7</xenc:Ciphervalue>
</xenc:CipherData>
</xenc:EncryptedData>
</wsse:Security>
</SOAP:Header>
<SOAP:Body>
<hsdl:queryResponse id="busmsg">
<xenc:CipherReference idref="#encdata"/>
</hsdl:queryResponse>
</SOAP:Body>
</SOAP:Envelope>