從密碼學角度看TX常用的TEA加密算法


免責聲明:此文檔的目的是為了分析TX常用的TEA算法,參考信息全部根據網上公開的資料,關鍵信息也做了過濾,不存在任何攻擊和泄密。

TEA這個簡單加密算法在中國如此有名,大概主要因為TX在大量協議,本地數據中使用這個算法。網上很多人甚至直接將TX的加密算法稱為TEA算法。

TX的算法,數據分塊的加密的確采用的是TEA(第一代)算法,密鑰16個字節,每次處理的分塊數據是8個字節(2個32位整數),但標准的TEA算法推薦處理的輪數是32輪甚至64輪,而TX使用的是16輪。應該是為了加快速度。

TX的加密算法,是於一個數據流(BUFFER)的處理,采用的的是改進CBC的算法(看見一blog稱這個是交織算法,很貼切,大部分翻譯的書這個地方翻譯為塊加密,反而不好懂)。你可以這樣認為TEA這類對稱加密算法是針ECB的(Electronic codebook),是處理一個定長的數據塊的。但如果如果對於流數據只采用ECB算法是有巨大風險的,因為對稱加密算法的本質是相同的原文和密鑰,得到的密文肯定一致,如果對於流數據,單純的分塊處理,很容易讓人偽造密文數據(維基上都有人針對某個圖片做ECB預算,對比原圖和加密后的圖像,你仍然可以從密文圖片上看出很多信息)。CBC算法對於這個問題的改造是在密文前面加入一個隨機數生成的初始化向量IV(Initialization Vector),通過ECB算法得到的密文半成品要和前一個密文,(包括IV)進行異或預算預算得到密文,因為隨機數每次都不一致。這樣你可以認為密文是永遠不會重復的,而且這樣偽造的難度大大提升。另外CBC的算法是在ECB的基礎上的,所以如果你的長度不足以填充一個塊,會進行補齊。

下圖來自維基

clip_image001

clip_image002

TXCBC算法的大致思路是,1個字節補齊長度 + N個補齊的字節(隨機數填充)+M個字節的SALT(隨機數)+ 數據內容+K個字節的校驗0。補齊長度=TEA算法的塊大小8 -(非補齊數據區長度模除 % 8),而非補齊數據區長度(1字節的補齊長度+數據內容長度+0校驗長度之和)。對於解密的校驗,在在解密后,檢查K個0的校驗字段都是0,可以認為在不知道密鑰的情況下,進行偽造密文還是有不少麻煩。要說明的是這個算法的第一個BLOCK里面是可能有原文數據的,而其算法對於第一個BLOCK也進行了加密處理,這個和標准算法並不太一致(標准算法IV是無意義的),而且由於N可能為0,其加鹽的處理是也是必須的。

先拋開加密算法的安全性不談,吹毛求疵的說,這個實現在性能上的考慮有點欠缺。

首先這個算法沒有考慮原文數據區字節對齊的問題,(假如補齊的長度是2)可能會導致原文的數據每次處理都不是在對齊位置,這多少會影響一些計算性能。

另外,TEA算法是針對2個4字節整數的算法,並沒有規定字節序。而TX的實現為了考慮多平台的一致性,實現內部計算時都是使用網絡序。這的確嚴謹一點,但考慮到代碼99.99%的時候服務場景仍然是X86平台,而且X86的小頭在整數轉換上的優勢,反而不如直接要求所有環境統一成小頭字節序運算(就是要求在大頭字節序的環境轉換為小頭字節序運算)。這樣就避免了大部分時候轉換網絡序的消耗。

另外在每次異或的時候,是對每個字節進行的異或處理,上面的這些問題,稍微改進一下,提高20%的速度應該是有可能的。

最后還是YY一下這個算法的安全性,TEA算法其實足夠滿足大部分要求。雖然TEA是一個簡單加密算法,TX使用的算法,早已被破解了,源代碼也漫天飛了。但對稱加密的最主要安全性在於每人不同的的動態密鑰,不在算法本身,而且我們要搞明白加密算法主要用於網上的協議加密,存儲數據的簡單加密,他真正能防范的是第三方模擬,和中間點截獲報文分析。而對於木馬,不是加密算法對抗的范疇。形象的舉例說密碼學的應用范疇是二戰潛伏在敵占區的英國特工向本土發報的報文處理,它能讓德軍截獲電報時也無法破譯,而木馬是可能潛伏在發報員身邊的德國間諜,對抗方法當然不一致。

參考資料:

《應用密碼學》 當年密碼學的紅寶書,據說當年此書是管制書籍,禁止向我國出口,個人感覺翻譯有點亂。

《密碼編碼學與網絡安全》 這本書在一些細節上寫的更清晰一些。

《維基:塊密碼的工作模式》 好文,強烈推薦。

《看雪論壇:RTX(TX通)本地保存密碼TEA變形算法及還原器》 看算法的說明感覺根據DLL反出來的接口

《TEA和QQTEA》 這哥們應該也是通過反編譯

《QQ登錄協議安全性分析和改進研》   這篇文章其實把QQTEA算法都說明了,而且作者探討了登錄協議中的安全性問題,雖然他的觀點我不全部贊成,但的確是一片很有意思的文章。

pudn 上有很多是實現的源代碼,比如QQTea,應該也是一些破解實現,但下載要收費。

  

【本文作者是fullsail(雁渡寒潭),本着自由的精神,你可以在無盈利的情況完整轉載此文檔,轉載時請附上BLOG鏈接:http://www.cnblogs.com/fullsail,否則每字一元不講價。對Baidu文庫,360doc加價一倍】


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM