本網站使用 Kohei Koyanagi 開發的軟體自動翻譯為多種語言。為確保準確,請參考原始 英文 版本。

我們如何保護您的密碼

Splync從不以純文字儲存您的密碼

在之前的文章中,我們探討了HTTPS如何保護您應用程式和我們伺服器之間的路徑,以及SSH如何保護伺服器本身。現在是時候看看伺服器內部了——Splync如何在您的密碼到達後保護它的安全。如果有人取得了您的密碼,他們可以登入您的帳戶並存取敏感資訊,包括您的支出記錄。因此,Splync從不以純文字儲存密碼。相反地,每個密碼在儲存進資料庫之前都會被轉換為雜湊版本。這到底是什麼意思呢?雜湊是一種單向轉換——一旦轉換,便無法還原為原始密碼。這種方法在網際網路上是標準做法,從銀行到大型雲端服務皆是如此,但許多人不知道它實際上是如何運作的。讓我們用簡單的日常比喻來探討。

雜湊基礎:一個總是以同樣方式攪拌的果汁機

要了解密碼保護如何運作,讓我們從一個稱為SHA-256的簡單雜湊方法開始。把它想像成一個總是以相同方式攪拌材料的果汁機。如果您把相同的密碼放入果汁機並按下按鈕,您總會得到相同獨特的果昔——一個被攪亂的字母和數字混合物。關鍵理念是這個過程無法逆轉。就像您無法把果昔還原成原來的香蕉和牛奶一樣,您無法從被攪亂的雜湊中還原原始密碼。

SHA-256範例:如何在不知密碼的情況下驗證

SHA-256是最常見的雜湊演算法之一。例如,它將密碼"splync1234"雜湊為“9cdafa20d069ecfb202e5f0bc937c73071cc6cd85634cc2d95d30ddcf2a71d41”。每當現有用戶輸入登入密碼時,SHA-256總是會在毫秒內生成相同的雜湊密碼。應用程式只是再次雜湊輸入的密碼並檢查是否與儲存的雜湊匹配。系統從不會知道用戶的原始密碼。但是如果攻擊者預先計算出常用密碼及其雜湊值(稱為彩虹表攻擊)以快速猜測用戶的密碼呢?這個擔憂是真實存在的。這就是為什麼現代系統,包括Splync,不依賴於單純的SHA-256。

Splync使用bcrypt雜湊密碼——比SHA-256更強大

Bcrypt使用隨機的每用戶salt,並將該salt(和成本因子)直接編碼在儲存的雜湊字串中。把bcrypt想像成一個帶有秘密香料(salt)和慢速馬達(工作因子)的果汁機——它使每次混合變得獨特且難以複製。由於salt是128位元(≈3×10³⁸種可能性),相同的密碼可以對應到天文數字般不同的儲存雜湊。這使得預計算的彩虹表在大規模上無用。在登入時,Splync從儲存的bcrypt字串中讀取salt和成本,使用這些參數重新執行bcrypt並比較結果與儲存的雜湊。如果它們匹配,則密碼正確——但因為bcrypt有意地緩慢且salt是獨特的,對於攻擊者來說暴力破解攻擊將變得更加昂貴。

使用bcrypt的簡單範例

讓我們看看這在實際中是怎樣的。如果您用bcrypt(使用成本12)雜湊密碼"splync1234",您可能會得到這樣的字串:`$2b$12$gBeouKYdue9uvvuV0HtGgeVPymnrojMqP/wcRw28HFlGEGIQbyw7O`。在這個bcrypt字串中,`$2b`標誌著演算法版本,`$12`顯示成本因子(密碼被處理的次數),`gBeouKYdue9uvvuV0HtGgeV`是獨特的隨機salt,`PymnrojMqP/wcRw28HFlGEGIQbyw7O`是最終的雜湊密碼。因為雜湊本身包含了salt和成本,Splync可以藉由從儲存字串中提取這些值,重現相同的雜湊過程來進行驗證。另一方面,如果攻擊者不知道salt和成本,他們就無法打造適用於每位用戶的單一彩虹表。

雜湊密碼提供雙重保護

這種方法還有另一個重要優點。由於Splync從不儲存純密碼,即使資料庫被洩露或竊取,用戶也不會立即面臨風險。攻擊者無法直接使用被竊取的資料登入,因為他們所擁有的只是被攪亂的字串。這種設計為用戶提供了額外的保護層,除此之外還有伺服器本身的防護措施。密碼雜湊不僅是Splync專有;它是科技行業的標準,像Google、Apple和Amazon這樣的巨頭都在使用。Splync設計非常安全,隨著我們持續改進安全性,例如電子郵件驗證、暴力破解保護和持續監控,這將變得更加安全。