升級 Android 認證: 遠端配置

Android開發者發表於2022-06-01

作者 / 軟體工程師 Max Bires

自 Android 8.0 以來,認證成為一項必備功能。隨著各個版本的更迭,認證越來越成為各種功能和服務的信任核心,例如 SafetyNet、身份憑據 (Identity Credential)、數字車鑰匙 (Digital Car Key) 以及各種第三方庫。因此,現在我們需要重新審視認證基礎架構,加強信任鏈的安全性,並在出現已知漏洞時提高裝置信任的可恢復性。

自 Android 12.0 起,我們將提供一個選項,可將工廠內私鑰配置替換為工廠內公鑰提取加上帶短期證書的 OTA (over-the-air) 證書配置。此方案將在 Android 13.0 中強制實施。我們將其稱為遠端金鑰配置 (Remote Key Provisioning)。

哪些群體會受到此方法的影響?

原始裝置製造商 (OEM) / 原始設計製造商 (ODM)

裝置製造商將不再直接向工廠中的裝置提供認證私鑰,從而解除了必須在工廠中管理認證金鑰的負擔。

潛在的依賴方

我們將在下文中進一步說明認證中證書鏈的格式、演算法和長度將發生的變化。如果依賴方在設定其證書驗證程式碼時,要求該程式碼必須與舊證書鏈結構有極高的匹配度,則需要更新此程式碼。

為什麼要改變?

我們改變向裝置提供認證證書的方式有兩大動機因素: 允許裝置在受到攻擊後恢復,以及收緊認證供應鏈。在如今的認證方案中,如果發現某個裝置型號受到的攻擊會對認證的信任訊號產生影響,或者如果金鑰經某種機制洩露,則必須撤消該金鑰。由於依賴認證金鑰訊號的服務越來越多,這一舉措可能會對裝置受到影響的消費者產生巨大的衝擊。

如果裝置已經在執行被攻破的軟體,這項措施可以使我們停止對該裝置進行金鑰配置,並消除金鑰意外洩露的可能性。這將大大減少使用者服務中斷的可能性。

如何運作?

每臺裝置都會生成一個唯一的靜態金鑰對,該金鑰對的公共部分由 OEM 在其工廠中提取。隨後,這些公鑰將被上傳到 Google 伺服器,用作之後產生的配置的信任基礎。私鑰則永遠不會離開生成它的安全環境。

當裝置啟用並連線到網際網路時,它會為其已生成的金鑰生成證書籤名請求,並使用與工廠內收集的公鑰對應的私鑰對其進行簽名。後端伺服器將驗證請求的真實性,然後簽署公鑰,返回證書鏈。然後,金鑰庫會儲存這些證書鏈,並在請求認證時隨時分配給應用。

此流程將在證書到期或當前金鑰供應用盡時定期執行。該方案支援隱私保護,每個應用將接收到不同的認證金鑰,並且金鑰本身會定期輪換。此外,Google 後端伺服器也進行了分段處理,因此驗證裝置公鑰的伺服器看不到附加的認證金鑰。這意味著 Google 無法將認證金鑰關聯回請求它們的特定裝置。

從技術角度來看,發生了哪些變化?

終端使用者不會注意到任何變化。使用認證的開發者則需要注意以下變化:

  • 證書鏈結構

    • 鑑於新版線上配置基礎架構的性質,鏈長度比以前更長,並且可能會發生變化。
  • 信任根

    • 信任根最終將從目前的 RSA 金鑰更新為 ECDSA 金鑰。
  • 棄用 RSA 認證

    • KeyMint 生成和認證的所有金鑰都將使用 ECDSA 金鑰和對應的證書鏈進行簽名。而在以前,非對稱金鑰由各自對應的演算法進行簽名。
  • 短期證書和認證金鑰

    • 為裝置配置的證書在到期和輪換之前通常擁有最多兩個月的有效期。

歡迎您 點選這裡 向我們提交反饋,或分享您喜歡的內容、發現的問題。您的反饋對我們非常重要,感謝您的支援!

相關文章