CryptDB簡單原理論述

1.面對threat 1

解決方案:通過把對數(shù)據(jù)庫進(jìn)行的操作(選擇,連接,投影等操作)進(jìn)行特殊處理,使得這些操作能夠執(zhí)行在已加密的數(shù)據(jù)上

這種解決方案存在的一大問題就是胆剧,目前還沒有研究出一種加密方式,使得任何執(zhí)行在數(shù)據(jù)庫上的操作醉冤,都能正確運行在加密過的數(shù)據(jù)上秩霍。因此就意味著需要在數(shù)據(jù)庫服務(wù)端存放多種經(jīng)過不同方式加密的數(shù)據(jù)。當(dāng)用戶執(zhí)行特定操作時蚁阳,Mysql-proxy就會截獲操作請求并使用使用特定的加密方式對該操作進(jìn)行加密铃绒,使得該操作能夠正確運行在Server端。

以下是proxy采用的幾種加密算法

(1)Random (RND).RND是最安全的一種加密方法,即使是兩個相同的明文,也可以映射到不同的密文上面省有。這種方法可以用來抵抗自適應(yīng)選擇明文攻擊轧邪,但是缺點就是很難在密文上進(jìn)行操作界弧。實現(xiàn)方法有AES等,這里不詳說。

(2)Deterministic (DET).DET的安全性會相對弱一點,相同的明文映射到相同的密文中灾票,所以可以很方便地對密文進(jìn)行操作,例如相同值查詢等茫虽,但是對于不同的表刊苍,相同的列,使用的key不一定相同濒析。

(3)Order-preserving encryption

(OPE). OPE允許數(shù)據(jù)的順序查找正什,它保證當(dāng)x

(4)Homomorphic encryption (HOM).HOM類型的加密可以使得一些計算可以直接在加密后的數(shù)據(jù)上面,例如HOMK(x)·HOMK(y) = HOMK(x + y)号杏,這類算法可以保證一些數(shù)學(xué)運算例如SUM等操作婴氮。

(5)Join (JOIN and OPE-JOIN).這種加密可以支持join運算,包括范圍join以及等值join(自然連接)盾致。因為在DET中莹妒,相同的列,在不同的表中可以用不同的key來加密绰上,所以相同的值在不同的表加密后的值不一樣。所以此類算法就是為了使加密后的列表能正確地進(jìn)行連接渠驼。

JOIN-ADJ是一種【對輸入確定性的函數(shù)】(就是相同的明文對應(yīng)的一定是相同的JOIN-ADJ值)蜈块,同時也是【可調(diào)整的利用秘鑰加密之后的hash值】(意思是這個hash值由對應(yīng)的加密算法生成,而且?guī)в锌烧{(diào)整的附加屬性的)。

JOIN-ADJ怎么使用百揭?

首先JOIN-ADJ是不可置反的爽哎。

因此利用了JOIN-ADJ的JOIN加密方案由如下所示:

JOIN(v) =

JOIN-ADJ(v) || DET(v)(這里的||符號起到連接字符串的作用)

在這個結(jié)構(gòu)之下,CryptDB通過比較JOIN-ADJ(v)來實現(xiàn)比較屬性名是否相同器一,通過解密DET(v)來獲取被加密的屬性值课锌。

當(dāng)每次proxy悉知了有新的JOIN操作到來,它會向DBMS傳遞一個key使得DBMS可以調(diào)整兩個列之間的JOIN-ADJ值祈秕,使得他們的值趨于一致(就是變成一樣的)(當(dāng)然必須明文要是相同的才行)渺贤。一旦他們經(jīng)過了調(diào)整,之后對于這兩個列的JOIN操作就無需再次調(diào)整他們的JOIN-ADJ值了请毛,因為他們會將這個值保留志鞍,直到需要作出改變?yōu)橹埂?/p>

顯然,這里提到的JOIN操作是具有可傳遞性的方仿,AB固棚、AC可以實現(xiàn)JOIN,那么BC同樣可以仙蚜。這樣ABC形成了一個所謂的“可傳遞組”的概念此洲。

