米聊是如何匹配好友的?

已知:掃描通訊錄

疑似:掃描通話記錄,掃描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」是誰?有哪些詳細的故事?

TAG:小米科技 | 米聊 |