ADVERTISEMENT
Google在今年稍早的時候發表了支援Chrome的密碼檢查擴充功能,它能將使用者的密碼與40億組已知遭到入侵的登入憑證進行比對,讓使用者瞭解自己的帳號是否安全。為了保護更多人,Google也將這個功能整合至Google帳號與Chrome瀏覽器。
自動保護帳號安全
由於許多使用者會以同1組E-Mail地址與密碼註冊多個網站的帳號,舉例來說,我們可能會使用Google帳號所屬的E-Mail地址註冊購物網站,並且使用相同的密碼。如果該購物網站的資安措施有所疏失,造成使用者的帳號資訊外流,就可能會因此影響到Google帳號的安全性。
Google提出解決方案的概念,就是會在不窺探使用者資料的前提下,自動掃瞄帳號、密碼是否與已知遭入侵的資料重疊,以發出警告提醒使用者更換密碼。要怎麼在「不知道帳號、密碼的情況下,檢查帳號、密碼」,聽起來有些弔詭吧,就讓我們來看看Google所使用的技術。
當Google發現其他網站、公司發生資料外洩事件後,就會使用只有Google知道的加密金鑰將被洩漏的資料加密,並將加密後的副本與雜湊值儲存於內部伺服器。
而使用者利用Chrome瀏覽器登入各網站的時候,Chrome也會用只有瀏覽器知道的加密金鑰(簡單地說是在使用者電腦上產生的金鑰,Google也不知道)將帳號、密碼加密,並將加密後的副本與雜湊值回傳到伺服器,如此一來伺服器握有雙方資料。
接下來的工作,就是Google的伺服器要在未解密使用者資料的情況下,核對雙方資料是否相符。為了達到這個目的,系統會使用稱為Private Set Intersection的技術,能夠在不解密資料的前提下,比對使用者的帳號與密碼是否與被洩漏的資料有所重疊。另一方面為了降低比對資料的運算需求,系統會先核對使用者帳號前3個bite的SHA256雜湊值,如此一來可以將需比對的範圍從40億筆資料減少到250筆。
在不公開資料的情況下完成比對
在經過上面圖片的前3個步驟後,使用者手上就會有被Google加密的「被洩漏的資料」,與自己加密的「自己的資料」,如此一來就能在自己的電腦透過Private Set Intersection比對2者是否相符,而過程都不會對外公開自己的資料。
如果2者相符,就代表自己的資料已被洩露,這時候Chrome就會警告使用者,並建議更換密碼,以確保帳號的安全。
使用者可以在Chrome的「同步與Google服務」選項中開啟或關閉這個功能,以安全的考量來說,當然是建議維持功能開啟,並在收到警告的第一時間就更換密碼。
當Google(缺字)其他網站、公司發生資料外洩事件 (缺字) > 發現
「將低」比對資料的運算需求 將低 > 降低
「資料」前3個「bite」x3 資料 > 使用者名稱(帳號) bite > byte
這個「資料」只有Google知道 資料 > 加密方式(金鑰)(?)
這個「資料」只有使用者知道 資料 > 加密方式(金鑰)(?)
建議讀者維持密碼「檢」功能開啟 檢 > 檢查
可「以」同步與Google服務選項中 以 > 在
指的通通都是(而且只是)「使用者名稱(帳號)和密碼」吧?
> 這個「資料」只有Google知道 資料 > 加密方式(金鑰)(?)
> 這個「資料」只有使用者知道 資料 > 加密方式(金鑰)(?)
>
感謝提醒,已修正
上面2組字詞是為了在圖說中簡化用語,讓一般讀者比較容易理解而刻意使用「資料」,來稱呼以金鑰加密過的密文。
> Q1:本文裡,「登入憑證」、「使用者資料」與「被洩漏的資料」,
> 指的通通都是(而且只是)「使用者名稱(帳號)和密碼」吧?
>
Google官方文件中沒有說得很清楚,我覺得比較可能的是指登入的Token或帳號和密碼以明文方式洩漏
被公開的機率並不大(兩者通常是私下與受害者聯絡)。Google要如何取得這些資料?
Q3:假設網站(或公司)在儲存使用者密碼時,是先加密之後再進行儲存,
那麼這個機制就無法發揮用處?(因為比對永遠不會符合)
Q4:步驟3說明文字,伺服器傳給使用者的,除了自己的被加密資料,
是否也包含所有跟自己『使用者名稱前3位元組雜湊值』比對相同的,
且經過加密之那些被洩漏的資料?