作者對于可以實現(xiàn)JOIN操作的列對的管理是這樣實現(xiàn)的:(表名+列名),使得所有在“可傳遞組”中的列能共享同樣的join-base委粉。

CryptDB通過選擇兩列中字母表順序第一的列來作為基準(zhǔn)呜师,是為了防止發(fā)散,通過多次join之后艳丛,最后可以達(dá)到一個穩(wěn)定的匣掸,有共同join-base的狀態(tài),這樣就形成一個transition組氮双,比較像算法中的迭代法碰酝。

(6)Word search (SEARCH).這類加密方法允許對密文進(jìn)行像sql語句中的like語句之類的操作。但是cryptdb只支持一些完整的詞匯匹配戴差,不支持任意的相似匹配送爸。Server可以知道是否有信息可以匹配到一個token,但是它無法得知這個token的內(nèi)容以及匹配到的信息的明文暖释。

通過上述幾種加密算法袭厂,明文數(shù)據(jù)在服務(wù)器端被加密保存成對應(yīng)密文數(shù)據(jù)。當(dāng)接收到proxy加密后的操作請求球匕,就會針對對應(yīng)操作處理并返回密文數(shù)據(jù)纹磺。

但是這種通過將幾種加密方式加密后的密文全部保存在客戶端的做法存在的一大問題是,使用多種加密方式在一定程度暴露其關(guān)鍵信息亮曹,使得安全性降低橄杨。而為了解決這個問題秘症,CryptDB采用了adjustable-query-based encryption的可調(diào)整的基于查詢的方式,當(dāng)需要對某一列相同值進(jìn)行查詢時式矫,就對這一列進(jìn)行DET加密乡摹。而當(dāng)需要執(zhí)行某種操作時,就會在proxy端使用相應(yīng)類型的加密算法后發(fā)送給服務(wù)端采转。

以上的實現(xiàn)需要在提前知道用戶所需要執(zhí)行的所有操作的情況下才能被完全滿足聪廉。

但是實際上是很難提前知道你所要做的所有操作。

這時候就需要洋蔥模型故慈,把數(shù)據(jù)包成一個洋蔥板熊,如下圖,越外層的加密越安全惯悠,而越靠近明文的層提供的功能就越多邻邮。所以在一開始,先通過最外層的加密類型克婶,把明文加密成密文保存在客戶端筒严,當(dāng)要用到相應(yīng)操作的時候,如果當(dāng)前的所擁有的密文無法滿足其操作情萤,就通過一系列算法把洋蔥剝開鸭蛙,提供相應(yīng)的密文進(jìn)行操作,當(dāng)下一次要進(jìn)行同樣操作的時候筋岛,這時候不需要剝洋蔥娶视,只需要用上次的密文進(jìn)行操作即可。

對于每一個洋蔥睁宰,同一列的明文數(shù)據(jù)通過同一個key進(jìn)行加密肪获,但是對于不同表、不同列使用不同的key進(jìn)行加密柒傻。

(如圖孝赫,ID列和Name列各自分成了4個洋蔥)

CryptDB使用自定義函數(shù)進(jìn)行層的解密,如果要只想相同值查找的時候红符,可以使用名為DECRYPT_RND的自定義函數(shù)進(jìn)行解密:

解開一層之后青柄,以后對這一列進(jìn)行相同值查找的時候,就可以直接使用這個密文進(jìn)行操作预侯。

2.面對threat 2

解決威脅二

當(dāng)proxy和application端也會受到攻擊的時候致开,需要保證泄露的數(shù)據(jù)盡可能少。

CryptDB提供了以下機(jī)制來解決威脅二:

