今年聖誕節前後的模擬界似乎額外冷清,平靜的表面下卻暗流洶湧。近來,nicola與andy兩人對cps-2加密演算法展開了持續的攻堅戰(見多識廣的模擬技術專家+密碼分析專業人士,一看就有戲),經過兩人的討論,目前已基本明確了cps-2採用的是一種類似des的4-pass feistel network,懂密碼學的朋友肯定很熟悉:)從密碼分析的角度來看,似乎加密強度還不及des(可能是考慮到了rom加解密的實現代價,des是16-pass的);至昨天為止,nicola已經給出了求解其中關鍵的替代/選擇函式(s盒子)的具體方法,甚至連cps2-shock的raz都以專門更新的方式來歡呼這一勝利,看來真的離成功不遠了。不過,目前他們的分析工作還沒有真正完成,儘管演算法已經清楚了,但金鑰分析方面的工作才剛開始,所以仍需耐心等待。以下是相關演算法研究進展的持續跟蹤:
1/8/2006
nicola終於將位址和金鑰關係大致搞清楚了,他推測整個的演算法流程為: 16位位址和96位金鑰經過第乙個feistel網路得到16位子金鑰;然後這16位子金鑰、16位密文和另乙個96位金鑰再經過第二個feistel網路最終得到明文。nicola已對第乙個fn進行了確認——也是乙個4-pass fn,並斷定如果能將第乙個fn中的s盒成功確定下來的話(遲早的事),那麼他便能不依賴於任何已知的表(從charles macdonald處得到的,但獲得的方法未知,raz給出的xor表也許也是重要的參照資訊之一)、從無到有地將rom進行完整解密了!不過目前他所使用的兩個96位金鑰還是來自已知的表,也就是說,根據目前的知識,對於那些已知部分**的遊戲,用真正的解密方式解出來不是件難事,但對那些沒有任何已知**的遊戲,兩個96位金鑰還不知道該怎麼去找,他也許正在思考著如何利用差分密碼分析來進一步地研究這一問題...繼續學習.
1/10/2006
nicola已將目前所得到的演算法原始碼提交給了mamedev。fn1中的s盒據說仍不太精確,但已經getting work了。稍微看了一下**,裡面的dd非常有趣,比方說cps-2使用了硬體watchdog,加/解密是針對opcode而不是針對data的,同時還必須結合opcode當前的指令位址來考慮等等;其opcode解密的大致流程為:首先根據opcode address和key1經fn1解出seed,然後再將seed擴充套件至sub-key,然後再用sub-key與key2進行xor,最後根據其結果和opcode經fn2解出opcode的明文... 頗周折,但還算清楚。nicola猜想key1/key2也許能夠通過硬體watchdog呼叫指令中的opcode匯出來,不過他暫時還沒有給出很明確的方法。有空再仔細看看,順便把fn的知識撿回來...
1/13/2006
nicola給出了暴力破解key1/key2的方法,壞訊息是這種獲得金鑰的方式只能針對已知xor表(即已知明文)的遊戲;好訊息是通過暴力破解獲取多個金鑰對,nicola發現key1/key2之間存在著很強的相關性,它們也許均只是某一相同金鑰的置換而已,nicola期望通過這種相關性來找到進一步修正fn1中s盒的有效途徑。現在的問題是,對於那些沒有獲得xor表的遊戲,我們該到**去找這兩個金鑰?也許key1/key2的關係能夠從中透漏點線索;也許這根本不是個問題,因為cps-2遊戲已被xor方式crack得沒剩下幾個了。
1/15/2006
nicola發現96位的key1可以通過乙個64位的金鑰master_key匯出來,他對解密流程進行了修改,其過程大致為:已知master_key(64),將其擴充套件至key1(96);通過fn1(key1,opcode address)算出乙個seed(16);然後將seed(16)擴充套件至subkey(64),再將subkey(64)擴充套件成key2(96);最後通過fn2(key2,opcode ciphertext)得明文。可以看出對於每乙個不同的opcode 位址而言,key2是不一樣的.... 這是cps-2加密演算法中最令人感到棘手的乙個性質,但master_key和key1卻是始終固定的。nicola進一步修正了fn1中的s盒;他同時還指出,watchdog呼叫指令中的opcode與master_key沒有關係,他猜想cps-2中以自殺電池維護的加密裝置ram中共有128位資料,其中的48位為watchdog呼叫指令,16位為加密的位址範圍,而剩下的64位則為遊戲的master_key。至今為止,nicola已經通過暴力嘗試的方式獲得了大部分遊戲的master_key,但是仍有一部分遊戲因為sample(即密文、明文對)不夠多而無法得到其master_key,nicola目前還沒有想到什麼好辦法來克服這一困難。老實說,我對andy是怎樣判斷出fn的方法更感興趣,可是....他為什麼要用西班牙文來寫他的blog呢?.....又被鬱悶到了。
1/17/2006
nicola以暴力破解的方式獲得了大多數具有xor檔案的cps-2遊戲的master_key,他指出,要有效地破解乙個遊戲,對於同一位址a而言,必須擁有至少7個(e,d,a)三元組,其中e為運算元密文,d為運算元xor處理之後的明文。仍然還存在著一部分遊戲無法獲得master_key,原因在於它們只擁有少數幾個(<7)相同位址的三元組,nicola猜想也許可以通過「互補」性質來獲得更多的三元組,不過這有可能導致「誤報」,即破解出來的結果並不是真正的master_key,這需要一點運氣和耐心。目前,對於那些並不具備xor檔案的遊戲,還不存在有效獲取master_key的方法。
1/22/2006
實驗證明將「互補」性質用於蠻力破解是有效的,nicola借助這一方式再次成功地獲得了若干個master_key,但是即便如此,仍然存在著不少遊戲根本沒有辦法以暴力方式破解,因為可以利用的同址三元組實在太少了。目前進展十分有限,nicola嘗試著比較了一下屬於同一遊戲的多個語言版本的master_key,並試圖觀察出它們彼此之間所可能存在的某種聯絡,不過這種方式看起來似乎需要點想象力,還有難得的運氣。
2/18/2006
nicola以表驅動方式對暴力破解的程式進行了改良,使速度獲得了極大提高。他指出,每多獲得乙個(e,d)組合,便能將fn2的96位金鑰空間縮小2^16倍,因此對於fn2的96位金鑰,僅需96/16=6個(e,d)即可破解,其前提是,這些(e,d)對所對應的opcode address(即a)必須是相互相容的,即,它們的位址a的低17位必須是相同的。而問題是,並不是所有的遊戲都能找到足夠數量的符合條件的(e,d,a)對,在這一關鍵問題上,nicola的進展非常有限,andy在此期間也嘗試了一種新方法,但也失敗了。目前,經nicola改良之後的暴力破解程式的效率得到了較大的提高,破解已知8個(e,d,a)對的rom僅需15秒,而破解已知3個(e,d)對的遊戲則需要將近1天的時間。在經歷並克服了許多磨難之後,nicola和andy兩位也明顯有些疲憊了,是該好好休息了。
各種Java加密演算法2
base64的加密解密是雙向的,可以求反解。md5 sha以及hmac是單向加密,任何資料加密後只會產生唯一的乙個加密串,通常用來校驗資料在傳輸過程中是否被修改。其中hmac演算法有乙個金鑰,增強了資料傳輸過程中的安全性,強化了演算法外的不可控因素。單向加密的用途主要是為了校驗資料在傳輸過程中是否被...
MD5加密演算法2
md5的全稱是message digest algorithm 5 資訊 摘要演算法 在90年代初由 mit laboratory for computer science和rsa data security inc的ronald l.rivest開發出來,經md2 md3和md4發展而來。它的作用...
Yii 2 密碼加密演算法
1 更新後的 php 現代 php 中的密碼安全性 2 3 yii 2預設用user表儲存賬號資訊,包括使用者的密碼,user表結構如下 idusername 賬號auth key password hash 儲存密碼的hash值 password reset token 忘記密碼,重置密碼用的to...