https://blog.csdn.net/ayang1986/article/details/105528248
1. IBC概述
基於標識的密碼(Identity-Based Cryptography)簡稱IBC,是與RSA、ECC相比具有其獨特性的又一種公鑰密碼。這種獨特性表現在其公鑰是用戶的身份標識,該標識可以是任何有意義的字符串,比如email地址、電話號碼、身份證號等,而不再是隨機亂碼。
IBC這個概念最初出現於1984年Shamir(RSA密碼創始人之一)的論文“Identity-based cryptosystems and signature schemes”中,IBC密碼公私鑰采用一種不同於RSA和ECC的特殊方法產生,即公鑰是用戶的身份標識,而私鑰通過綁定身份標識與系統主密鑰(master key)生成。IBC包括基於標識的加密算法IBE(Identity-Based Encryption)和基於標識的簽名算法IBS(Identity-Based Signature)以及基於標識的密鑰協商算法IBKA(Identity-Based Key Agreement)。繼1984年Shamir的IBC設計思想提出之后,誕生了許多令人滿意的針對IBS和IBKA的協議算法。其中,采用雙線性對的Hess IBS和Cha-Cheon IBS簽名算法已被ISO和IEC采納(ISO/IEC 1488-3),分別作為IBS的第一簽名算法和第二簽名算法。Smart-Chen-Kudel IBKA密鑰協商算法已提交IEEE P1363.3。
Shamir於1984年提出IBC密碼后,過了17年,2001年誕生了三個IBE密碼算法,它們由Boneh和Franklin、Cocks、Sakai等分別提出。Cocks的IBE算法使用二次剩余,其安全性基於大數分解的困難性。由Boneh、Franklin兩人共同設計的IBE與Sakai等人設計的IBE均使用橢圓曲線上的雙線性對(bilinear pairing),其安全性基於BDH(Bilinear Diffie-Hellman)的困難性。Boneh-Franklin的IBE(即BF-IBE)是第一個在隨機預言模型(random oracle model)中安全性得到證明的算法,得到了國際密碼界的公認,隨着其應用的推廣,相應的標准化工作也逐步展開,RFC5091將建立於超奇異曲線上的BF-IBE作為IBC標准。BF-IBE是基於標識的密碼技術和基於雙性對的密碼技術的結合。下文中在無特別說明的情況下IBC均指以BF-IBE加密算法為核心的標識密碼(注:這與我國正在制定的IBC標准有所不同)。
IBC作為PKI(Public Key Infrastructure)體系的發展和補充,尤其是IBC與PKI體系的融合,既保證了強簽名的安全特性,又滿足了各種應用更靈活的安全需求。RSA和ECC應用於PKI中需要創建大量的數字證書,一些應用系統中的證書數量超過一千萬,而證書的管理和相應數據庫的管理成為一項繁重的工作。IBC應用於PKI中是無證書的(certificateless),由於標識本身就是實體的公鑰,這類系統就不再依賴證書,從而大大簡化了PKI的應用。
IBC密碼的應用比傳統公鑰密碼的應用更加簡單,但是,其代價是IBC密碼的設計與計算卻比其他公鑰密碼復雜得多。在IBC算法中,除了RSA和ECC中所具有的運算外,還增加了雙線性對的計算。因此,雙線性對算術理論是IBC算法的一個重要內容。
早期橢圓曲線上的雙線性對是被用來攻擊ECC中的離散對數問題(DLP),即所謂的Meneses、Okamoto、Vanstone的MOV攻擊和Frey、Ruck的FR攻擊。
2000年,Sakai、Ohgish、Kasahara等人在其論文“cryptosystems based on pairing”中、Joux在其論文“A one Round protocol for tripartite Diffie-Hellman”中分別獨立地提出了基於雙線性對的密碼協議,這開創了橢圓曲線密碼學上的新篇章。自此以后,雙線性對從應用於密碼攻擊轉向應用於密碼設計並引起許多密碼學者的興趣和關注。雙線性對被視為密碼系統中的黑匣子(black box),在密碼學中的應用以異乎尋常的步伐快速發展,特別是Boneh、Franklin的那篇開創性論文“Identity-Based Encryption from the Weil Pairing”,成功地創建了基於身份標識的密碼IBE。
正因為雙線性對在密碼協議設計中的廣泛應用,雙線性對的有效計算成為人們在這方面的一個研究重點。
Miller在1985年創建橢圓曲線密碼(ECC)后不久,在其一篇未發表的手稿“short programs for functions on curves”中首次給出了計算雙線性對的多項式時間算法。但因為當時雙線性對在公鑰密碼中尚未取得有效應用,因此沒有引起研究者的關注。當雙線性對在公鑰密碼學中獲得諸多應用后,其計算的重要性也日趨顯著,時隔19年之后,Miller於2004年重新整理了當年的手稿,詳盡地介紹了雙線性對的計算及其應用(參見“the Weil paring, and its efficient calculation”,Journal of Cryptology . Sep.2004)。
目前大多數的雙線性對算法研究都集中於Miller算法的優化和改進,其中Barreto、Scott等人的工作最為突出,最有成效的改進有兩個方面:一是在某種情況下在雙線性對計算中有理函數在除子(divisor)的值可以用橢圓曲線上點的值代替而不影響計算結果,即replacing divisors by points,本人稱之為“以點代除”;二是在某種情況下雙線性對Miller算法步驟中的分母部分可以全部去掉而不影響最終結果,即denominators elimination優化,本人稱之為“去分母化”。
關於雙線性對的算術理論和計算方法,有不少這方面的文章。本人向讀者推薦兩篇論文,一篇是我國中山大學計算機科學系的趙昌安博士所著的博士學位論文“雙線性對的有效計算”,另一篇是美國斯坦福大學計算機科學系的 Ben Lynn博士所著的博士學位論文“On the Implementation of Pairing-based Cryptosystems”。這兩篇論文不僅僅在諸多方面有深入的研究,更重要的是,而且可能更吸引一般讀者的是,它們涵蓋了雙線性對的基礎性內容,並對基於雙線性對的密碼和雙線性對計算進行了全面的介紹和綜合性論述。
2. IBC密碼主要算法模塊
IBC密碼包含系統創建,私鑰提取,加密,解密,簽名,驗簽,雙線性對計算等算法模塊。以下IBC中加密算法為BF-IBE,簽名算法為Hess-IBS。雙線性對采用的是Tate對。
2.1. Setup(密碼系統創建)
該函數模塊用來創建IBC密碼系統,主要任務是生成密碼系統參數和主密鑰(master key)。密碼系統參數包括:
基於橢圓曲線y2=x3+1的素數p,p=11 mod 24;
素數q,q|(p+1),使得Fp上的橢圓曲線加法群E(Fp)具有q階循環子群;
E(Fp)上一個階為q的點P,稱之為基點;
E(Fp)上一個階為q的點Pub,稱之為系統根公鑰;
主密鑰(也稱根私鑰)為小於q的隨機數。主密鑰(設為s)與基點P、根公鑰Pub的關系是橢圓曲線上的多點倍乘關系:Pub=[s]P。
以下是p與q之間的比特大小關系。
p |
512 |
1024 |
1536 |
3840 |
7680 |
q |
160 |
224 |
256 |
384 |
512 |
素數q(其中q | p+1 )取Solinas素數[RFC5091],即形如:2a + 2b + 1的素數,其中a根據q的比特大小而定,假設q的比特數為Qbit,則a=Qbit-1。
在創建密碼系統參數時,實際上是先構造素數q,再根據素數q構造p。
2.2. Private Key Extraction(私鑰提取)
該函數模塊根據系統參數、主密鑰和用戶標識生成用戶的私鑰。
在BF_IBC中,首先是將用戶的標識id映射成橢圓曲線上的一個點Q_id。
這個映射利用hash函數(不妨稱為H1)將id轉換成Fp中的數y=H1(id),再由y根據橢圓曲線方程:y2=x3+1確定x,進而得到曲線上的點Q_id=(x,y)。
然后,用主密鑰s與點Q_id多倍點相乘得到其私鑰D_id:D_id=[s] Q_id。
注意:用戶的公鑰私鑰數據類型正好與IBC根公鑰根私鑰的數據類型相反。用戶公鑰是其身份標識(字符串類型),而私鑰是曲線上的點。而IBC的根公鑰是曲線上的點,根私鑰(主密鑰)是數值類型。
2.3. Encryption(加密)
該算法根據密碼系統參數和用戶標識對所提供的數據m進行加密。其加密過程是:
1. 將用戶標識id映射成E(Fp)上的點Q_id(如何映射前面已說明);
2. 對欲加密的消息m進行hash得到t,這個hash函數不妨設為H2,則t=H2(m);
3. 選擇隨機字符串rho,其字節數與hash算法H2輸出大小相同;
4. 對rho和t合並進行hash運算再模q得到r=H2(rho || t)%q。
5. 進行橢圓曲線上多倍點計算得到U=[r] P,其中P是密碼系統參數中的基點;
6. 雙線性對計算:g=e(Pub,Q_id),g是Fp2中的數(復數);
7. 計算 z=gr,z是Fp2中的數(復數);
8. 對z進行hash運算得到w=H2(z);
9. 計算V= w rho ,V的比特大小與H2輸出比特大小相同;
10. 計算W = HashBytes(|m|, rho, hashfcn) m,HashBytes是一個隨機亂數生成器,它可根據亂源字符串生成任意指定長度的一串隨機字符串。HashBytes(|m|, rho, hashfcn)的意思是根據亂源字符串rho生成與欲加密數據m同字節長度(即|m|)的隨機字符串,HashBytes函數內可能要多次調用hash函數hashfcn。
11. 輸出(U,V,W)作為對數據m加密的結果。
2.4. Decryption(解密)
該算法根據用戶私鑰D_id、密碼系統參數和密數據(U,V,W)得到明文m。
1. pairing對計算,z=e(U,D_id);
2. 計算 w=H2(z);// 注意這里是小寫w
3. 計算rho=wV;
4. 計算m = HashBytes(|W|, rho, hashfcn) W;
5. 計算 t=H2(m);
6. 計算r=H2(rho || t)%q;
7. 驗證U=[r] P,如果正確,輸出明文m,否則解密失敗,無明文輸出。
2.5. Signature(簽名)
該算法根據用戶私鑰D_id和系統參數對數據m進行數字簽名。
1. pairing對計算,g=e(P,D_id);// P為系統基點;
2. 選擇一個小於q的隨機數k;
3. 計算w=gk,w是Fp2中的數(復數);
4. 將w轉換成字符串pad。
5. 對pad和明文m進行hash,然后模q得到h=H2(pad || m)%q;
6. 計算S=[(k-h)%q] D_id;
7. 輸出(h,S)作為簽名結果。
2.6. Verification(驗簽)
該算法根據用戶標識id和系統參數,對數據m的簽名結果(h,S)進行驗證。
1. 將id映射成橢圓曲線上的點Q_id;
2. 雙線性對計算g=e(Pub,Q_id); // Pub為系統參數中的根公鑰;
3. 雙線性對計算w1=e(P,S); // P為系統參數中的基點;
4. 計算 w=w1 * gh;// w1、g和w均為Fp2中的數(復數);
5. 將w轉換成字符串pad;
6. 計算h’=H2(pad || m)%q;
7. 驗證h=h’,正確則驗簽成功,否則失敗。
2.7. 雙線性對(Bilinear Pairing)計算
雙線性對 假設G1和G2是兩個加法群,GT是乘法群,又假設PG1,Q
G2和g
GT,如果存在映射e從G1×G2到GT,e(P,Q)=g,並對任意的P1、P2
G1,Q1、Q2
G2,滿足e(P1+P2,Q1)=e(P1,Q1)*e(P2,Q1)和e(P1,Q1+Q2)=e(P1,Q1)*e(P1,Q2),那么映射e被稱為從G1×G2到GT的一個雙線性對。雙線性對有多種類型,下面僅介紹Tate對。
Tata對 假設q=pm,其中p為素數,m為正整數,又設Fq是含q個元素的有限域,則p為Fq的特征,m為擴張次數。令E為定義在有限域Fq上的橢圓曲線,假設PE(Fqk)[r],k為曲線E的嵌入次數(embedding degree),QE(Fqk),fr,p是E上的有理函數,其對應的除子滿足(fr,p)~r(P)-r(O),除子DQ~(Q)-(O),且除子(fr,p)和DQ的支集(support)不相交。雙線性Tate對為如下定義的非退化雙線性映射:
tr:E(Fqk)[r] ×E(Fqk)/rE(Fqk)—> F*qk /( F*qk)r
tr(P,Q)=fr,p(DQ)。
由以上定義可知,傳統的雙線性Tate對的計算結果為陪集值,即對相同的P和Q計算tr(P,Q)可能得到不同的數值,但是這些數值都屬於同一個陪集,而實際應用中要求雙線性映射后得到唯一值,因此有如下約化的雙線性Tate對定義:
tr’:E(Fqk)[r] ×E(Fqk)/rE(Fqk)—>
tr’(P,Q)=fr,p(DQ)。 其中
為F*qk中的r次單位根群。
如果定義 PE(Fq),可進一步定義如下變形的約化雙線性Tate對:
tr^:E(Fq)[r] ×E(Fqk)/rE(Fqk)—>
tr^(P,Q)=fr,p(Q)。
函數fr,p的計算采用miller算法。關於miller算法這里不再贅述,讀者可查閱相關文獻。
從定義可見,Tate對的兩個輸入變量取自不同的加法群,在BF-IBC密碼中,所采用的橢圓曲線為超奇異的橢圓曲線,因此存在變形映射(distortion map),為了優化算法,Tate對可進一步封裝成如下的映射:
e: G×G—>Fqk (G為橢圓曲線加法群,k為嵌入次數,k=2)
e(P,Q)= tr^ (P,(Q)).
為變形映射:
其中,為的共軛(conjugate),z =
x,
為x3=1 的非退化解。
1) e的兩個輸入變量都是基域上的點。這樣,大大簡化了密碼系統(參數)的構造。
2) 因為P和 (Q)總是線性無關的,因此,只要P和Q是曲線上的有限點,封裝函數e可以確保雙線性對的值不退化為單位元1。
3)Tate對計算可以“去分母化”,即miller算法中分母部分都可以去掉。
4)Tate對的最后指數次數(the final powering)可以大幅降低。事實上
Tate對的最后指數是z=(p2-1)/r=((p+1)/r)(p-1)。要計算e=wz modp,可計算t=w(p+1)/r=u+i v ,因為
當p=3 mod 4時,ip =-i,因此
后記:從兼顧高效、安全的角度看,IBC密碼所選擇的橢圓曲線往往可能是MNT曲線或BN曲線。這里選擇超奇異橢圓曲線,目的是想簡化算法的實現而不想使敘述復雜化。
參考資料
1. V.S.Miller Short Programs for Functions on Curves,1986.
2. Boneh et al. Identity-Based Encryption from the Weil Pairing,2001.
3. Barreto et al. Efficient Algorithms for Pairing-based Cryptosystems,2002.
4. Rfc5091: Identity-Based Cryptography Standard(IBCS) #1. 2007.
5. Scott. Faster Pairings using an Elliptic Curve with an Efficient Endomorphism. 2005.
6. Freeman,Scott et al. A Taxonomy of Pairing-Friendly Elliptic Curvers,2006.
7. 趙昌安, 雙線性對的有效計算,中山大學計算機科學系2008博士論文.
8. Lynn. On the Implementation of Pairing Based Cryptosystems. 2007
9. rfc5409 .using the BF/BB-IBE with the cryptographic message syntax(CMS) 2009.
10. Scott et al , Implementing cryptographic pairings: a magma tutorial. 2009.
11. Scott. On the Efficient Implementation of Pairing-Based Protocols. 2011.