首先是要向共享數(shù)據(jù)提供訪問控制策略萎馅。CryptDB通過ENC_FOR以及SPEAK_FOR語句提供注釋的功能双戳,實現(xiàn)了對共享數(shù)據(jù)的訪問權(quán)限進(jìn)行限制。這一過程形成的keychain保證了當(dāng)系統(tǒng)受到攻擊的時候糜芳,只有登陸中的用戶的數(shù)據(jù)會被泄露飒货,未登陸的用戶的數(shù)據(jù)不會被泄露千诬。

具體實現(xiàn)方式

CryptDB首先需要對主體(principal)的類型進(jìn)行定義,例如用戶膏斤,用戶組等等。有兩種主體邪驮,一種是external principal莫辨,另一種是internal principal。

對于external

principal毅访,需要提供密碼給proxy沮榜,才能得到相應(yīng)principal的權(quán)限。而internal principal獲得權(quán)限需要在系統(tǒng)中對其進(jìn)行授權(quán)喻粹。

CryptDB使用的是自己定義的principal而不是現(xiàn)成的DBMS的principles蟆融。因為現(xiàn)成的principle提供的定義細(xì)粒度不夠,不足以滿足開發(fā)的需求守呜。其二CryptDB在principle之間需要實現(xiàn)顯式的特權(quán)授予(SPECK_FOR)型酥,這也是現(xiàn)有的DBMS principle不能夠提供的!

系統(tǒng)為每個principal都隨機(jī)生成一個key查乒,并且把key用相應(yīng)用戶的密碼加密后弥喉,放在external_keys表里面,這樣當(dāng)用戶之類的改變密碼的時候玛迄,私密數(shù)據(jù)的key可以不用改變由境,只需要在external_keys表中對相應(yīng)的principal的key用用戶的新密碼進(jìn)行重新加密。

當(dāng)external主體登陸進(jìn)系統(tǒng)之后蓖议,系統(tǒng)會把該用戶名以及密碼放在一個表cryptdb_active中虏杰,密碼用于解密相應(yīng)主體的key以讀取相關(guān)數(shù)據(jù)。Proxy會把這個表讀進(jìn)內(nèi)存里面勒虾,server端不會得到這個表纺阔,并且proxy攔截一切對該表的訪問。如果用戶沒有登陸从撼,就不會出現(xiàn)在此表中州弟,意味著即使proxy受到攻擊,表里面的內(nèi)容泄露了低零,未登錄用戶的數(shù)據(jù)大部分(可能會出現(xiàn)處于同一個principal的人登陸之后泄露數(shù)據(jù)的情況)不會被泄露婆翔,因為密碼不在表上面,這樣保證了未登錄用戶的數(shù)據(jù)掏婶。

但是有一些特例啃奴,例如管理員之類的可訪問數(shù)據(jù)比較大(權(quán)限很高),很容易會造成大量數(shù)據(jù)的泄露雄妥,所以管理員賬號不能隨便記錄在cryptdb_active表里面最蕾,如果管理員要以普通身份登陸的時候依溯,就需要另外分離出一個有相應(yīng)權(quán)限限制的賬號,寫入cryptdb_active表中瘟则,這樣可以在大部分時間里防止大量數(shù)據(jù)的泄露黎炉。

CryptDB使用兩種語句對敏感數(shù)據(jù)進(jìn)行注釋:

(1)在表格中對表項用ENC_FOR語句對數(shù)據(jù)進(jìn)行注釋實現(xiàn)對數(shù)據(jù)的訪問控制。A ENC_FOR B(A是數(shù)據(jù)醋拧,B是主體)慷嗜,意味著只有主體B可以訪問數(shù)據(jù)A,ENC_FOR的實現(xiàn)原理是用主體B的key對數(shù)據(jù)A進(jìn)行加密丹壕。

(2)利用SPEAK_FOR語句對表格進(jìn)行注釋庆械,給一個主體授予另一個主體的權(quán)限。這種做法的格式為(a x) SEPAK_FOR (b y),其中x和y為主體類型菌赖,a和b是主體缭乘。意思是x類型的主體a有y類型的主體b的權(quán)限,b能訪問的內(nèi)容琉用,a也有權(quán)限訪問堕绩。

