加密主要包含通訊資料和儲存資料加密,目的都是為了保證其傳送和儲存的隱秘性,從而保證資料的安全。目前常見的加密方式有對稱加密、非對稱加密、hash加密、hash加鹽加密等,這些在遊戲中都會用的,我們會對其用途以及缺陷一一說明,當然了,為了保證其加密演算法的安全以及高效,我們也會介紹幾種自定義的加密演算法,看看加密如何來維護我們的資料安全。
對稱加密演算法是應用較早的加密演算法,技術成熟。主要就是對金鑰的乙個維護,傳送方把資料和金鑰通過一定的加密演算法處理後,傳送給接收方,接受方接到之後在使用相同金鑰及演算法的逆演算法對密文進行解密。這就是一般的對稱加密演算法過程。常見的對稱加密演算法有aes、des,3des,tdea,blowfish,rc5,idea等,建議用aes,速度快,安全性也可以。
對稱加密演算法的特點是演算法公開、計算量小、加密速度快、加密效率高。缺點主要就是金鑰需要雙方都有,如果金鑰被竊取,那麼加密就會比第三方破解,特別是遊戲中,金鑰如果存放在客戶端中,容易被破解反編譯到。
我們可以採取登陸訊息和邏輯訊息採用不同的金鑰,登陸驗證通過之後,伺服器為每個使用者分配不同的金鑰,然後把邏輯金鑰傳送給客戶端,以此保證金鑰的不確定性,從而增加遊戲的安全。
非對稱加密演算法使用兩把完全不同但又是完全匹配的一對鑰匙—公鑰和私鑰。在使用不對稱加密演算法加密檔案時,只有使用匹配的一對公鑰和私鑰,才能完成對明文的加密和解密過程。這對於對稱加密演算法來說,又安全了一步,也是目前https常用的加密方式,公鑰可以分配和暴露給所有想要訪問的請求者,但金鑰一定牢牢的掌握在伺服器這邊,如此對通訊來說,安全性***。常用的加密演算法,rsa,dsa,ecc。
非對稱加密演算法,優點就是安全,但缺點就是不夠快,比較耗費cpu,如果在遊戲中每一次訊息都有其加密,對cpu的損耗還是挺高的,所以遊戲中一般不用這種加密方式,當然了也看遊戲型別,如果對這方面的效能要求不高,安全性要求有很高,採用業務科厚非(那個遊戲這麼傻啊)。
hash加密,就是常見的使用md5、sha1等單向hash演算法保護密碼,使用這些演算法後,無法通過計算還原出原始密碼,而且實現比較簡單也高效,因此很多網際網路公司都採用這種方式儲存使用者密碼。
但安全性越來越擔憂了,因為隨著彩虹表技術的興起,可以建立彩虹表進行查表破解,目前這種方式已經很不安全了。
hash加密既然容易被彩虹表破解,那麼可以採用加鹽、多次hash等擴充套件,這樣可以在一定程度上增加破解難度。常見的方式也是傳送方和接受方,維護乙個鹽池,加密和解密的時候加上這一段鹽池來進行hash。
不過這種演算法又回到了對稱加密中對金鑰的保護問題了,如果鹽池洩露,別人依然會破解。
怎麼辦?有人又想出了,讓鹽池隨機的方式,比如pbkdf2演算法,原理大致相當於在hash演算法基礎上增加隨機鹽,並進行多次hash運算,隨機鹽使得彩虹表的建表難度大幅增加,而多次hash也使得建表和破解的難度都大幅增加。一次密碼驗證過程進行1000次hash運算,對伺服器來說可能只需要1ms,但對於破解者來說計算成本增加了1000倍,而至少8位元組隨機鹽,更是把建表難度提公升了n個數量級,使得大批量的破解密碼幾乎不可行,該演算法也是美國國家標準與技術研究院推薦使用的演算法。
終於到這個了,以上那麼多高大上的加密演算法,都是業界比較成熟的演算法,好處是處處有api支援也有人實現,拿來就用,壞處也是,演算法格式規整透明,除了非對稱演算法,都有其對應的破解方式。遊戲的加密要怎樣?安全、安全,高效、高效,你不能乙個加密演算法就耗費我100ms的cpu吧,太浪費了。
我們可以嘗試一種動態加密的方式,就是每一次請求保證用不同的金鑰,這樣即便乙個訊息被擷取破解了,下一次金鑰又不一樣,如此破解者會比較崩潰。怎麼做?我簡單說下思想。
每個訊息必須有唯一id,乙個是防止訊息重放,乙個可以用來做我們的加密。比如我們初始的時候有乙個密碼池 a=【1,2,3,4,5】,每次訊息從伺服器傳送出去的時候,訊息id都+1,我們的目的乙個保證金鑰動態,乙個就是保證演算法足夠高效。當前金鑰=a.index(訊息id%a.length),如此就能保證每次金鑰不一樣,具體拿到金鑰如何加密,完全可以用自己的加密方式,比如把二進位制一部分擷取通過金鑰移位操作,或者演算法運算都可以。
演算法特點
有效破解方式
破解難度
其它演算法名字
對稱加密
可以解密出明文
獲取金鑰
中需要確保金鑰不洩露
aes,3des
非對稱加密
一對鑰匙—公鑰和私鑰
獲取私鑰
高效率低,安全性高
rsa,dsa,ecc,dh
hash加密
簡單,高效
碰撞、彩虹表
中md5,sha1,sha1256
加鹽hash
對hash加鹽處理
碰撞、彩虹表
中需要確保「鹽」不洩露
同上pbkdf2
對hash的鹽池進行隨機處理無難
隨機鹽池不能太大,8個位元組比較合適
同上自定義演算法
非標準,高效,安全無難
演算法的靈活性
動態金鑰
對稱加密演算法 DES加密演算法
一 對稱加密演算法 對稱加密也稱為常規加密 私鑰或單鑰加密。乙個對稱加密由5部分組成 明文 plaintext 這是原始資訊或資料,作為演算法的輸入。加密演算法 encryption algorithm 加密演算法對明文進行各種替換和轉換。金鑰 secret key 金鑰也是演算法的輸入。演算法進行...
gentry同態加密演算法 同態加密演算法
本文對同態加密演算法進行學習。參考文章同態加密演算法。定義同態加密演算法保證對聯合密文的解密結果等價於聯合明文。若存在同態加密演算法f,針對明文a和b,加密後分別得到a f a b f b 將其和a b 解密後得到a b,則同態加密演算法f被成為加法同態加密演算法。加法同態演算法的加密和解密分別用e...
對稱加密演算法 非對稱加密演算法
對稱加密演算法 對稱加密演算法是應用較早的加密演算法,技術成熟。在對稱加密演算法中,資料發信方將明文 原始資料 和加密金鑰一起經過特殊加密演算法處理後,使其變成複雜的加密密文傳送出去。收信方收到密文後,若想解讀原文,則需要使用加密用過的金鑰及相同演算法的逆演算法對密文進行解密,才能使其恢復成可讀明文...