云計算的安全性的難題,有解還是無解?
對于Google來說,如果希望AppEngine能夠獲得商業(yè)上的巨大成功,吸引更多用戶,尤其是企業(yè)用戶,最大的挑戰(zhàn)在于,如何保障客戶的數(shù)據(jù)和私有程序的安全。
舉個例子,譬如Google想勸說某家銀行,用不著銀行自己建數(shù)據(jù)中心,把銀行的數(shù)據(jù)存到Google的云計算平臺,每月給Google一筆數(shù)據(jù)托管費即可。銀行很可能會問兩個問題,
1. 如何防范Google員工偷窺銀行的數(shù)據(jù)?
2. 銀行有投資業(yè)務,所以銀行自己開發(fā)了一套軟件,用于評估投資風險和收益。如何防范Google員工偷窺這些軟件的代碼?
Google當然會派律師去游說,指天畫地地發(fā)毒誓,說如果出現(xiàn)Google偷窺數(shù)據(jù)及代碼的情況,根據(jù)雙方合同,Google必將受到法律嚴懲,等等。
但是銀行還是不放心,作案取證本來就麻煩,如果Google再做點手腳遮掩,很可能查無實據(jù)。即便能找到實據(jù),一個案子辦下來,時間也得拖很長。
這個問題,困擾的不是Google一家,而是所有負責數(shù)據(jù)托管的公司面臨的共同問題。所以,現(xiàn)在只有兩類公司,敢把數(shù)據(jù)托管給他人。一種是中小企業(yè),他們或許會覺得自己在競爭對手眼里不那么重要,對手不至于甘冒風險去刺探自己的機密。另一種是數(shù)據(jù)本身機密性不高的公司,譬如新浪網,天涯社區(qū)等等,他們的數(shù)據(jù)內容本來就是公開的。
所以,如果Google打算吸引重量級企業(yè)用戶來使用云計算平臺,最好的辦法是從技術上想出路,保證做到,即便Google挖空心思想偷窺,也看不到。
1. 有人問,為何不用VPN技術呢?
VPN(Virtual Private Network)虛擬私網,解決的是在如何通過公共網絡,遠程訪問企業(yè)內部私網的問題,譬如在家處理公司業(yè)務,需要把自家的電腦,通過公共網絡,接入到公司內部網絡中去。所以,VPN解決的問題主要在于,保證家里電腦和公司電腦傳輸數(shù)據(jù)時,數(shù)據(jù)通過公網時的安全。
經常在北京街頭看到振遠護衛(wèi)的押運車,以及持槍的押運員,負責運輸現(xiàn)鈔,有人戲稱他們是振遠鏢局。鏢局的任務之一是,把現(xiàn)鈔從銀行押運到各個ATM 自動取錢機,中途通過公共馬路?,F(xiàn)鈔安全到達目的地,鏢局的任務圓滿完成。但是,如果有誰把ATM取錢機撬開了,鏢局不負責任。
類似的道理,客戶可以通過VPN把數(shù)據(jù)安全地傳輸?shù)紾oogle云計算平臺,但是VPN不能阻止Google的內部員工偷窺存放在Google機器上的數(shù)據(jù)。
2. 還有人建議,可以給數(shù)據(jù)加密。
客戶在上傳數(shù)據(jù)到Google云計算平臺前,先用私鑰(private key)給數(shù)據(jù)加密,這樣存儲在Google云計算平臺的數(shù)據(jù),是加了密的數(shù)據(jù)。Google員工即便打開了文件,看到的也不過是一堆亂碼。當客戶授權給他的同事看數(shù)據(jù)時,給同事一份公鑰(public key)。同事用這個公鑰解碼,然后就能讀到真實的內容了。
德國人的鑰匙很有意思,辦公室的鑰匙,同時可以打開大樓的門,以及公司的門,但是不能打開隔壁辦公室的門。隔壁辦公室的鑰匙,也可以打開大樓的門,以及公司的門。所以,德國人的鑰匙和鎖,是有層次的。
公鑰也可以這么設計,一個部門的公鑰,不僅可以解密本部門的文件,而且可以解密公司內部公開的文件,但是不能解密其它部門的文件。實現(xiàn)這樣有層次的公鑰并不難,一個簡單的辦法是把整個公鑰分成幾段,第一段負責公司內部公開的文件,第二段負責某特定部門的文件等等。
這個辦法猛一聽起來似乎可行,但是仔細想想卻不然。它有四個缺陷,a. 不能給程序加密,b. 不能搜索加了密的數(shù)據(jù),c. 不能給數(shù)據(jù)庫文件加密,d. 公司員工離職后,有可能會造成私鑰和公鑰的外泄。
3. 程序如何加密。
按照前一段的思路,平時給程序加密,只有當運行程序前,才解密。程序運行結束后,再度加密,同時銷毀解密了的程序。但是這個辦法不可行。
解密和加密,是相當耗用CPU的,同時占用時間也比較長。如果實施平時加密,用時解密的措施,用戶等待時間會相當長。更嚴重的是,通常一段程序不能解決所有問題,一段程序往往會調用其它程序,其它程序又調用另外程序。如果平時把所有程序加密,用時再逐個解密,整個流程將占用很長時間,這將嚴重影響用戶的體驗。
現(xiàn)實中通行的辦法是給程序變形,學名叫Obfuscation。道理很簡單,把程序中的變量名稱轉換掉,同時切割整個程序,并且重新排序,以便混淆耳目。變了型的程序依然可以運行。
正常的編譯過程,是把人類可讀的源代碼(譬如用Java寫的程序),翻譯成機器代碼(譬如Java bytecode)。而反編譯是把機器代碼,逆向翻譯成人類可讀的源代碼。雖然Obfuscation不能從根本上阻止反編譯,但是卻增加了這個工作的難度。
雖然有難度,但是重賞之下必有勇夫。譬如,如果能盜竊銀行密碼,肯定會有人不辭勞苦地反編譯。
4. 加密與搜索。
“Greatness is never a given, it must be earned”,這句話怎么翻譯?在Google或者百度里搜一搜這句話,一定會發(fā)現(xiàn)這是奧巴馬總統(tǒng)就職演說中的一句。有人翻譯成,“偉大不是憑空而來的,而是贏得的”。意思當然不錯,但是覺得不如原句有氣勢,不如翻譯成,“坐等等不來偉大,偉大必定來自于努力”。
Google和百度是如何搜索到這話出自奧巴馬的演講呢?道理說穿了并不復雜。
首先,Google和百度建一個索引,學名叫倒排索引(inverted index)。倒排索引中記錄了每個單詞出現(xiàn)在哪些文章中,而且記錄了在這些文章中的什么位置出現(xiàn)過。
其次,當用戶搜索“Greatness is never a given”,搜索引擎通過倒排索引,查找“greatness”在哪些文章中出現(xiàn)過,查找“never”在哪些文章中出現(xiàn)過,等等。然后把眾多的搜索結果合并起來,看看哪些文章中不僅出現(xiàn)過“greatness”,還出現(xiàn)過“never”,“given”等等。
如果把奧巴馬原文加了密,不僅每個詞都變成了亂碼,而且詞與詞之間的空格消失了,甚至連詞序也可能被打亂。這樣一來,就沒有辦法按照通常的做法構建倒排索引。
怎么辦?思路有三條。
a. 把加密算法和構建倒排索引的算法通盤考慮,重新設計一套一體化的算法。
這個思路能夠一攬子解決我們面臨的所有問題,但是設計這套算法的難度很高。目前還沒有人能夠想出有效的算法。
b. 客戶自己動手建倒排索引,然后把索引加密,上傳到云計算平臺。
但是構建倒排索引是一件計算量很大的工作,如果客戶能夠自己構建倒排索引,那么就沒有必要使用云計算平臺。理由是,云計算平臺的賣點是方便客戶處理繁重的數(shù)據(jù)計算。如果云計算平臺不能幫助客戶構建他們專用的倒排索引,那么云計算的賣點就大大失色。
更嚴重的問題是,在使用索引的時候,必須先解密。如果解密了的索引被Google員工偷看了,那么加密就失去意義了。原因是,索引中透露了正文中出現(xiàn)過那些詞,以及這些詞出現(xiàn)的位置。通過索引中的這些信息,可以復制原文的。即便不能一字不漏的全文復制,也能復制得八九不離十。
所以,這個思路不可行。
c. 在云計算平臺中分離出一部份作為密室,專供企業(yè)用戶存放保密級別很高的數(shù)據(jù),以及運行保密級別很高的程序。
信息安全的法則是分離分離再分離。給每個企業(yè)用戶分配一部份機器作為密室。這些機器的Root權限掌握在企業(yè)用戶手里。Google的員工只能監(jiān)控密室中的機器的CPU,RAM和IO的使用情況,但是他們沒有權限進入機器,查看文件,運行程序。
這個辦法雖然技術含量不高,但是比較容易實現(xiàn)。缺點是容易造成資源浪費。因為如果給每個客戶單獨開密室,即使密室里的機器空閑,別人也沒法用。
5. 加密與數(shù)據(jù)庫。
數(shù)據(jù)庫最多只能對字段逐個加密,譬如“greatness”變成“@#¥%”。但是不能整句整段地加密,否則數(shù)據(jù)庫的索引,B+ tree,就沒法構建。
所以,對數(shù)據(jù)庫的系統(tǒng)管理員,無法實施高級別的加密。
6. 私鑰和公鑰的外泄。
公司員工離職后,很可能復制一份公司的公鑰和在職期間自己使用的私鑰帶走。如果沿用前面所述,用私鑰加密,用公鑰解密的辦法,員工離開公司后,仍然能閱讀公司的文件,甚至篡改當年自己在職期間起草的文件。
所以,最妥善的辦法是不讓員工直接接觸公司密鑰。從這個原則出發(fā),作者也好,讀者也好,都沒有密鑰。作者要加密,讀者要解密,讓他們把文件發(fā)給密鑰中心,由密鑰中心統(tǒng)一負責加密和解密。
另外,即便由密鑰中心負責保管密鑰,如果長期使用同一套密鑰,還是不安全。所以,密鑰中心定期更換密鑰,分批給文件重新加密。
這個辦法可行,但是比較笨拙,因為,a. 密鑰中心成為瓶頸,b. 給舊文件重新加密是負擔很重的工作。
為Google計,目前能做的,似乎是明確云計算的定位。
1. 鎖定目標客戶,這些客戶有一個共性,就是對內容和程序的安全性不敏感。
比如各種門戶網站,論壇,B2C網上商店,政務和各種公共事業(yè)的網站,以及中小型企業(yè)等等。這部分用戶數(shù)量不少,市場相當廣闊。
2. 提供特色服務,尤其是海量數(shù)據(jù)處理。
云計算平臺類似于巨型計算機??蛻衾迷朴嬎闫脚_,處理自己的計算中心很難完成的海量數(shù)據(jù)處理。例如:電腦動畫制作,天氣預報等等。
3. 根據(jù)不同的保密等級,做分級處理。
實際上一個企業(yè)的重要秘密信息是不多的,機密文件存放在企業(yè)自己的機房里。其它不需要保密的文件,托管到云計算平臺。這個市場也是很大的。