在現今所有的登入系統裡,為了執行密碼驗證,用來存取電腦系統的密碼通常會以某種形式被儲存在資料庫中。
然而,即使企業能夠確保儲存密碼的資料庫不會被非法存取,只要破解者有辦法猜到你的密碼,那麼你的帳號安全一樣會受到威脅。
在本篇文章中,我們將會深入了解企業是如何確保即使資料庫被竊取也不會導致使用者密碼被知道以及破解者如何將密碼從未知還原成已知。
※即使被竊取也無法還原的密碼儲存方式※
為了增強密碼的隱私,被儲存的密碼驗證資料一般是透過將單向函數應用於密碼上並結合其他資料而產生的。
所謂的單向函數指的是那種只能夠將任何輸入值轉換成一個固定輸出值並且該輸出值無法還原回輸入值的函數,這種函數又被稱為雜湊(Hash)函數。
它的原理來自於資訊的損失,也就是將輸入值按照一個極為複雜的公式來打亂、打散甚至刪除部份輸入值並藉此獲得一個唯一的、經處理過的輸出值。
舉個例子,我們知道根號 2 大約等於 1.41421356…,但若我們只知道 414 這個數字的話則無法逆向還原出根號 2,如此一來即使破解者獲得 414 這個數字也沒有用。
一般來說,一個負責任的企業網站幾乎都會在使用者送出會員帳號申請資料時將密碼轉換成這種無法還原的輸出值(在此稱為雜湊值)以確保沒有任何人能夠在不破解的情況下知道該會員的密碼。
而在驗證會員密碼時,只要將會員輸入的密碼套用同一個單向函數並比對其輸出值與儲存在資料庫裡的雜湊值是否一樣就能得知會員密碼是否正確。
這種密碼儲存方式不僅能讓企業降低因資料庫外洩所造成的個資外流成本,還能確保破解者只要有一點點的差錯就無法成功竊取會員帳號。
※破解者如何對付這種無法復原的密碼?※
即使用於建立雜湊密碼的函數可能在密碼學上是安全的,但雜湊密碼的使用卻也為破解者提供了一個能夠驗證大量密碼猜測的快速方法 – 藉由將單向函數套用到每一個猜測上並進行比較來驗證資料。
最廣泛使用的雜湊函數(例如 MD5、SHA1)可以被快速計算並且攻擊者可以將這個操作重複用於不同的猜測直到找到有效的比對結果為止,通常這就意味著明文密碼已被找到(但嚴格來說仍然不算還原)。
為了有資料能夠驗證猜測結果,密碼破解需要攻擊者能夠獲得雜湊密碼,例如透過讀取密碼驗證資料庫或攔截在開放網路傳送的雜湊密碼,或者使用某些方法在快速以及沒有限制的情況下檢測被猜到的密碼是否正確。
但是,設計良好的系統會限制破解者存取失敗的嘗試次數並且若超出限制次數的話則會通報管理員以便能夠追查攻擊者的來源,這將能有效地阻止破解者取得雜湊密碼。
如果沒有雜湊密碼的話,那麼破解者仍然可以透過前面所說的被猜到的密碼來企圖存取電腦系統,雖然這麼做顯得沒什麼效率,但這卻也是不計代價時的可行策略之一。
藉由使用竊取來的雜湊密碼,攻擊者可以在不被被發現的情況下工作,而如果攻擊者獲得了數個雜湊密碼的話,那麼破解至少其中一個的機會是相當高的。
不僅如此,破解者也還有許多其他能夠獲取密碼的非法方法可用,例如社交工程、竊聽、鍵盤記錄、釣魚網站、垃圾搜尋、計時攻擊…等,哪一種方法的破解成本較低則破解者通常就都會採用那一種方式。
破解過程還可能會與其他技術相互結合,舉個例子,以雜湊為基礎的一般質詢-回應式密碼驗證方法可能會讓能夠破解密碼的竊聽者取得雜湊密碼,這種方法對於公用網路來說尤其危險。
為了解決這項缺點,有大量的強加密協定能夠在透過網路驗證的過程中不暴露雜湊密碼,例如藉由在傳輸過程中使用高安全等級的金鑰來保護它們或是使用零知識證明等密碼技術,但這部份已超出本篇文章的討論範圍所以不在此詳述,有興趣的讀者可以自行尋找相關資料。
留言列表