① 隱私計算-密碼學-同態加密
近年來,隨著大數據與人工智慧的盛行,針對個人的個性化的推薦技術的不斷發展,人們在享受便利的同時,也深深的感覺到無處不在的監控與監事,比如剛剛瀏覽了一個網站的商品,當去其他網站訪問的時候就會推薦類似的產品;剛剛搜索了某件商品,在很多其他的場景中都會給你推薦。這種體驗,談不上不好,也談不上多壞,但是如果仔細想想,就感覺自己的網上進行裸奔,個人隱私,一清二楚,毫無隱私可言,細思極恐。
不過隨著廣大用戶對於個人隱私的重視程度不斷加強,以及法律法規的不斷完善,針對個人隱私的保護提出了更高的要求,什麼樣的數據可以採集、收集與使用,如何使用都是一個比較敏感的問題。十三屆全國人大常委會第三十次會議表決通過了《 中華人民共和國個人信息保護法 》,並與2021年11月1日起施行。確立個人信息保護原則、規范處理活動保障權益、禁止「大數據殺熟」規范自動化決策、嚴格保護敏感個人信息、賦予個人充分權利等。新規施行後,違法的主體將 最高可處五千萬以下或者上一年度營業額百分之五 以下的罰款。
鑒於上述情況,近年來隱私計算技術被不斷的提及,源於其有優秀的數據保護作用,使得 「數據不出域、數據可用不可見、數據可算不可見」 ,限定了數據的使用場景,防止了數據的泄露,而引起了業界的熱捧。
隱私計算技術的演進歷程如下圖描述,以下是楊強教授在KDD 2021中國區的分享材料:
可以看到,隱私計算技術從1979年就開始了,最開始是安全多方計算、到差分隱私、到TEE, 再到最近火的不能再火的聯邦學習 ,一系列的技術應運而生。那為啥現在隱私計算這么火呢。
註:隱私計算技術成熟度曲線
但是這些技術本身的安全加密都是採用共同的方法與策略,下面講述下隱私計算的加密技術。
本文主要介紹同態加密,
眾所周知,優秀的程序員需要 嚴謹的邏輯思維與具象能力 ,當然在材料的時候,可能需要適當的渲染。但是對於技術的理解,對技術的探索,嚴謹的邏輯與堅實的推理是非常重要的。所以,對於「數據加密」這個命題,需要進行一番探索。
如此三態合一,即可保障數據的全鏈路的生命周期安全 。
那麼有沒有辦法解決數據計算的安全問題呢?答案就是 同態加密技術 。保障數據的運行態的安全,那麼同態加密技術具體是如何實現,如何應用,並且有哪些限制呢?
什麼是同態加密? ,引用Gentry大佬的原話:
同態加密(Homomorphic Encryption, HE),指滿足密文同態運算性質的加密演算法,即數據經過同態加密之後,對密文進行某些特定的計算,得到的密文計算結果在進行對應的同態解密後的明文等同於對明文數據直接進行相同的計算, 實現數據的「可算不可見」 。同態加密的實現效果如圖所示。
舉個例子: 國內某家大型的三甲醫院,由於歷史悠久,並且醫術精湛,歷史遺留了大量的用戶病例數據 。如今思考基於這些病例數據進行建模分析。但是由於數據量特別巨大,醫院本身的IT資源有限,計算能力不足。
這個時候,雲廠商找了過來。但是對於醫院來說,這些數據本身是用戶的隱私信息,並且也是醫院的核心價值,所以盡管雲廠商再三保證數據安全, 但是醫院還是不能夠放心的將數據上傳到雲廠商進行計算 。
正當這個事情推進不下去的時候,雲廠商從密碼行業花大價錢招來某個大牛,大牛提出一個方案,這樣吧,我們現在有 這樣一門技術,不需要傳輸明文數據,只需要傳輸密文就好,而且加密秘鑰由醫院自己保存,我們基於上傳的密文數據做不解密的密態運算( 並計算函數醫院提供就好),這樣數據不會泄露,雲廠商對數據無感知,之後傳回密文結果,醫院自己解密就好 。醫院一聽非常高興,那就這么辦吧。
下面將核心流程描述下。
這里,大家可能有個問題,這個f應該是什麼樣的函數,有什麼樣的限制條件?HE方案是支持任意的數據處理方法f,還是說只支持滿足一定條件的f呢?根據f的限制條件不同,HE方案實際上分為了兩類:
Paillier加密演算法是Pascal paillier[1]在1999年發明的概率公鑰加密演算法,該演算法 基於復合剩餘類的困難問題,是一種滿足加法的同態加密演算法 ,已經廣泛應用在加密信號處理或第三方數據處理領域。
前面我們分析過 同態加密的核心流程 ,大家可以一起回憶一下。核心的函數包括:秘鑰生成、明文加密、密文解密,下面我們來一步一步的分析,並且描述下,
秘鑰的生成主要有如下的步驟,
下面介紹一個完整的同態運算,m由 組成,介紹下同態加密的是如何使用密文計算的。
② SEAL,使用的對稱加密技術是
同態加密。對稱密鑰加密方案使用相同的密鑰進行加密和解密,故對稱加密方案允許任何知道公鑰的人對數據進行加密,而同態加密就允許多人共同加密,故同態加密是SEAL加密的首選技術。
③ 關於java直接進行密文運算的問題
你說的要麼很先進,要麼就是亂套概念,沒事幹啥這么做?這是小問題? 乘法根本跟位元組沒關系,也不等於RSA運算,非要這么做得正確結果只能改為enc(12*12)。
④ 網路安全就業難度大不大
未邀自答。本來我都關機、躺下、准備睡覺了,結果手賤點了知乎,看到了這么一個問題,又看到好朋友 @scalers回答了這個問題,忍不住又把電腦打開,准備花一點時間認真回答一下這個問題。這可能不僅是對問題本身的回答,也是差不多這一年來我對信息安全這個領域的理解和體會吧。=============================利益相關:信息安全方向博士生,主攻Public Key Encryption,主要方向是Predicate Encryption。1-2年之內就要就業,方向應該就是數據安全了。這一年認識了不少領域內的前輩和朋友,了解到不少現狀。=============================0. 總體感受:人才既飽和,又匱乏現在安全行業的現狀基本是:上層人才極度匱乏,下層人才極度飽和。大概半年多前和一位領域內的人士聊天,對方說了這么一句話:我們招人要求真的不高啊,只要領域相關,7年以上工作經驗就好了。當時,幼稚的我心想,我靠你逗我呢,這還要求不高?哪兒找安全領域干7年以上的人去?經過半年的折騰,我現在的感覺是:這個要求真的不高,一點都不高,可能太低了…為什麼?因為信息安全這個領域太大了,大到什麼程度呢?大到做這個領域的人可能需要把幾乎計算機科學的所有領域全理解(注意,不是了解,是理解)以後,才能集大成,然後把這個領域做好。=============================1. 數學和計算機理論基礎要求信息安全中最理論的基礎是密碼學。密碼學誰提出來的?圖靈提出來的。為什麼是他提出的密碼學?因為密碼學的實現基礎是圖靈機,或者說是有限自動機原理。密碼學的理論基礎是抽象代數和資訊理論。想要比較深入的學習密碼學裡面的知識,至少要明白計算機領域的歸約(Rection),計算復雜性理論;至少要明白抽象代數裡面的群(Group)、環(Ring)、域(Field);至少要了解資訊理論中信息熵的概念;這些如果不理解的話,安全證明估計就過不去了…要是追新,看看密碼學界的發展,起碼說提出一個名字能明白是什麼意思,估計得了解了解橢圓曲線(Elliptic Curve),雙線性對(Bilinear Pairing)或者多線性對(Multilinear Pairing),格(Lattice)等等。=============================2. 編程能力要求有人說了,我不用學密碼學理論,我能看懂論文,把方案實現了就行了啊。因為實現的方案從理論上是否安全,要考察參數的選擇。參數選擇的話,就得看懂安全性證明了。我個人只是做了Java Pairing-Based Cryptography Library(jPBC)的一些實現,幾乎時常會收到很多郵件,詢問這個庫怎麼用,為什麼自己實現的不對。多數情況都是因為對根上的東西沒理解,導致用起來不對。有人說了,我也不用看懂論文,我能寫最經典的密碼學演算法,能正確調用就好了。很遺憾,就算是最經典的密碼學演算法,即使是有經驗的開發人員,絕大多數都不能正確實現。僅以RSA為例,請移步我的專欄文章:RSA有多安全,有多不安全?Black Hat 2014 - The Matasano Crypto Challenges解析 - 第一部分 - 劉學酥的密碼學與信息安全專欄 - 知乎專欄看看裡面有多少坑吧。=============================3. 計算機相關技術能力要求有人說了,我不用寫密碼學演算法,我能正確用就行了。提到網路通信,就有計算機網路的相關知識了。我個人感覺計算機網路知識的復雜度現在和操作系統都差不多了。尤其是現在分布式系統,比如分布式計算和分布式存儲技術的普及,分布式計算機網路本身就構成了一個比操作系統還要復雜的總系統。做安全的話,沒有計算機網路和操作系統的知識幾乎只能做點皮毛工作。提到網路和操作系統,就會想到這本身就需要比較強的編程能力。舉個簡單的例子,Java優秀的網路通信框架Netty和MINA(感謝 @Edsger Lin 的指正,這里打錯了),是不是需要了解一下?HDFS,MapRece是不是了解一下?要不要看看源代碼… 來吧,這相關的資料、書籍,可以放滿一個書櫃了。=============================4. 網路安全技術要求有人說了,我也不用懂這些,我是做技術的,了解網路知識以後,找漏洞挖漏洞,直接走向人生巔峰!怎麼說呢,漏洞這個東西雖然知識本身要求的不深入,但是非常考驗廣度。比如資料庫的了解,網路得了解,各種Web語言得了解,裡面有什麼坑得了解。而且,很多時候漏洞檢測和網路滲透會涉及到語言本身上去。舉個例子,Black Hat 2014中有個視頻,所在的公司開發了一套漏洞檢測工具Ravage(為什麼我知道,我聽譯的…逆天漏洞檢測及滲透生成工具——RAVAGE課程詳情)。這個工具的製作已經深入到JVM的匯編層了。=============================5. 文檔能力和與人交流的能力信息安全領域,不光是技術層面的,還有人員層面的。軟體開發過程中出現的漏洞,絕大多數都是開發人員沒有遵守安全軟體開發要求而導致的。同時,各個公司、各個產品的安全架構,安全技術都不太一樣。這種時候,為了保證產品的安全特性,就需要文檔撰寫和閱讀能力,以及交流能力了。我和某位領域內人士交流的時候,總聽到一種抱怨:我靠,這安全機制不是瞎搞么,這怎麼評估,怎麼實現?很遺憾,互聯網發展太快了,很多東西都沒有模塊化體系化,現實就是這樣。想要解決這個問題,就需要一群在計算機各個領域內都精通,或者退一步,都了解的人,將各種安全技術和產品抽象,從而提出並設計架構。這樣才能提出一種比較通用的方法,從架構上去解決大部分的安全問題。不過這對一個人的要求可是有點高啊。安全又僅僅是技術問題嗎?非也。信息安全中,技術佔3成,管理佔7成。技術再好,密鑰管理不成熟,開發流程不成熟,訪問控制機制設計的不成熟,甚至私下交易,從內部泄露用戶隱私,也會導致嚴重的安全問題。這並不是聳人聽聞。CSDN密碼資料庫泄露可能僅僅是冰山一角。要我看,用戶的密碼早就被泄露光了… 當然現在已經好了很多。這就意味著,管理也是個很困難的問題。說到管理,交流能力也是必不可少的。=============================6. 其他能力信息安全和通信技術是密不可分的。通信技術的發展必然會導致信息安全技術的發展。舉例來說,枚舉法是最沒創意的攻擊方法了。但是現在有了高性能計算機,分布式計算機系統,對於幾年前的數據,用枚舉法可能反而比其他方法更快。另一個例子,量子計算領域現在蓬勃發展,沒准幾年,十幾年或者幾十年後量子計算機就普及了。這並不是不可能,想想計算機從剛出現到現在人手幾台一共花費了多長時間?那個時候,現有的體制全部推翻重來,作為安全人員就要更新自己的知識庫了。當然了,這個例子有點極端,量子計算機真的來了,所有計算機科學相關的從業人員就要洗牌了。總的來說,信息安全領域要求從業人員隨時學習,隨時更新知識庫。而且這種更新速度是依賴於計算機科學這門學科的發展而來的。2008年DDoS攻擊還沒影子呢,現在DDoS幾乎就是家常便飯了。網路的迅速發展,特別是後面雲計算雲存儲的發展,給安全從業人員又帶來了更多的問題。這必須要求從業人員隨時更新自己的知識,持之以恆的站在最前沿思考問題。=============================7. 有人能做到嗎?密碼學精通,可以到安全研究院。比如很多著名密碼學家,Gentry,Shoup什麼的就在IBM,進行全同態加密的理論研究和具體實現。而且,理解密碼學的人學其他方面也比較快。但是需要到領域內快速積累。編程能力強,計算機相關技術強,就可以不光做安全了。但安全領域絕對歡迎這樣的人才。網路安全技術能力強,可以到任何一家互聯網公司做安全。知乎上的幾位技術派大牛們,大多是這方面的佼佼者。文檔能力和與人交流的能力強,可以做安全咨詢。這是個比較有意思的領域。這個領域更需要廣泛了解安全的相關知識。不僅從技術角度,也要從管理角度。我自己只是在公鑰密碼學中的一個很小的領域有一點點很小的成績。因為計算機基礎知識不足,接下來的一年我估計要各種補基礎知識了,而且估計還補不完。上面說的這些對人才的需求,基本上只要精通一點,就是領域內的佼佼者了。所以,信息安全領域是一個集大成的領域。而且幾乎任何一個分領域對於領域內知識的要求,都高於本身的要求。因為基礎不夠的話,想做安全就有點痴人說夢了。=============================8. 回到主題:會飽和嗎?回到問題上面來,安全人才會達到飽和嗎?我認為有生之年能把上面說的起碼都做過一遍,幾乎都是不可能的。信息安全的人才要求很高。能力強,哪怕是一方面能力強,都可以從茫茫人海中脫穎而出。一個直接的體現就是信息安全周圍配套內容的普及。我在做Black Hat,包括密碼學一些視頻的聽譯時,就嘗試過讓別人幫忙聽寫,我來翻譯。結果,即使是專業聽譯人員,拿到這些視頻也都瞎了。因為專業詞彙太多,幾乎是中文都不知道什麼意思。Black Hat系列這么好,為什麼一直以來沒人做字幕,聽寫翻譯?因為確實對聽譯人員要求很高。我自己水平有限,只能聽譯密碼學、Java、以及部分資料庫、網路通信相關主題的Black Hat,而且也會遇到各種問題,遇到從來沒聽說過的技術、開源代碼、工具、或者思想。當然這個過程也是收獲的過程。所以,從高層看,信息安全人才應該一直會保持匱乏的狀態,等待新鮮血液的注入。另一方面,由於門檻太高,不少人會在門外徘徊。門外的人多了,飽和一詞也就來了。對於我自己,雖然得到了領域內人士的部分認可。但是,越往裡面走,越發現裡面的坑有多深。唯一的辦法就是不停的學習和更新知識。畢竟,學習要比提出新方法簡單多了,大家說對嗎?=============================9. 只有信息安全領域是這樣?就如同事物都是螺旋向上發展的一樣,正像其他回答說的那樣,任何領域都是:水平不高,哪裡都飽和;水平高了,哪裡都會要。什麼叫水平高,高到什麼程度就夠了?我認為沒有盡頭。一個領域,越是鑽研,越是往深了看,就越發現自己的渺小和無能。這會反過來導致更強的求知慾和更強的動力。等覺得自己小到只是一個沙子的時候,抬頭一看,可能就會明白,絕大多數人,可能連分子大小都沒到,但他們認為自己內部的原子和電子,就是整個世界。希望我們都能成為一粒沙子,看著大海的波濤洶涌,而毫無意識的,為這個世界的組成貢獻自己的一份力量。以上。