米聊是如何匹配好友的?
01-13
已知:掃描通訊錄
疑似:掃描通話記錄,掃描gmail賬戶。問題:為何會匹配出完全不認識的用戶?
電話號碼最多可變的數字10位,空間大概是10^10大小 (11位因為第1位都是1)。
剛剛我寫了個小python程序,非常簡單,沒有任何優化,而且python的效率本來就低。
import hashlib
a = ["%d"%i for i in range(5*10**6)]b = [hashlib.md5(i).digest() for i in a]
只用了12秒。換算過去,大約需要24000秒,也就是最多6個小時用這個5秒鐘寫出來的小腳本就可以把所有的電話號碼的MD5都窮舉出來。如果用個C語言或者用個好點的演算法,可能時間會縮短到這個的1%,那也就是5分鐘左右。
說自己的工作人員也無法解密的同學,似乎是負責運營的,可能真的不了解技術細節,保存MD5是一個好的方案,但是對於這樣小的空間來說,依然是無濟於事的。這個加密要學學Discuz,多加一個SALT就能解決很多問題。早期的各種網站、論壇都是使用MD5加密,但是在強大的彩虹(hash)表面前,大部分不健壯的密碼都會被窮舉(在線窮舉:http://www.cmd5.com),後來Discuz改善了加密方式(百科:http://baike.baidu.com/view/2547898.htm#5)。如果小米真的只是單向MD5,這被刷庫之後就讓人不淡定了。
其實用md5(私有鹽+電話+私有鹽+號碼+私有鹽) 這樣要窮舉出來非一日之功。
和工程師具體溝通之後,之前的回復不是特別準確,米聊在通訊錄匹配過程中做了加密,所有的匹配都是通過加密數據進行的,而且還在繼續改進方法,保證用戶數據安全。
米聊里「你認識的XX」是檢測用戶的通訊錄獲得的。「XX可能有你的聯繫方式」應該是對方通訊錄里有你的聯繫方式。PS:Android手機有google account sync,所以掃描gmail很簡單吧
不需要解密,通信錄窮舉寫入手機號,然後抓取返回
多注意android的應用,很多莫名其妙要讀取通訊錄許可權,真的費解.
推薦閱讀:
※為什麼MIUI9已經「快如閃電」了卻還要「基於安卓」?
※為什麼小米MIX取消額頭而不是下巴?
※如何評價 MIUI 的 AnalyticsCore 後門?
※如何評價小米公司沒有開除秦濤?
※微博上的「秋葉隨風ivan」是誰?有哪些詳細的故事?