字體:小 中 大 | |
|
|
2018/11/07 00:33:55瀏覽1415|回應0|推薦5 | |
傻蛋這次要吐嘈的是現在的密碼機制。 當然,要從最源頭的故事說起,我們才好看清楚這個機制是怎樣的荒謬法。
密碼,資訊系統的密碼,或是一些網站的密碼。 就是你登入時要填寫的,那個通常會隱藏輸入值的那個密碼。 帳號和密碼都被人知道,這個帳號可能就不再是自己的了。 密碼啊密碼,好像有點神祕與高深? 從頭看起吧。
傻蛋最早看過的一些老舊資訊系統,密碼是怎麼保存的? 如果是廿年以前,小公司或不是那麼高檔的公司,密碼,就是資料庫的一個欄位。 比較草莽點的,就是直接了當的保存。 只要資料庫被破解,就整個看光光了。 這就是最慘的,最不設防的。 以前是真的有這種的喔。
稍微有點覺悟的,就不會直接的存密碼。 傻蛋看過密碼是自己編規則的編碼,如a改成dx,0換成7z這類一碼換兩碼的。 只要存一個密碼進去,然後改其中一個字,觀察一下變化,要把轉換規則破解,很容易。 這種土密碼基本上接近不設防,但是早年是真的有。
再進一步呢,開始出現一些加密機制。 經過一些複雜規則的轉換,密碼會被加密,不像上面講的,看看密碼和保存的值很容易可以找出規則。 喔,加密的演算法還經過一些權威認證過喔! 但是啊但是,用同樣的演算法,這密碼要破解,其實比自己亂編的轉碼規則好方便破解哩! 然後是用所謂的非對稱的方式加密,需要鑰匙檔案搭配,做到唯一性的加密。 只要所謂的密鑰不遺失,理論上就很難被破解了。 但是啊又但是,這種密鑰的保存管理很麻煩。 真的弄到嚴格到不行的,萬一密鑰丟了或壞了,沒備份,那一堆資料有可能就沒法救了。 然後若備份的密鑰丟了,那又形同不設防了。
密碼就是這樣一個很麻煩的東西。
然後有另一種保存密碼的思路出現。 那就是,不需要真的保存密碼本身,不需要知道密碼的值,只要驗證能過就好。 之前的加密,之所以複雜,是因為要能夠解密。 如果只需要驗證密碼相符,不需要能夠還原的話,安全性可以提高些。 這就是用所謂的雜湊演算法保存密碼。 雜湊就是用一堆亂七八糟的運算處理打亂原始輸入。 亂到即使只差一個字元不同,計算出來的結果也亂到連它媽媽都認不得的亂。 因為就是一個亂,所以也無從反推原密碼,因為寫演算法的人都辦不到啦! 而雜湊亂歸亂,其打亂的步驟是固定的。 所以相同的輸入,會有相同的雜湊結果。 當初你的123的簡單密碼,經過雜湊變成一長串亂碼保存在資料庫裡。 在輸入一次123密碼,用同樣的雜湊,會和保存的值一樣。 所以可以驗證,但又不知道原來的值。 當系統忘記密碼不是寄你之前的密碼給你,而是寄重設的新亂數密碼給你,就代表密碼機制是用雜湊這套的。
這種雜湊演算法最常見,也最普遍的,是叫md5的算法。 很多原始一點的網站帳密就是簡單的md5保存而已。 當然這種密碼最終也是笑話一場。 因為同樣的輸入必然產生相同雜湊,所以資料庫裏面雜湊密碼相同的人,也就是使用相同的密碼。 用常見的密碼更新一個帳號,看看有沒有用相同密碼的人喔,一找一大串。 最後有駭客乾脆把各種可能的密碼都編成字典,如1qaz2wsx這種一斜二斜的智障密碼,到各種日期組合,喔喔,甚至到各種字元組合,都做成查表。 於是乎,那些號稱用雜湊存密碼的,連系統管理者都不知道資料庫裡雜湊碼原始密碼是甚麼的系統,駭客看到等同於明碼了。 網路上有線上md5解密,不是雜湊被破解,而是各種可能的密碼字元組合都可以查表了!
接下來密碼又有創新突破。 雜湊法的密碼,之後又加上了所謂的加鹽。 用隨機亂數或和對應帳號有關不會重複的資料,當作所謂的鹽,和密碼明文摻在一起再做雜湊,就是現在主流的雜湊密碼。 這是一種聰明的策略。 因為每一個帳號都有不一樣的複雜的鹽,所以即使是相同的密碼,實際存在數據庫的值也會完全不一樣。 而且隨機的鹽,很難用之前的比對編字典方式破解了。 所以故事到這裡就差不多了。 其實這樣是差不多安全的了,只要鹽有一定長度且是隨機亂數,破解的成本就會很高。 就算資料庫被搬走,用所謂的常見密碼,也需要為每一個帳號的鹽都計算一次,才能確認每個帳號的密碼明文。 那和直接硬猜去登入差不多了,如果程式都被偷了,用猜密碼破解,也擋不了。 其實如果故事到這裡結束,那傻蛋沒什麼好吐嘈的。 畢竟是一路進化,而且整個方案也有一定的防護效果。
但去年傻蛋發現之前加鹽雜湊密碼機制又被推翻為不安全。 出現一種bcrypt的新雜湊加密演算法,大家都說,要用這個才安全。 這個演算法一看有點神秘,傻蛋一開始也不知道是怎麼回事。 只知道,同樣的密碼,用這個雜湊,每次得到的都是不同的值。 喔喔,所以不用加鹽了,就自動安全了。 然後又說這個演算法有一個成本的參數,越高越安全,但也越耗時。 喔,一個神秘的雜湊演算法,可以靠設定參數控制安全水平。 好像很神,用起來也簡單,只是原理沒有之前加鹽雜湊直白,傻蛋不懂。 但最近看懂了這個演算法的內涵,結果內心是大大的吐嘈。 這是啥鬼東西? 原來這個新演算法也是加鹽雜湊,打包起來而已。 密碼欄位看起來只有一欄,其實是把保存的密碼分三段。 第一段是說用什麼雜湊法,與雜湊幾次。 第二段是隨機產生的鹽的可還原加密的值,也是等等要做雜湊使用的鹽。 最後一段是用鹽演算之後的最終結果保存值。 然後說說成本,10的預設成本是2的10次方,也就是1024次。 怎麼搞? 就是用同樣的鹽,反覆的做1024次雜湊,把前一輪的雜湊當成下一輪輸入。 就是1024次喔! 最近有人覺得駭客的硬體能力提升了,覺得安全系統水準要提高,那,cost加到12甚至14來因應。 12就是同樣的鹽4096次反覆的雜湊。 加密保存時,要4096次反覆雜湊,驗證時,自然也要4096次。 cost每增加1就是兩倍的成本哩! 而且我們知道電腦運算速度很快,幾千次也不過眨眼間完成。 所以呢? 荒謬之處,就是傻蛋看到有人問,cost到底要多少才夠安全。 最佳解答是啥? 是看你的硬體環境和使用者負載量,選一個可以負擔的最大cost。 不是看次數,而是看耗時,建議每次加密與驗證至少要消耗四分之一秒,這樣網站才足夠安全。 喔,這個四分之一秒,在一些運算能力強悍的硬體上,那是CPU瘋狂的運算上百萬次的雜湊才能耗掉的喔! 這些所謂的密碼安全專家的終極對抗駭客的理論,就是用這種兩敗俱傷的方式,先自虐,後虐駭客,讓駭客放棄用暴力建字典破解雜湊密碼而已。 那個,同樣的加鹽雜湊重複算個幾百萬次到底是創造了什麼? 浪費電而已。 那些密碼好猜的,根本不用這麼暴力的手動,還是輕易可以被破解。 密碼不好猜的,即使不浪費那麼多電,只用基本加鹽雜湊,再加上點客製的變化,也就足夠讓駭客的破解成本高到不切實際了。 每驗證一次密碼就要CPU反覆運算百萬次的計算,而且是反覆的相同處理,如果這是個總統級的帳號,用一堆硬體跑上一整天,計算它個幾億次都值得,這樣消耗值得。 反過來看,隨便一個普通用戶,沒太大價值的遊戲或論壇帳號,密碼驗證都要這樣耗運算資源,這代表了什麼? 這是浪費電,製造溫室氣體,大量的產生反覆的計算,卻幾乎沒有什麼附加價值啊! 這個密碼驗證消耗的運算資源,在這批專家的這波思路下,可說是無窮盡的增加了。 一個軟體系統有一大堆的功能,什麼戰鬥數值計算,商業邏輯運算,知道嗎,這些實際上有意義有價值的運算,消耗的CPU運算資源和現在主流的密碼驗證相比,可是連零頭都不算喔! CPU性能提升,是提升到什麼鬼上去了,為什麼我們都感覺不到? 真的搞懂,才發現真相是這樣荒謬的。 至於是否還有其他可怕的爛設計,浪費電的爛程式,傻蛋現在覺得恐怕不太妙。 加密貨幣的運算能力只怕也是這個思路,比賽浪費電來創造金融價值的吧? 狗屁的浪費啊,為了浪費而浪費呢!
這是個道德崩壞的大智障時代,好像是這樣的吧?幹! |
|
( 不分類|不分類 ) |