我的多名QQ好友以及QQ群中的多名群友,都出現過QQ賬號被盜用卻密碼沒有被修改的情況,然后只要自己再改下密碼,也就在危機之下保住了自己的QQ賬號。這算是比較幸運的事情了,但是於此背后我嘗試思考這是為什么呢。也許是是盜號者良心發現吧(自我安慰罷了~~~~(>_<)~~~~ ),也許是他們只需要臨時使用我們的密碼等等,在此且先不考慮這些原因,而就從技術角度來分析一下出現這種情況的可能性。
我的猜測是:那些盜號者沒法修改我們的密碼。騰訊對我們的密碼進行了不可逆算法的處理(如MD5),數據庫中是保存了不可逆處理后的值,當登錄的時候是在客戶端就對密碼進行不可逆處理,發送給服務器的是一個處理后的值,還有保存密碼那個功能,保存的也是處理后的值;而當需要修改密碼的時候,會將我們輸入的原密碼直接發送給服務器,然后在服務器進行不可逆處理。為了探究自己的猜測是否正確,也是出於好奇,嘗試探究一下騰訊的API,不過由於本人能力有限,未能完全證明以上的猜測,不過也通過查閱一款早期的手機QQAPI的資料證實了當我們登錄時,的確是在客戶端就對密碼進行了不可逆處理,用的是MD5散列算法,最終保存起來的是我們密碼的MD5值(一個32位的16進制數)。
由於MD5是一種不可逆的散列算法(又稱之為指紋算法或摘要算法),是無法逆向破解的,就像是可以由我們每個人得到我們的指紋,卻不能由指紋來得到我們整個人的信息。所以,就算是騰訊公司,也是不知道我們設置的QQ密碼是什么,也是因為如此,很多網站的找回密碼功能,都只是給我們一個新的密碼,而並不是原密碼。
說到這里,那些盜號者很可能就是盜取了我們密碼的MD5值,而他們卻無法獲取我們的原密碼。由於登錄是需要發送MD5值給服務器,所以他們能登錄,但是修改密碼必須把我們的原密碼發送給服務器,所以他們沒法修改了。也許他們是利用了騰訊數據庫的漏洞而從中盜取,但這可能性不大,畢竟騰訊不是吃素的,更可能的是從我們電腦上盜取,因為我們有保存密碼這個功能,這項功能是為了方便我們用戶,但與此同時也帶來了安全問題,既然電腦上存了我們的密碼,就有被盜取的可能性。於是對保存的密碼進行MD5處理,哪怕被盜,盜號者也只能登錄,而無法篡改我們的密碼,使得危害性大大降低。
也許有人會懷疑是否真的無法從MD5值逆向得到原值,這個我也不能證明,但這是經過很多專門從事加密算法的那些專家研究證明的不可逆算法。網上很多的MD5破解工具,或者MD5破解網站,其實是暴力破解,或者用窮舉法。但這種方法只能計算出非常簡單的MD5值(原值可能就只有三四個字符或者更短的那種),想把所有的MD5值都計算一遍那是不可行的,就拿我的I5 CPU來說,要把所有的MD5值都算一遍,從宇宙誕生算到現在也算不完。也許有人聽說山東大學有個博士研究出了破解MD5的方法,但其實那也不是逆向破解,而是提高碰撞的概率,使得暴力破解所需要的時間大大降低。可即便如此,也不可能在一瞬間就計算出來,畢竟我們人是活的,還會采去其它的措施(如加鹽處理)去防止暴力破解,退一萬步說,通過使用MD5總會比不使用要安全得多。總的來說MD5算法還是很有價值的,去年我研究過支付寶的API,發現支付寶的接口所傳遞的數據就是通過MD5處理以此來保證安全性,所以可見它的價值了。