密碼為什麼明文存放

發表於2011-12-23

來源:shell909090

很早就寫過一篇blog,說到過,你的密碼應當一次一密,至少某些密碼洩露時不至於波及太廣。結果這次CSDN不幸中槍。我不去討論多少人急急忙忙修改密碼,多少人資料洩露,單說說為什麼很多時候密碼是明文存放的。

就我有記憶以來,我寫應用就從來沒有明文存放過密碼。最起先是md5方式存放。md5可以讓你找到hash值,有的時候也會被用於窮舉。但是無論如何,md5密碼本身比明文安全很多。後來改成了challenge-response驗證模式,也是用md5做的hash後進行c-r的。再後來,md5的碰撞衝突的論文出來,後面用的多數都是sha256了。從頭到腳,我就沒做過密碼明文存放,並且,我認為這是正常程式設計師最起碼的修養。(當然,明文存放的程式碼不是沒有,不過那是除錯模式) 但是現在我所知,很多系統的身份驗證都是密碼明文存放的,為什麼?其實我不大理解。不過有時候問起,有些人和我說了幾個我覺得不是搪塞的理由,現在抄錄如下,告大家知。

1.不用明文密碼沒法應付檢查。大家知道網際網路審查,有時往往會一個電話過來,要XX使用者的密碼。如果你沒法給出,上頭就認為你不配合,事情各種難搞。作為審查機構的老闆,當然沒必要知道明文密碼的危害。他們只知道,我要密碼,為什麼不行。所以,悲崔的程式設計師們就往往會得到一條死命令,儲存明文密碼。

2.壓根不知道明文密碼有什麼問題。中國的網際網路有太多的沒基礎的新人,從石頭的縫隙中頑強的生長出來。這不是壞事,壞事的是這些人往往會在一些基礎問題上出現奇怪的毛病。例如有些程式設計師,寫程式很快,但是居然從來不知道密碼明文存放會導致什麼問題。更神奇的是,這些人中,有一家銀行…

3.自信暴棚的混帳。有些人的自信總比別人強,而且強在莫名其妙的地方。例如:我的伺服器肯定是沒問題的,所以我的密碼一定要明文存放。如果不,就是質疑我的技術。實話說,這種人真是少數中的少數。

4.遺留系統。很多系統設計的時候因為某個其他理由,使用了明文密碼。等後來這個理由不存在了,密碼系統升級成了一個困難。因為密碼系統太重要了,所以在沒有太大利益的情況下,總是傾向於不修改系統。但是有什麼足夠利益來推動系統修改呢?使用者安全問題在發現前不是一個問題——好比這次的CSDN,不是被暴出來的話就根本不會被當作一個問題。系統的管理者,每個人都沒有足夠的動力去修改系統。

5.世界的陰暗角落。有的時候,程式設計師/老闆明文存放的理由,是為了方便盜竊使用者其他網站資料。例如我所知的某釣魚案例,你註冊網站,就提供很多免費服務,網站看起來也很靠譜——除了後來突然爆出這家網站其實暗地中用你的生日/密碼猜解信用卡/銀行卡密碼,大家才突然發現,這家網站其實根本沒有在美國註冊,而是一個聽都沒聽說過的國家。而且很多網站提供從其他網站匯入之類的功能,更加的危險。以前經常爆出twitter密碼被竊取,主要就是因為OAuth開放以前,twitter上的第三方應用需要提供原生密碼,導致很多小應用的目的其實就是收集密碼…

6.為了給使用者提供方便。這個理由和上一個很類似,不過不是為了某些險惡的目的。而是客戶經常要求——為什麼我不能做XX事,為什麼我不能blahblah。好吧,為了讓你能,我們就必須儲存明文密碼。明文密碼的儲存原因很多,不過結論都是一樣的。在任何網站/服務上,你絕對不能使用同一個密碼,零級密碼除外。尤其請注意,不要在兩家銀行使用同樣的銀行卡密碼/網銀密碼,原因不說。

從未來進化的角度說,密碼的未來進化趨勢是核心授權體系。就是你要向某個網站驗證身份,只需要向身份驗證商驗證,剩下自動完成。現在的openid就是一種解決方案。密碼都沒了,還談什麼洩露呢?同時,實體互動和授權的精細劃分也是一個趨勢。某個網站訪問別的網站的資料的時候,會形成一個訪問令牌。這個令牌對需要訪問的內容詳細寫明,並且需要使用者授權。OAuth就是這個趨勢的代表。另外一個趨勢是利用某個足夠安全的裝置作為以上兩者的終端載體。目前這個裝置用的是手機,可是——手機不是一個足夠安全的裝置。也許這會是下一個XX門的隱患吧。

參考:《密碼管理規範

相關文章