Categories
程式開發

密碼管理器的進化史(下)


很多關於密碼管理器的評測和討論大多聚焦於功能特性,而對於最關鍵的安全性,卻沒解釋清楚。本系列文章主要從密碼管理器保護密碼的安全性角度,分享一下相關的專業知識。因密碼管理器涉及很多方面的知識,本系列文章只討論數據加密保護。

密碼管理器的進化史(上)

第三代密碼管理器:主密碼+主密鑰保護

第三代密碼管理器:

  • 安全技術——增加主密鑰保護,提升雲端安全性

  • 安全問題——設備終端安全性仍取決於主密碼

通過雲端同步時,第二代密碼管理器離洩露所有密碼只有“一個主密碼的距離”。而主密碼的安全問題並不能讓人放心。於是,第三代密碼管理器應運而生。說起第三代密碼管理器,就不得不提1Password,它們設計了一個two-secret key derivation (2SKD)的方法來生成加密密鑰。並且,它們還公開了技術白皮書。

使用1Password的用戶,除了要設置主密碼外,還需要將一個主密鑰Secret Key保存起來。

  • 主密鑰用於和主密碼一起生成加密密鑰

  • 加密密鑰通過主密碼生成,用於加密數據的密鑰

據悉,加拿大一家公司的產品RememBear採用類似技術,要求用戶不僅要記住主密碼,還要保存好New Device Key。這只不過是給主密鑰換了名字。

從算法角度講,第三代密碼管理器和第二代密碼管理器幾乎一樣,只不過第三代將salt叫Secret Key。

密碼管理器的進化史(下) 1

關鍵創新

通過網絡同步時,第二代密碼管理器會將生成加密密鑰的參數salt一起同步,而第三代密碼管理器並不會同步Secret Key!

密碼管理器的進化史(下) 2

注意:第三代密碼管理器不同步Secret Key!

第二代密碼管理器在登錄新設備時,只需輸入賬號密碼,就可以解密雲端同步下來的數據。而第三代密碼管理器在登錄新設備時,除賬號密碼外,還需要輸入 Secret Key,才能解密雲端下載的數據。雖然只是一個小改動,卻極大提升了雲端同步的安全性。

第三代密碼管理器的主要特點:除主密碼外,還增加了一個不同步的Secret Key。正因為有這個Secret Key,第三代密碼管理器才能保證:即使雲端被入侵、主密碼被洩露,黑客依然無法獲取用戶存儲的賬號密碼。

回顧可知,其實每一代密碼管理器都比上一代增加了一個解鎖條件,大幅提升安全性。

密碼管理器的進化史(下) 3

安全問題

雖然雲端沒問題,但是終端依然有漏洞。對一個人來說,要想成功盜取存在第三代密碼管理器中的密碼,只需兩步:

  1. 入侵用戶桌面系統,獲取數據文件和主密鑰;
  2. 攻破用戶的主密碼

實現第一步並不難,當用戶在設備上首次登入自己賬號後,第三代密碼管理器會把主密鑰保存在本地(不會讓用戶每次都輸入)。

傳統密碼管理器都是基於桌面計算機時代的技術開發的(Windows操作系統是主要代表)。在傳統的桌面操作系統上,密碼管理器保存的數據文件是可以被惡意軟件直接讀取的,甚至惡意網站都有可能利用瀏覽器的安全漏洞來讀取數據並發送到雲端。

總結,在終端設備上,第三代密碼管理器和第二代一樣,離洩露所有密碼都只有“一個主密碼的距離”。

第四代密碼管理器

  • 安全技術——基於安全芯片的數據保護技術,不再擔心主密碼洩露

過去十幾年,各種密碼管理器軟件層出不窮,各類營銷口號花樣百出,但是其使用的數據保護技術在本質上卻沒有太大改進。因此,很多對數據安全有更高要求的用戶只能選擇專用硬件密碼管理器產品,默默忍受著諸多不便。

讓人興奮的是,智能手機的發展為我們帶來很多新的安全技術,其中之一是沙盒隔離。在iOS和Android系統上,所有App都可以選擇使用沙盒隔離,每個App的私有數據都不能被其他App訪問。即使用戶不小心安裝惡意App,它也無法偷取其他App的私有數據(除非它能突破沙盒保護或者獲取到root權限)。

當然,並非所有App都會使用沙盒隔離。相反,有些App可能會選擇使用外部存儲,比如Keepass2Android。 Keepass2Android數據庫保存在外部存儲中,所有能訪問外部存儲的App都能讀取該數據庫。因此,如果你的手機不小心安裝惡意App,該App就能一邊截獲你輸入的主密碼,一邊讀取數據庫文件。這樣,你存儲的所有密碼都會洩露。

密碼管理器的進化史(下) 4

雖然沙盒技術對數據保護有一定作用,但無法防止數據因係統備份、網絡同步、應用克隆等操作而洩露。真正激動人心的是,智能手機帶來安全芯片的普及,這也為第四代密碼管理器的誕生奠定堅實的技術基礎。

