CAST加密算法族及其安全性分析

CAST加密算法屬于稱為Feistel結(jié)構(gòu)的加密算法,對(duì)于微分密碼分析、線性密碼分析、密碼相關(guān)分析具有較好的抵抗力,并符合嚴(yán)格雪崩標(biāo)準(zhǔn)和位獨(dú)立標(biāo)準(zhǔn),沒(méi)有互補(bǔ)屬性,也不存在軟弱或者半軟弱的密鑰。因此,對(duì)于要求密碼強(qiáng)壯、加密算法容易獲取的Internet而言,CAST-128是一種能夠滿足一般應(yīng)用的很好的選擇。

CAST-128算法描述
CAST-128屬于稱為Feistel加密的一類加密算法,因此所有的操作都類似于數(shù)據(jù)加密標(biāo)準(zhǔn)(DES)。

完整的加密算法分下面四步給出:
輸入:明文m1…m64;密鑰K=k1…k128
輸出:密文c1…c64

(1)(密鑰表)從K計(jì)算出16對(duì)子鑰(Kmi,Kri);
(2)(L0,R0)<--(m1…m64(把明文分為左右兩半,L0=m1…m32,R0=m33…m64);
(3)(循環(huán)16次)對(duì)于i從1到16,按下述方法計(jì)算Li和Ri:
Li=Ri-1;
Ri=Li-1^f(Ri-1,Kmi,Kri),其中f在第2.2節(jié)中定義。
(4)c1...c64<--(R16,L16)交換最終得到的L16和R16并連接在一起構(gòu)成密文。)

解密算法與上述加密算法一致,只不過(guò)循環(huán)是按照相反的順序從(R16,L16)計(jì)算出(L0,R0)。

循環(huán)密鑰
對(duì)CAST-128在每次循環(huán)中使用一對(duì)子鑰:32位量Km作為“掩碼”,5位量Kr用作“旋轉(zhuǎn)碼”。

不同的循環(huán)
CAST-128使用三種不同的循環(huán)函數(shù),如下所示(其中“D”是輸入函數(shù)f的數(shù)據(jù)“,Ia”到“Id”分別表示I中從高到低的4個(gè)字節(jié))。注意“+”和“-”是以2**32為模的加減法,“^”是位異或,“<<<”表示循環(huán)左移操作。

置換箱
CAST-128使用8個(gè)置換箱:置換箱(s-box)S1、S2、S3和S4是循環(huán)置換箱,S5、S6、S7和S8是密鑰表置換箱。盡管8個(gè)置換箱總共需要8K字節(jié)的內(nèi)存,但是要注意在實(shí)際加密/解密過(guò)程中只需要4K字節(jié),因?yàn)樽予€的產(chǎn)生通常在輸入數(shù)據(jù)之前就完成了。

密鑰表
假設(shè)128位的密鑰是x0x1x2x3x4x5x6x7x8x9xAxBxCxDxExF,其中x0是最高位的字節(jié),xF是最低位的字節(jié)。

令z0…zF是中間(臨時(shí))字節(jié)。
令S[i]表示置換箱i“,^”代表異或加。

按照下述公式從密鑰x0x1x2x3x4x5x6x7x8x9xAxBxCxDxExF生成子鑰:

掩碼子鑰與旋轉(zhuǎn)子鑰令Km1,…,Km16為32位的掩碼子鑰;

令Kr1,…,Kr16為32位的旋轉(zhuǎn)子鑰;
for(i=1;i<=16;i++){Kmi=Ki;Kri=K16+i;}

可變的密鑰長(zhǎng)度
CAST-128加密算法被設(shè)計(jì)為密碼長(zhǎng)度是可變的,從40位到128位,每次遞增8位。對(duì)于不同的密碼長(zhǎng)度,分別采用不同的規(guī)范:

(1)密碼長(zhǎng)度從40到80,按照上述算法操作,但是采用12循環(huán)而不是16。
(2)如果密碼長(zhǎng)度大于80位,采用完整的16次循環(huán)。
(3)如果密碼長(zhǎng)度小于128位,則在最低位補(bǔ)0直到128位

盡管CAST-128支持上述12種長(zhǎng)度的密碼,但在典型的應(yīng)用中發(fā)現(xiàn)40、64、80和128位是最有用的密碼長(zhǎng)度。因此,只要支持這四種長(zhǎng)度的子集對(duì)于大多數(shù)應(yīng)用就足夠了。為了避免在使用不同的密碼長(zhǎng)度操作時(shí)發(fā)生混淆,CAST-128被認(rèn)為與名CAST5是同義的,這樣在后面加上密碼長(zhǎng)度就不會(huì)發(fā)生歧義了。這樣,比方說(shuō)使用40位密碼的CAST-128就被表示為CAST5-40;如果明確地使用128位密碼,應(yīng)該使用名稱CAST5-128。

CAST加密算法安全性分析
由于CAST的設(shè)計(jì),CAST免疫已知明文攻擊以及選擇明文攻擊,對(duì)于選擇密鑰攻擊以及相關(guān)密鑰攻擊也都有相當(dāng)高的安全性。在密鑰的選擇上,CAST不像DES那樣,在CAST中,沒(méi)有弱密鑰,也沒(méi)有半弱密鑰,CAST的密鑰不存在定點(diǎn),也沒(méi)有相等的密鑰。CAST加密算法具有相當(dāng)高的安全性。