《這是我最近對IBE的全部理解》(話很多版
IBE
歷史發展
自1984年shamir提出了可以用身份作為公鑰來的IBE思想之後,十多年間沒有出現比較好的實用的IBE方案,直到2001年數學上取得了突破,發現了橢圓曲線雙線性群上的雙線性配對運算e,之後各類利用雙線對的方案層出不窮,獲得了極大的發展,今天根據歷史發展順序介紹5種IBE方案(實際為3種)。
① 2001年,Boneh,Franklin根據ElGamal的思想結合weil對,提出了一種基礎簡單的IBE方案但是和ElGamal一樣不抗CCA2,和一種改進後,加入了“迴圈驗證”的IBE方案,CCA2安全。
② 2004年,Boneh,Boyen提出新的更高效的IBE方案,首先它採用了概率性的私鑰生成,其次它在加密階段的配對運算是固定的\(e(g_1,g_2)^t\)
2005年,Waters根據Boneh,Boyen的方案,在由身份ID去構造對應群元素\(Q_{id}\)時採用不同的方法(B將id視為整數來使用,W將id視為01位元序列來使用。),僅一點改進,將方案變成了完全安全的。完全安全和選擇id安全有何不同。選擇id安全,表明仍然可能會洩露系統中某一使用者的資訊(可能是系統中某一使用者,也可能是無意義ID),但不是敵手想要攻擊的那個使用者(ID),洩露的這個ID的相關資訊一般來說是對敵手沒有意義的。也就是說敵手的攻擊通常不會成功,但是也並不是一無所獲,這些在每次攻擊過程中洩露出去的其他資訊就是風險所在,它就不是完全安全的。而完全安全就是說,系統滴水不漏,既不會洩露敵手想要攻擊的ID的資訊,也不會洩露出任何人的資訊。
③ 2004年時,Boneh,Boyen還提出一種高效IBE,與以上兩種IBE的模式都不同。
2001 Boneh,F 基本方案
非常簡潔明瞭的一個類似ElGamal的加密方案(ElGamal \((rP,M\oplus rP_{pub})\)),由於這裡的M時01位元序列不是群元素,所以採用的模二加而不是乘法。這樣設計就和普通的ElGamal一樣面臨CCA2敵手的攻擊,容易恢復出M。
這裡的舉世無雙創新點在於利用e得到的加密元件\(g_{id}=e(Q_{id},P_{pub})^r\) ,它具有良好的性質,但是對比曾經的加密元件\(rP_{pub}\)有什麼不同呢?
首先e帶來的突破性作用是,曾經對於\(g^a,g^b\)
現在再來看,有了e的ElGamal得到了什麼樣的改變。加密元件是一個一般需要至少有兩種計算方式的東西。比如說\(rP_{pub}=rsP=r*sP=s*rP\),根據不同的計算方(加密方知道r不知道s,解密方知道s不知道r)掌握的資訊不同,可以從不同的方向去計算出來的元件。在老ElGamal中使用者的私鑰是s,而現在s是msk系統主金鑰,使用者也不知道s,僅知道自己的\(sQ_{id}\),那麼此時是:加密方知道r不知道s,解密方不知道r也不知道s,但是知道\(sQ_{id}\),知道\(rP\),需要構建出\(srP\)的問題,很顯然e就能夠完成這個功能,故得到新的e形式加密元件\(e(Q_{id},P_{pub})^r\)。
\(e(Q_{id},P_{pub})^r=e(Q_{id},sP)^r=e(Q_{id},rP)^s=e(sQ_{id},rP)=e(d_{id},rP)=e(d_{id},U)\)
直觀上看,老ElGalmal的安全核心s直接在加密一線作戰,沒有受到任何保護,而新方案的安全核心s則受到了一個層\(sQ_{id}\)的保護,沒有完全“暴露”在外。
這就是2001年weil配對發現後給密碼設計帶來的突破性進展。
2001 Boneh ,F改進方案
改進的方案和原方案在由id生成金鑰的階段都是確定性的演算法,生成方式簡單明瞭\(d_{id}=sQ_{id}\),對於\(Q_{id}\)它是多少P並不清楚,也不需要清楚,它類似於後續方案中的g2和Q的作用,但是它是隨id變化的,因此在每次加密過程中都要運算一次配對運算e,這是低效的。
改進方案解決了前一方案的,CCA2不安全問題,改進方案通過添加了一個解密後對M的驗證,形成一個互相影響的迴圈,來達到抗CCA2的目的,因為如果M被惡意修改成M*M',那麼它是無法通過驗證的。
改進方案中r不再是隨機產生的隨機值,而是通過M雜湊得到,\(r=H(M,\sigma)\) 這裡雜湊需要加入隨機值σ,不然方案將會是確定性加密。而後很自然的用加密元件加密σ,用σ加密訊息M,後續我們可以解密出σ,而後解密出訊息M,而後進行驗證M是否被惡意篡改。
思考:這裡用加密元件去加密σ的方式(簡單直接),來把σ“承諾”出來,是否可以使用其他方式給出σ呢?
承諾的方式一般有:放離散對數上,放單項雜湊H中,加密承諾。承諾就是這個東西可以給你用,但是你不能知道它具體是多少,不能看見,顯然e多樣化了我們的使用方式。
2004 Boneh,B \(e(g_1,g_2)^t\)方案
這個方案是Waters2005方案的前身,這裡給出的是HIBE的形式,當這裡j=1的時候,是普通的IBE,該方案和Waters的IBE可以說是一摸一樣,只是\(Q_{id}\)的構造方法不一樣,該方案將ID視為整數值\(Q_{id}=g_1^{id}h\),waters將ID視為01位元序列\(Q_{id}=u^{'}\prod u_i\) 。而正是因為這兩個方案都提出了具體的自己如何去構造\(Q_{id}\)的方式,所以都沒有使用雜湊,都是在無隨機諭言模型下的。
該方案雖然給出了HIBE,但是因為其密文長度和公鑰長度過長,實際是不可使用的。
對於該方案相較於2001年的方案有何提升將在waters方案下說明。
2005 Waters 完全安全\(e(g_1,g_2)^t\)方案
首先這裡不用糾結對應公鑰是什麼!
兩個方案的加密元件都是\(e(g_1,g_2)^t\),這一對加密元件的優化是對2001年方案的巨大改進,由每次都會變動的\(e(P_{pub},Q_{id})\)變成了固定的\(e(g_1,g_2)\),\(e(g_1,g_2)\)可以被提前計算,可以當作是系統引數之一,故加密不再需要配對運算。這裡\(g_1=g^s\)相當於\(P_{pub}=sP\),未知是多少P的\(Q_{id}\)相當於這裡的未知是g的幾次方的\(g_2\),曾經用於解密的與身份相關的私鑰\(d_{id}=sQ_{id}\)換成了現在的與使用者身份無關的\(msk=g_2^s\)。
理解為曾經的msk=s,還不是群元素,比私鑰“低一級”,現在msk升一級,與私鑰同級,和身份元素乘在一起,而不再是作用在身份元素上。現在msk升為與私鑰同級,所以msk就可以直接起到之前私鑰(與身份相關聯)的加密作用了,代替身份(私鑰)進行加密,而身份則被除掉。
兩個方案都將金鑰生成改進成了概率性金鑰生成,\(d_{id}=(g_2^{s}Q_{id}^r,g^r)\),因為是概率演算法所以給出了隨機值的承諾\(g^r\)供運算使用。\(C= (e(g_1,g_2)^tM,g^t,Q_{id}^t)\),因為要把身份除掉所以給出了帶隨機值身份元件\(Q_{id}^t\)供運算使用。
這種做法有點類似於用ID去封裝了加密元件。
2004 Boneh,B的 (x,y) 雙msk方案
這一篇,和前面的都不同,似乎是全新的方法(暫時看不出聯絡),它很高效。
它的加密元件是非常優美簡單的\(e(g,g)^t\)(忽略我在描述方案的圖片中對於加密隨機值用了t,s,α,文章中統一用t),這優化了我在之前方案中能不能讓\(g_2=g_1\)疑問(很顯然在之前的方案中是不行的),那麼它不僅同樣在加密階段0配對運算,並且解密僅需做一次配對運算,而不是兩次。
這是因為從直觀上講,因為這裡只有g,消除身份資訊這一步發生在e的括號內。這就是為什麼在設計私鑰時\(K=g^{1/(id+x+ry)},d_{id}=(r,K)\)指數上為倒數形式,因為後續通過構建我們只能構建出正形式,來消除身份。
關於此方案的兩點迷思:
它首先把身份當作整數,這是否會導致問題呢?
其次它將身份考慮為和msk一個層級,整數層級,而沒有做成群元素,這是合理的嗎?其他四個方案不管是使用雜湊還是自己的構造方法都將id做成了對應群元素,該方案看起來簡單高效但似乎不會那麼容易?否則Waters為什麼2005年沒有改進該方案而選擇了另一方案。