1. 程式人生 > 其它 >《這是我最近對IBE的全部理解》(話很多版

《這是我最近對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\)

,不隨使用者身份ID變化\(e(Q_{id},P_{pub})^t\),因此可以提前完成,不需要在加密階段做配對運算,只需要在解密階段做,這更類似於用身份去做“金鑰封裝”,而不是使用身份直接進行加解密。這是一個大的技術方法的提升,並且給出了該方案如何擴充套件成HIBE方案,但是該HIBE方案是低效的,公鑰PK長度和加密出來的密文C長度和身份層級有關。

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\)

這樣子的東西我們只能夠做出指數上的加法得到\(g^{a+b}\),想要得到\(g^{ab}\)需要已知一個a或者b才行,這往往是不知道的。而e的出現雖然仍然不能計算\(g^{ab}\),但是它良好性質提供了指數上乘法的構造方式,\(e(g^a,g^b)=e(g,g^{ab})=e(g,g)^{ab}\)。原本只能在元素上做乘法,指數上做加法的運算模式非常單一,e解開了這個束縛,現在不再需要知道a或者b僅僅通過,\(g^a,g^b\) 就能得到\(g^{ab}\)的形式,雖然在e中。

現在再來看,有了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年沒有改進該方案而選擇了另一方案。