通過加密數據,Web應用甚至可以
提高計算過程中的數據安全性。
━━━ ━━━
曾經,黑客從塔吉特公司竊取了約4000萬條借記卡和信用卡記錄,從家得寶公司竊取了5600萬條記錄,從醫院運營商Community Health Systems公司竊取了近500萬條病人記錄。2015年6月,美國聯邦人事管理辦公室上百萬位聯邦雇員的個人信息遭到竊取。
盡管人們為保護敏感數據付出了巨大的努力,但黑客還是經常能夠得手。這個問題如今變得尤為嚴峻,因為現在大量的信息都被集中在各種云服務提供商的服務器上。大多數時候,我們甚至不知道這些設備在哪里,對于存儲其中的數據,我們怎么可能感到安全呢?
有一種解決方法,那就是在存儲數據之前就對其進行加密。這樣一來,即使攻擊者闖入了云提供商的系統并竊取了數據,他們也只會得到毫無意義的亂碼。
這個方法看似很簡單,但有一個很大的缺點:當數據被加密時,它對于壞人肯定是沒用了,但是在很多情況下,它讓好人也無法使用了。
今天的云提供商通常會對委托給它們的數據進行各種有效的計算——查詢、統計、分析趨勢等。有些提供商會對這些數據使用非常復雜的機器學習技術。但是,如果這些數據是加密的,那就誰都無法進行上述任何處理。
畢竟,如果臉譜網持有的圖像是加密的,它怎么能對你的照片運行人臉檢測算法來識別你的朋友呢?如果亞馬遜無法了解你的購買歷史,它怎么能提供購買建議呢?
因此,在簡單的數據存儲之外,過分地追求加密似乎是魯莽的。但是,在過去幾年里,一種變不可能為可能的技術已經出現了:它使云提供商能夠對已加密的數據執行多種計算。
該技術基于某種加密體系的特殊數學特性,使云提供商能夠進行有效的計算并生成加密數據,最后用戶可以對結果進行解密,以得到想要的內容。
這種方法的好處是,云服務提供商存儲的數據始終是加密的。所以,即使有人從云服務商的設備中竊取了所有數據(或將設備中的信息傳遞出去),也只能得到加密了的數據,基本上是毫無價值的。事實上,這種方法還可以防止黑客獲得云提供商計算機的全部訪問權限并隨意運行計算機上的軟件,即使遭到入侵也不會泄露數據。
如今的加密數據計算的工作有著很深的淵源,可以追溯到將近40年前。但是,直到現在這種計算才變得實用起來,這要部分歸功于我們在麻省理工學院計算機科學和人工智能實驗室參與開發的軟件工具。這些工具是復雜的,但你無須了解它們深奧的數學原理就可以明白它們的工作原理和運行方法,甚至可以做出直覺上不可能的事情——利用不可見的數據對有用的信息進行計算。
━━━ ━━━
為了說明我們正在進行的工作,我舉個假設的例子。比如說有一個人——我們叫她愛麗絲吧——正在使用一個在云端運行的醫療Web應用。她用瀏覽器在提供商的網站上輸入各種敏感信息——疾病癥狀、身體活動、飲食、信用卡支付信息等。不過,運行此服務的公司對安全性是一絲不茍的。愛麗絲的個人信息在本地的機器上就得到加密,然后再被發送到云提供商處,因此云提供商收到并存儲的只是經過加密的數據。
之后,愛麗絲要求根據她之前的輸入對某些信息(健身水平、飲食建議等)進行計算。值得稱道的是,云服務可以僅利用愛麗絲的加密數據來進行這些計算。所得到的答案對提供商沒有任何意義,但愛麗絲電腦上的軟件會自動解密這些結果,并將其以常見的方式呈現在愛麗絲的瀏覽器上。所以,從她的角度來看,她與Web應用之間的交互非常正常。
讓我們再想象一下,被授權獲取服務的醫生要求獲得以下統計數據:特定某一周的病人數量、某種疾病病患的風險因素,或是其他一些信息。這位醫生也會得到通過加密數據計算得出的結果,并且結果會以加密的形式返回到醫生的電腦上,此時,這些信息會自動解密并顯示出來。
總之,愛麗絲和醫生享受著與普通Web應用同樣水平的服務。不同的是,敏感信息不會被暴露給可能試圖闖入提供商的數據庫或監聽網絡通信的黑客。
這要怎么實現呢?為了解釋得具體一些,可以想象一個簡單的計算。試想一下,醫生想知道在過去一年里使用該系統并患有特定疾病的患者人數。假設云服務在一年中的每個月都有該疾病患病人數的記錄,但這個信息是加密的。
要回答醫生的詢問,云提供商需要以某種方式合計12個不同的加密數字并返回結果。這似乎是不可能的,但如果選擇適當的加密方案,還是可以實現的。
1999年,當帕斯卡爾?帕耶(PascalPaillier)在法國國立巴黎高等電信學院完成畢業論文時,他順便開發了一個性能出眾的加密系統:如果你將一組加密后的數字相乘,你將獲得整體加密的數據,這是非常值得稱道的。
因此,我們例子中的云服務只需要使用帕耶的加密系統,并將與當年每個月疾病總數對應的12個加密值相乘即可。這一運算將生成一個值,即12個月總體的加密值,且云服務無須讀取每個月的具體值。云服務將這個結果返回到醫生的電腦,然后電腦將這個值解密,并在醫生的電腦屏幕上顯示出這一年的全部數據。
這種加工加密數據的一般方法并不限于簡單的加法。如果你選擇了恰當的加密方案,你還可以利用加密數據完成各種其他任務,包括比較、排序、乘法和其他算術運算,以及三角函數。
━━━ ━━━
利用加密數據進行計算的想法首次出現在1978年,當時羅納德?李維斯特(Ronald Rivest)、倫恩?艾德曼(LenAdleman)和邁克爾?德托羅斯(Michael Dertouzos)撰寫了一篇題為《論數據庫和隱私同態》(On DataBanks and Privacy Homomorphisms)的開創性文章。在這篇文章里,他們介紹了在數據加密的狀態下利用其進行計算的想法。他們將可以支持這種計算的加密方案稱為“同態”。當時,他們并不知道如何實現允許執行各種計算的加密,其他人也不知道——但他們和其他計算機科學家們都急于找到一種方法。
他們一找就找了三十多年。2009年,當時還是斯坦福大學研究生的克雷格?金特里(Craig Gentry)取得了一項重大突破:他提出了一個加密方案,允許計算機對加密后的數據進行任何函數計算。這一方案被稱為全同態加密。
從數學的角度來看,金特里解決問題的辦法確實很出色。很快,一些研究人員提出了其他的全同態加密系統,主要針對金特里原方案的性能和安全性進行提升。
盡管有了這樣的進展,但仍然存在一個巨大的問題:與針對某一函數的非加密計算花費的時間相比,最佳全同態加密方案要多100萬倍。如果網站通常需要1秒鐘來計算出結果,那么完全同態加密則需要12天左右。這么慢的速度顯然是一個敗筆。
然后,在2011年,包括我們兩個人(本文作者)在內的一個安全和加密技術專家團隊搭建了一個名為CryptDB的系統。它允許Web應用以廣泛使用的結構化查詢語言(SQL)來執行一系列數據庫查詢,而運算速度只會降低27%。
它有什么訣竅呢?關鍵就是要擺脫“一個加密系統適用全部問題”的想法。全同態加密旨在支持一個加密方案中的所有函數,這使得它即使只進行簡單的運算也會很慢。
我們和同事們發現,專門針對一項運算的數據加密方案可以快得多。例如,帕耶的加密方案可以很快地計算出總體的加密值,但它不能進行其他運算。
為了支持多種運算,你需要使用各種專門的加密方案。每一種加密方案只對一項運算有效,但它們合起來就會覆蓋很大的范圍。
目前,許多常見的運算都有專門(和快速)的算法,其中一些是由我們開發的,包括加法、乘法、按等同性或順序比較、交集、多項式計算、機器學習分類任務和檢索加密文本等。使用所有這些算法來加密數據,并存儲多組加密的數據,你就可以利用加密的結果進行各種不同的計算。你只需在加密數據集之間來回切換,每次使用你需要進行運算的相應數據集即可。
CryptDB系統首次以務實的方式運用了這一理論,在行業中起到了帶頭作用。例如,在CryptDB系統的引領下(這也是表達對該軟件的擁護),谷歌最近部署了一個名為Encrypted BigQuery的系統。該系統可以在谷歌BigQuery數據庫的加密版中進行查詢。軟件巨頭SAP實施了一個名為Search Over Encrypted Data的系統,它在SAP的高性能分析設備數據庫服務器上使用了CryptDB系統。此外,麻省理工學院林肯實驗室的研究人員還將CryptDB用于一個特別版的開源Apache Accumulo數據庫。
由于每個系統都使用了各種不同的加密方案,應用設計師們在結合各種運算方式方面受到了限制。不過,你通常需要的只是對各種加密數據進行SQL查詢。
━━━ ━━━
2014年,我們開發了一個名為“邁拉”(Mylar)的系統,擴充了CryptDB的功能。邁拉不僅能在一個滿是加密數據的數據庫中進行查詢,還能讓Web應用的使用者相互分享數據。這種數據共享是許多Web應用最重要的功能,比如臉譜網用戶彼此分享照片和帖子、在線日歷的用戶共享活動等。根據用戶授予他人的權限,邁拉可以實現所有此類共享。
舉例來說,假設我們例子中的愛麗絲要和醫生分享她的病史,以便接受治療。在這里我們的愿望是,愛麗絲和她的醫生都能夠解密愛麗絲的醫療信息。即使黑客——我們叫他馬里斯吧——設法入侵了云服務提供商并盜取了所有存儲的數據和代碼,也無法破解愛麗絲的數據。
當然,這對于選擇與該醫生共享信息的任何人都同樣適用——也許包括數據庫中的每個人。事實上,讓醫生能夠獲取每個人的數據是回答許多重要問題的先決條件。例如,醫生可能想搜索所有存儲在云醫療應用中的數據,尋找患有一種罕見疾病的病人。醫生發送到Web應用的搜索請求將包含對應于該疾病名稱的加密關鍵字。如果所有數據都使用相同的密鑰進行加密,CryptDB系統就可以處理該請求。當然,問題是,不同人的記錄肯定會用不同的密鑰進行加密,所以在整個集合中進行搜索一般是不可能的。
邁拉向希望共享數據的用戶分發共享加密密鑰,從而規避了這個問題。這個過程必須謹慎進行,以防黑客欺騙用戶與他所控制的服務器共享數據。
為了避免這種情況,邁拉加入了一個特殊的瀏覽器擴展套件,以驗證從服務器上下載的代碼。沒有這個擴展套件,該系統仍然是有效的,但安全性要差一些。邁拉還提供了身份提供商服務,它就像一個Web認證中心。Web認證中心就是超文本傳輸協議(http)的安全版:當你訪問網站時,http能夠幫助確保你連接到真正要訪問的網站。
我們已經用邁拉來確保各種Web應用的安全性,包括醫療、聊天、論壇、照片共享、日歷和在線課程。這些試驗表明,邁拉的速度還是很快的:它僅將計算時間平均增加了17%。
邁拉已經得到了實際應用。在位于馬薩諸塞州牛頓市的牛頓-韋爾斯利醫院,邁拉被用于收集患有子宮內膜異位癥(一種痛苦的腹部疾病)的女性的相關信息。此時此刻,邁拉正在幫助保護這些患者的隱私。
━━━ ━━━
我們相信,利用Crypt-DB和邁拉這樣的系統,加密數據計算將成為保護存儲在云中的機密信息的主要策略之一。而且這種方法不僅可以保護數據,還可以保護運行線性代數運算、大數據分析和機器學習工具的云計算機。
在線存儲信息的安全性是如今的一個大問題,而加密數據計算可能是其解決方案的重要組成部分。它能防止敏感信息被竊取,原因很簡單:如果連掌握著數據的公司都不知道這些數據的意義,那么對攻擊者來說,這些數據也就毫無竊取的價值了。
作者:Raluca AdaPopa,Nickolai Zeldovich
往期推薦