SPEAK_FOR的實現(xiàn)原理是用主體a的key對主體b的key進(jìn)行加密,當(dāng)需要訪問相應(yīng)數(shù)據(jù)的時候辕羽,可以通過主體a的key對主體b的key進(jìn)行解密逛尚,然后通過主體b的key對相應(yīng)數(shù)據(jù)進(jìn)行訪問。當(dāng)主體A通過SPEAK_FOR語句與主體B相連的時候刁愿,主體B的key會用主體A的key加密绰寞,然后放在一個特殊的表access_key表上面。但是數(shù)據(jù)的加密在共享數(shù)據(jù)雙方都在線的情況下采用對稱密鑰(加密和解密的密鑰相同)進(jìn)行加密铣口,而當(dāng)某一個主體沒有登陸進(jìn)系統(tǒng)的時候滤钱,無法得到該主體的symmetric key,所以這個時候會采用公鑰加密數(shù)據(jù)并保存脑题,當(dāng)主體再次登錄的時候使用自己的私鑰進(jìn)行解密件缸,獲得數(shù)據(jù)。多個SPEAK_FOR就形成一條key chain叔遂,要找某個數(shù)據(jù)的時候他炊,只需要順著key chain,從用戶密碼已艰,一直找到要找的數(shù)據(jù)為止痊末。

每當(dāng)敵方想要通過更改SPEAKS_FOR來窺探隱私信息的時候,CryptDB的機(jī)制告訴我們哩掺,需要對access_keys表格進(jìn)行相應(yīng)的更改凿叠,想要更改這個表格必須獲得被授權(quán)principle的key,這就意味著只有這個principle登錄的時候,敵方才能獲取相應(yīng)的key從而對這個principle的私密信息進(jìn)行窺探盒件。

五蹬碧、參考文獻(xiàn)列表

1.極簡密碼學(xué),by曾兵

2.CryptDB.Popa, R. A., et al. (2011). CryptDB: protecting confidentiality withencrypted query processing. Proceedings of the Twenty-Third ACM Symposium onOperating Systems Principles. Cascais, Portugal, ACM: 85-100

3.Guidelines for Using the CryptDB SystemSecurely,https://eprint.iacr.org/2015/979

4.CryptDB項目主頁:http://css.csail.mit.edu/cryptdb/,

5.CryptDB發(fā)明人主頁:https://people.eecs.berkeley.edu/~raluca/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市炒刁,隨后出現(xiàn)的幾起案子恩沽,更是在濱河造成了極大的恐慌,老刑警劉巖翔始,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件飒筑,死亡現(xiàn)場離奇詭異,居然都是意外死亡绽昏,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進(jìn)店門俏脊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來全谤,“玉大人,你說我怎么就攤上這事爷贫∪先唬” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵漫萄,是天一觀的道長卷员。 經(jīng)常有香客問我,道長腾务,這世上最難降的妖魔是什么毕骡? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮岩瘦,結(jié)果婚禮上未巫,老公的妹妹穿的比我還像新娘。我一直安慰自己启昧,他們只是感情好叙凡,可當(dāng)我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著密末,像睡著了一般握爷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上严里,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天新啼,我揣著相機(jī)與錄音,去河邊找鬼田炭。 笑死师抄,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的教硫。 我是一名探鬼主播叨吮,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼辆布,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了茶鉴?” 一聲冷哼從身側(cè)響起锋玲,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎涵叮,沒想到半個月后惭蹂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡割粮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年盾碗,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舀瓢。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡廷雅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出京髓,到底是詐尸還是另有隱情航缀,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布堰怨,位于F島的核電站芥玉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏备图。R本人自食惡果不足惜灿巧,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望揽涮。 院中可真熱鬧砸烦,春花似錦、人聲如沸绞吁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽家破。三九已至颜说,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間汰聋,已是汗流浹背门粪。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留烹困,地道東北人玄妈。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親拟蜻。 傳聞我的和親對象是個殘疾皇子绎签,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容