|
HotC51共產(chǎn)兒童團(tuán)第十四課:HotWC3密碼設(shè)計(jì)原理及其“天地巧合” |
先祝大家節(jié)日愉快~~~
開課:(此課比較暈)
HotWC3密碼是由星期(Week)算法、循環(huán)冗余碼(CRC)、三角(Triangle)密碼這三部分基本元素構(gòu)成。
故簡(jiǎn)稱WC3密碼。
由于此密碼算法依據(jù)菜農(nóng)自己推導(dǎo)的菜農(nóng)星期公式、群魔亂舞的CRC密碼和原創(chuàng)
的三角密碼作為算法之根基,故自稱為HotWC3密碼。
1. HotWC3密碼強(qiáng)度。
基本的HotWC3密碼為BCD碼格式的萬年歷日期表達(dá)式,占用四個(gè)字節(jié)。
由于400年為20871周,故10000年=20871*25*7=521775*7=3652425
大約為2^22不到。就認(rèn)為HotWC3是21位密碼吧。但可再加入多位密碼,來增加
密碼強(qiáng)度。這里只討論基本HotWC3.
形象點(diǎn)說銀行卡為6位十進(jìn)制密碼,范圍為0~999999
而HotWC3為8位BCD密碼,實(shí)際10進(jìn)制范圍為0~3652424
2. HotWC3密碼的設(shè)計(jì)原理
HotWC3為8位BCD密碼bDate[4],分別表示 百年:年:月:日。
例如:BDate[]={0x20,0x09,0x03,0x05}
1)星期變換
為了使密碼收斂,即將長(zhǎng)密碼得到一個(gè)極短的唯一碼。
而萬年歷內(nèi)的某年某月某日即可得到一個(gè)確定的星期Week(0~6,0表示星期日)
例如:BDate[]={0x20,0x09,0x03,0x05} 得到Keek=0x04
由于BDate為BCD碼,故星期變異后,即W17=16*Week+Week=17*Week
將其累加的BDate上,即完成日期變異,即wDate[N]=BDate[N]+W17.
例如:BDate[]={0x20,0x09,0x03,0x05} 得到Keek=0x04
W17=16*Week+Week=17*Week=(Week<<4)| Week="0x44"
wDate[]={0x64,0x4d,0x47,0x49}
這樣wDate就成了包含星期的日期表達(dá)式,此可謂“天地巧合”。
這就是HotWC3要求BCD格式的最重要的原因~~~
2)星期密鑰
HotWC3需要一個(gè)內(nèi)部的加密和解密“公鑰”,而且不能從密碼中推算出來。
HotWC3選用萬年歷做密碼,得到的星期數(shù)大約為521775/7=74539個(gè)。
故不可能從星期推算出萬年歷密碼。
HotWC3的星期密鑰Key為W17與wDate[4]這5個(gè)數(shù)的異或結(jié)果。
wDate[]={0x64,0x4d,0x47,0x49}
W17=0x44
Key=0x63.
可以看出,從Key里看不出任何BDate的痕跡。
Key將作用于三角變換的輸入,輸出及密文的輸出方面。
Key也對(duì)CRC運(yùn)算結(jié)果施加影響,同時(shí)CRC運(yùn)算結(jié)果又將作為下次
三角變換的輸入。形成“閉環(huán)”的效果。
這樣不解開Key就無法得出正確的結(jié)果。
由于HotWC3的星期密鑰Key為W17與wDate[4]這5個(gè)數(shù)的異或結(jié)果。
每四個(gè)為一組。那么
在n=0時(shí),Key XOR wDate[0]即需要百年、年、月及星期的影響。
在n=1時(shí),Key XOR wDate[1]即需要百年、年、日及星期的影響。
在n=2時(shí),Key XOR wDate[2]即需要百年、月、日及星期的影響。
在n=3時(shí),Key XOR wDate[3]即需要年、月、日及星期的影響。
故解密時(shí),每個(gè)密文字符實(shí)際都需要對(duì)應(yīng)位的密碼信息。
而星期密鑰是最關(guān)鍵的,但星期卻是不可逆的,即從星期是推不出
日期的~~~
這樣逆向者即解密者只能用窮舉法來破解HotWC3密碼,這正是菜農(nóng)
夢(mèng)寐以求的~~~
3)三角變換
因?yàn)樵谝粋(gè)直角三角形中,已知一個(gè)整數(shù)直角邊,則必有唯一一對(duì)的整數(shù)
直角邊和斜邊。早有蘇聯(lián)數(shù)學(xué)家進(jìn)行過推論,菜農(nóng)不過進(jìn)行了形象話的解釋。
本來 a^2 + b^2 = c^2 需要知道a,b才能算出c,否則有無窮多組解。
但是,在“直角三角形”和全為“整數(shù)邊”這兩個(gè)隱藏很深的“條件”下,
只需知道一個(gè)整數(shù)直角邊,即可得到另一直角邊和斜邊。
用一個(gè)參數(shù)“擴(kuò)散出”2個(gè)參數(shù),這正是CRC運(yùn)算所需求的,如“初值”和“權(quán)”
即:當(dāng)一直角邊為奇數(shù)時(shí),平方砍半。
例勾3股4弦5 3^2=9 9/2=4,5 即3^2+4^2=5^2
當(dāng)一直角邊為偶數(shù)時(shí),砍半平方再拉手。
例股4勾3弦5 4/2=2 2^2=4 3(4)5 即4^2+3^2=5^2
關(guān)于三角密碼,這里不用多說,總之一個(gè)字節(jié)的三角值會(huì)“發(fā)散”為兩個(gè)字節(jié)。
為了避免平方和開方運(yùn)算,菜農(nóng)特編寫了《三角變換表》,這樣只需給出
需要變換的三角值,查表可得出唯一的三角變換值。
三角變換值為2個(gè)字節(jié),可作為每次CRC8運(yùn)算的“初值”和“權(quán)”。
由于其不可能相等(直角邊不等于斜邊),故可比較其大小來確定CRC運(yùn)算的“方向”~~~
再將“初值”和“權(quán)”相異或且再與星期密鑰相異或后,即得到“三角密鑰”。
4)CRC密碼
CRC密碼是菜農(nóng)“私自”改動(dòng)了其CRC運(yùn)算架構(gòu)來滿足菜農(nóng)對(duì)“CRC可逆”的需求。
這樣任何(群魔亂舞的CRC)CRC即可進(jìn)行加密和解密運(yùn)算,可以從菜農(nóng)發(fā)布的
《CRC/PEC網(wǎng)上計(jì)算器》看到其“可逆”之處~~~
這樣,我們即可根據(jù)CRC的“三要素”:初值、權(quán)和方向。
正運(yùn)算出CRC的結(jié)果,即加密過程。
逆還原出CRC的原貌,即解密過程。
“群魔亂舞的CRC”中的“權(quán)”是菜農(nóng)領(lǐng)悟CRC后對(duì)其作出的“擴(kuò)展”。
這樣我們就沒必要受制于X8+X5+X4+X0,X16+X12+X5+X0等束縛和制約。
這樣即可作為CRC密碼的初值和權(quán)即CRC密鑰來實(shí)現(xiàn)CRC的可逆運(yùn)算
即加密和解密過程。
HotWC3算法中的星期和三角變換的收斂和擴(kuò)散都是起保護(hù)CRC“三要素”的作用。
5)密文輸出
CRC運(yùn)算的結(jié)果再異或星期密鑰后作為真正的密文輸出。
這樣更深地掩蓋了密文和星期、CRC及三角變換之間的關(guān)系。
HotWC3的設(shè)計(jì)宗旨:讓逆向者只能通過“基于密鑰攻擊”(暈,知道密碼還叫攻擊)
這樣的設(shè)計(jì),使逆向者無法“基于明文攻擊”或“基于密文攻擊”。
哈哈~~~
祝大家“三八”愉快~~~
課畢
HotC51@126.com 2009.3.8于菜地。
團(tuán)部:http://group.ednchina.com/1623/
5551.gif" target="_blank">![]()
![]() |
|
|
|