現在,大多數智能手機都集成生物識別技術。為安全處理用戶的生物信息,它們也都引入安全芯片。

密碼管理器的進化史(下) 5

安卓手機的指紋識別硬件架構圖

圖中的 TEE 是獨立於CPU和操作系統的安全芯片系統(iOS中叫Secure Enclave)。指紋傳感器硬件線路直連安全芯片,直接將掃描的生物數據發送到安全芯片內部驗證,安全芯片只告訴操作系統驗證結果,保證生物數據的安全。

App使用指紋驗證的過程,大概如下:

  1. 應用程序先調用操作系統API,請求系統驗證指紋;
  2. 操作系統指紋管理和服務組件,請求TEE驗證用戶指紋;
  3. TEE讀取並且驗證指紋數據;
  4. TEE把驗證結果告知操作系統,操作系統再告知應用程序

因此,擔心App偷取指紋數據的用戶可以放心,App根本無法讀取你的指紋數據。不過,使用人臉識別的App卻能採集人臉數據,因為攝像頭掃描的數據是App直接處理的(iPhone面部ID驗證除外)。

第四代密碼管理器使用手機安全芯片保護用戶數據。

安全芯片中存儲的數據都是加密的,運行時的內存也是加密的,加密密鑰存儲在芯片內部。即使是外部操作系統,也無法訪問安全芯片中的數據、無法獲取加密數據的密鑰。

密碼管理器的進化史(下) 6

安全芯片加密數據示意圖

App可以請求安全芯片創建密鑰,並且只有創建密鑰的App才能請求安全芯片使用這個密鑰執行加密算法。不論是加密還是解密,都由安全芯片處理,App只能得到加密/解密的結果,而得不到密鑰。

回顧第二代密碼管理器,既不能寫死密鑰,也不能把密鑰和數據庫一起保存,所以只能通過主密碼生成密鑰來加密數據。

而現在,第四代密碼管理器可以使用安全芯片來安全存儲密鑰了。因此,就算用戶不設置主密碼,數據也是非常安全的,因為儘管其他App竊取數據庫,也無法解密得到原文。

使用第四代密碼管理器,只要手機解鎖密碼足夠安全,又不擔心女朋友查看你保存的密碼,那就完全可以不設置主密碼了。

安卓手機用戶不要使用圖案解鎖,這篇論文說只需要五次就能破解。

密碼管理器的進化史(下) 7

如果擔心在手機解鎖狀態下被他人偷窺密碼,也可以使用主密碼進一步保護數據。

安全分析

第四代密碼管理器的密鑰存儲在安全芯片內部,加密的數據只能在本機解密,離開本機將無法解密。

  1. 不設置主密碼仍然足夠安全

    第二代和第三代密碼管理器,必須依賴主密碼生成密鑰來保護數據,否則就和第一代密碼管理器一樣,可以被其他程序讀取用戶數據。

    第四代密碼管理器,保護數據的密鑰存儲在安全芯片內部,即使是操作系統也不可提取,因此不設置主密碼也能保護用戶數據。

  2. 數據庫被盜+洩露主密碼,仍然安全

    第二代和第三代密碼管理器,如果同時洩露了數據庫文件和主密碼(以及第三代的SecretKey),黑客就可以使用同樣算法解密數據。

    第四代密碼管理器,使用存儲在安全芯片內部的密鑰來保護數據,黑客無法從安全芯片中提取出密鑰,無法解密數據。

  3. 數據庫被盜+暴力破解,仍然安全

    第二代和第三代密碼管理器,如果數據庫文件(以及第三代的SecretKey)洩露了,並且主密碼不夠強,黑客就可能通過租用大量雲服務計算資源進行暴力破解。

    第四代密碼管理器,使用了存儲在安全芯片內部的密鑰來保護數據,即使黑客暴力破解了主密碼,也無法解密數據。

當然,有利就有弊,使用安全芯片在大幅提升安全性的同時,第四代密碼管理器也難以同步數據到其他設備。

由於密鑰存儲在安全芯片內部,無法從一個手機遷移到另一個手機,所以如果僅僅把加密後的數據同步到新手機,同樣也是無法解密的。

黑客攻擊

任何技術都是可以被攻擊的,第四代密碼管理器也不例外,畢竟App不可能100%弄清楚使用者是合法用戶還是黑客。

回顧一下,黑客要偷取前幾代密碼管理器中保存的密碼應具備的條件:

  • 第一代密碼管理器,能讀取數據庫文件即可;
  • 第二代密碼管理器,需要讀取數據庫文件 + 偷取/破解主密碼
  • 第三代密碼管理器,需要讀取數據庫文件 + 偷取/破解主密碼 + 讀取主密鑰

第四代密碼管理器,儘管讀取數據庫文件 + 偷取/破解主密碼也無法解密。黑客還需要:

  • 控製手機(因為數據離開手機就無法解密);
  • 突破安全芯片的防護;

總結

密碼管理器的進化史(下) 8