隱私和XML
金橋論壇?? 已閱讀次數:472
?
概述?
?????????由于企業不能保證客戶提交給它們的資料的安全,電子商務的發展受到了嚴重的影響。那些上網但不進行在線購物活動的消費者表示,他們不進行在線購物的原因是擔心個人資料被黑客竊取或濫用。從某種意義上說,XML能夠解決這一問題,而且已經出現了許多利用XML解決隱私問題的標準。
簡介?
?????????在本篇文章中,隱私是指用戶控制其他人對自己的個人資料進行搜集、使用和分發的能力,它已經成為當今互聯網面臨的一個重要問題。企業紛紛設立了隱私總監,各國政府也通過立法強制企業遵守在收集、使用用戶資料方面的一些規定。
但企業總是要收集用戶的資料,從某種意義上來說,如果不收集一些用戶資料,企業和用戶之間就無法進行交易。但一個更令人感興趣的問題是,企業應當收集用戶的哪些資料,才能對雙方都有利,達到“雙贏”。
既然這不是一個新問題,那么它為何會在最近引起如此大的關注?原因有以下幾點:
· 大多數用戶對互聯網技術不熟悉。用戶需要對他們不熟悉的問題作出決定和選擇,例如,瀏覽器的cookie,在正常使用的情況下,它可以用來維持企業與客戶間的關系,使用戶無需重復輸入相同的數據。但大多數用戶認為它提供了一種使企業非法訪問他們計算機的方式。
· 網絡使信息的流動更快速和簡單━━包括授權的和未經授權的。隨著越來越多的用戶資料被移到了網上,非法訪問發生的機會大大增加了。十年前,企業可能在沒有聯網的大型主機上維護客戶資料,而現在,它們都被移植到與互聯網服務器相連的數據庫中了,盡管方便了使用,但也為非法訪問埋下了伏筆。
過去,用戶資料大都被保存在紙上或磁存儲媒介上,盡管可能出現非法拷貝,但規模不可能很大,互聯網技術則能夠輕易地實現對信息的大規模非法訪問。
· 移動技術的出現。在未來數年內,智能電話將在歐美大量普及,這在過去是不可想象的,例如能夠通過移動設備發射的信號知道用戶的準確位置。盡管這一技術能夠給用戶帶來便利,但同時也可能被濫用。
· 聯邦身份。微軟的.NET My Services和自由聯盟旨在為用戶設定統一的身份,用戶在一個網站上注冊,就可以登錄所有使用諠服務的網站。但是,多家網站共享用戶的資料,增加了濫用用戶資料的擔心。?
如果說對信息的訪問是隱私問題的一部分的話,XML將使隱私問題更嚴重。設想一下,如果黑客知道銀行在一個XML文件的<creditCardNumber>元素中維護客戶的信用卡號,他就無需再查找多個數據庫中的多個表,而只要釋放一個“寄生蟲”程序,讀取它遇到的所有文件,查找適當的標記,一旦發現后,就可以讀取其中的數據。
幸運的是,XML還提供了其他的機制來阻止黑客竊取用戶的資料,在本篇文章中,我們將討論現有和未來的XML應用程序中的隱私問題。在齫討論前,我們需要先來討論幾個與隱私相關的概念。
隱私的概念
個人身份資料
?????????個人身份資料(PII)是某人獨有的資料,至少是一個人區別于他人的一種方式。例如社會保險號、電話號碼、家族地址甚至是電子郵件地址,象年齡、性別以及工資都不能單獨確定一個人,因此它們就不是合適的PII。
Opt-in .VS. Opt-out
?????????Opt-in和Opt-out是指企業獲得用戶批準共享倉儲資料的模式,二者之間的判別在于對資料價值的推斷以及采用什么樣的缺省共享策略。
Opt-in模式指用戶的資料具有較高的價值,用戶應當對每個共享他們資料的可能作出明確的選擇。在這種方式下,缺省的選擇是不共享用戶的資料。如果一個用戶愿意讓企業共享其資料,必須明確地作出“肯定”的選擇。
opt-out指用戶的資料具有不太大的價值。在這種模式下,除非用戶明確地作出“否定”的回答,用戶的資料將被企業共享。
隱私策略
?????????對于對企業信任,并愿意與之發生交易的客戶,如果客戶愿意,企業應當能夠讓客戶讀取或理解其有關數據保護和共享方面的策略。一般情況下,隱私策略將詳細地解釋數據保護的程度和所采取的機制,以及客戶的資料會在何時、何種情況下如何被共享。目前已經有一些交互式的、基于web的工具幫助企業一步一步地開發利用隱私策略。
透明度
?????????企業需要考慮的另一個重要的問題是透明度,即消費者能夠訪問自己被收集的資料。受法律與希望與客戶保持良好關系的愿望的影響,企業在這一問題上的態度是讓客戶在線訪問他們被收集的數據。然而,讓客戶在線訪問數據又不可避免地帶來安全性問題,因為這樣可能使第三方非法地訪問客戶的個人資料。
如果能夠使用適當的步驟驗證用戶查看它們信息的請求,例如使用用戶名和口令等技術,這一機制對雙方都有利。一方面客戶會對他們被收集的資料“非常放心”,另一方面,企業也節約了維護客戶資料的成本。
信息的使用
?????????信息的使用可以歸結為三大類:
· 被批準有計劃的使用:企業通知了客戶,并得到了客戶的批準。一個例子是收集并存儲客戶的發貨信息,簡化客戶未來的購物過程。
· 未經批準的有目的的使用:企業沒有通知客戶或者通知了客戶但沒有得到客戶的批準。目的只是企業一方的,與客戶無關。一個例子就是企業將用戶的購物記錄出售給其他企業。
· 非計劃性使用:企業或客戶都沒有計劃或批準的對資料的使用。一個例子是黑客打進一個后端信用卡號數據庫,并將獲取的內容公布到互聯網上去。
大多數與隱私有關的法律和技術都是通過讓客戶查看“未經批準的有計劃”使用清單,以作出相應的決定。另外,企業還必須提供對“非計劃性使用”的預防。
安全
?????????安全與隱藏緊密相關。如果沒有相應的安全機制的保障,隱私是沒有任何意義的。當前大多數的隱私討論集中在用戶通知和選擇上,然而,不幸的是,客戶的選擇對能夠闖入后端數據庫系統的黑客沒有限制作用??蛻舻倪x擇和通知對于解決最大嚴重的在線隱私問題沒有一點幫助:身份竊賊、計算機信用卡欺詐,安全問題不解決,就談不上真正的網上隱私。
安全經常包含著機密、授權、認證等這樣的概念,它們都在一定程度上與隱私有關。
信息共享
?????????當前,互聯網用戶可能會與多家企業維持著相互獨立的個人資料,造成了浪費和管理上的負擔。例如必須向只購過一次物的所有網站提供其地址。還會給在未來采用微軟的.NET My Services以及自由聯盟的類似服務時帶來麻煩。
在信息共享模式中,保證用戶資料的隱私要求:
1、受保護的數據儲存
2、請求應用程序的授權和認證
3、傳輸數據的保密性
?????????除對用戶信息訪問的控制外,上面描述的模式的另一個方面是一個中心認證服務。安全專家已經對由一家公司(微軟或其他公司)扮演電子商務交易中的這一中心角色表示擔心。微軟已經承諾,它不會使用用戶的個人資料,也不會將它們賣給第三方,所有參與“自由聯盟”的廠商也需要作出類似的承諾。.NET My Services將通過一個XML API發布用戶的信息,微軟將它稱為“XML消息接口”(XMI),對于開發人員而言,它能夠簡化信息的獲取和與其應用程序(基于瀏覽器和非基于瀏覽器的應用程序)整合的難度。下面是一個存儲的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>
與隱私相關的基于XML的技術
?????????目前,有許多標準組織和機構都在進行利用基于XML的技術解決與隱私相關的各方面問題的研究,下面我們將介紹相關的研究活動。
P3P
?????????“隱私參數選擇平臺”(P3P)是由“全球Web聯盟”(W3C)開發的一個協議,它描述了一種計算機能夠理解、網站可以用來描述它們的隱私政策的基于XML的語言。信息的種類包括聲明隱私政策的僉實體的聯系信息、用戶是否可以訪問他們被收集的個人資料、被收集的信息的不同類別、收集資料的目的以及哪些機構能夠訪問收集的數據等。P3P是對長期以來網站向用戶提供的機器不能理解、容易引起歧義的“隱私”政策的響應。下面是一個假想的網站的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),僅獲得了用于管理和開發目的的動態HTTP數據記錄。
在IE6中包含了對P3P客戶端的支持,提供了一個用戶可以表明其選擇的界面,如下圖所示:
如上圖所示,微軟早期對客戶端P3P的支持需要用戶有對cookie行為的控制權。
如果用戶瀏覽的網站與用戶記錄的參數不同,或沒有發現隱私政策,IE就會通過其狀態欄中的一個圖標警告用戶(參見下圖),并使用戶如何處理這一情況。
XACML━━XML訪問控制標記語言
?????????XACML是一種獲取資源授權策略的提議,它將解決授權活動的控制問題。它之所以與隱私有關是因為,訪問控制是企業保證用戶隱私的一種安全機制,XACML可能被用來獲取用戶為資料源定義的隱私策略。?
?????????下面是一個XACML策略的例子,病人能夠訪問他自己的病歷。這一策略說明了XACML和SAML(安全主張標記語言)之間的聯系。SAML定義了一種語法,認證、授權主張和查詢能夠用它來表達,并在網絡上傳輸。在下面的例子中,我們假設已經收到了SAML AuthorizationDecisionQuery,它詢問應當授予要求查詢自己病歷的病人什么樣的權限。
<?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是一個獲取在任意數據上完成加密操作結果的XML符號的提案。XML Encryption提案的一個重要功能就是它支持只對部分XML文檔加密,這不但能夠減少加密的工作量,更重要的是,它能夠將非機密數據仍然用純文本形式表達,使一般的XML工具能夠處理這部分內容。下面的圖顯示了一個工資元素被使用XML Encryption加密在單獨的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>
只有員工自己或被授權的人力資源代表才能夠解密<Ciphervalue>元素中的內容,看到員工實際的工資。
XML Signature
?????????數字簽名定義了一個獲取對任何數據進行數字簽名操作結果的XML模型。與以前的非XML數字簽名標準不同的是。XML數字簽名既是為了解決了互聯網和XML應用中所帶來的問題,但它又充分利用了互聯網和XML。
XML Signature與隱私密切相關,因為,首先在象.NET My Services和Liberty這樣的信息共享環境中,將通過XML Signature對要求應用程序驗證的SOAP請求進行處理;第二,用戶“肯定”的確認可以作為XML Signature,以防止用戶以后再對作出的選擇反悔,如下圖所示:
如果用戶選擇了“Sign Confirmation”(確認)按鈕,就會(使用用戶的私有密碼)生成一個與顯示出的HTML網頁相關的XML Signature,并進行存檔,以防止用戶對作出的選擇反悔。
當然了,現在的瀏覽器還不支持完成對顯示的HTML網頁的數字簽名,更不用說XML Signature了。但擴展瀏覽器功能,使它支持簽名的技術已經問世了,最終XML Signature技術也會得到支持。
WS-Security
?????????WS-Security是由微軟提出的一個有關在SOAP消息中添加安全元數據的提案。在這里,我們將討論一個從NET My Services請求用戶資料的網站,它有二個方面與WS-Security有關:
1. 請求用戶資料的應用程序將使用WWS-Security機制獲得.NET My Services的認證,以便.NET My Services確定該用戶是否被授予了在其隱私策略中描述的權限。
2. 返回的用戶資料的機密性將通過WS-Security對加密功能的支持得到保障。?
?????????為了保證只有被授權的用戶能夠訪問相關資料,網站必須首先對用戶的身份進行認證。應用程序并不直接向.NET My Services認證,而是向微軟的Passport服務認證,以獲得一個令牌。然后應用程序再把令牌提交給NET My Services,在對令牌進行驗證并確認它是來自Passport后,.NET My Services將確認請求符合用戶的隱私策略。然后就會接受請求,并在SOAP響應中返回請求的資料。?
?????????下面是一個SOAP客戶端向.NET My Services請求資料的例子,它說明了WS-Security名字空間和HSDL(.NET My Services的數據處理語言)的元素。為了簡單起見,我們在下面的代碼中活力了實際的名字空間定義:
<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消息進行認證和授權,.NET My Services應當執行下面的處理:?
?????????1、使用與Passport共享的私鑰加密<BinarySecurityToken>元素中的Kerberos說明書。說明書中包含:?
??????????????????A、發出請求的用戶的Passport的PUID。?
??????????????????B、發出請求的應用程序的標識符。?
??????????????????C、臨時的對話關健字。?
?????????2、檢查XML Signature中的<Reference>元素,判斷SOAP消息中的哪個元素是計算出來的MAC。?
?????????3、使用從Kerberos證書中解析出來的對話關健字,計算出相同元素的MAC。?
?????????4、對計算出的MAC與由發出請求的應用程序提供的MAC進行比較。?
?????????5、如果二個MAC相同,則比較被認證的發出請求的應用程序和用戶的隱私政策,判斷其請求是否應當被批準。
?????????下面是一個SOAP響應的例子,我們假設在SOAP響應中返回的用戶資料是機密資料,用戶的隱私政策要求在傳輸過程中保證資料的保密性:
<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>