【譯】Android中的安全數據— Android中的加密(第1部分)

目錄

  • Java密碼體系結構
  • Android Key Store
  • 樣例項目
  • 下一步是什麼
  • 安全提示

Java密碼體系結構

Android建立在Java密碼體系結構(JCA)的基礎上,該體系結構提供了用於數字簽名,證書,加密,密鑰生成和管理的API。

 

 

KeyGenerator —提供用於生成對稱加密密鑰的公共API。

KeyPairGenerator —一個引擎類,能夠使用初始化時所使用的算法來生成私有密鑰及其相關的公共密鑰。

SecretKey —祕密(對稱)密鑰。該接口的目的是對所有祕密接口(例如SecretKeySpec)進行分組(並提供類型安全性)。

PrivateKey —私鑰(非對稱)。該接口的目的是對所有私鑰接口(例如RSAPrivateKey)進行分組(並提供類型安全性)。

PublicKey-公鑰。此接口不包含任何方法或常量。它僅用於對所有公共密鑰接口(例如RSAPublicKey)進行分組(並提供類型安全性)。

KeyPair —此類是密鑰對(公共密鑰和私有密鑰)的簡單持有者。它不強制執行任何安全性,並且在初始化時應被視爲私鑰。

SecureRandom-生成加密安全的僞隨機數。我們不會在本系列中直接使用它,但是它在KeyGenerator,KeyPairGenerator組件和Keys實現中被廣泛使用。

KeyStore —具有良好數據保護機制的數據庫,用於保存,獲取和刪除密鑰。需要每個密鑰的輸入密碼和密碼。換句話說,它是您需要創建,讀取和更新(使用提供的API)的受保護文件。

證書 -用於驗證和保存非對稱密鑰的證書。

密碼 -提供對加密密碼的實現的訪問權限,以進行加密,解密,包裝,解包和簽名。

提供程序 -定義了一組可擴展的實現,即獨立的API。提供者是不同算法或其自定義項的組。有3d派對提供商,例如Bouncy CastleSpongy Castle(Bouncy Castle的安卓版本),以及現成的提供商,例如Bouncy Castle的簡化版本(我們將對其進行更深入的研究,稍後,在本系列文章中)。

Android Key Store

在18版本的Android中,引入了AndroidKeyStore

Android密鑰存儲系統可讓您將加密密鑰存儲在容器中,以使其更難從設備中提取。


一旦密鑰進入密鑰存儲區,就可以將其用於加密操作,而密鑰材料仍不可導出。


而且,它提供了限制何時和如何使用密鑰的功能,例如要求用戶進行身份驗證才能使用密鑰,或者限制僅在某些加密模式下使用密鑰。


AndroidKeyStore是JCA Provider實現,其中:

  • 不需要KeyStore密碼(真的)
  • 關鍵材料永遠不會進入申請流程
  • 密鑰材料可能綁定到安全硬件(“ 信任區域”
  • 從18歲以上開始提供非對稱密鑰
  • 對稱密鑰可用於23 +

如果沒有它,在Android 18之前,您將需要在本地或外部設備存儲中的某個位置創建一個文件,所有密鑰都將保留在該文件中(如您所知,提取該文件很容易)。但是隨着AndroidKeyStore 您無需創建任何內容,系統將爲您管理所有內容:

  • 如果設備製造商支持受信任的執行環境(TEE),則您的密鑰將保存在此處(最安全的選項);
  • 如果設備製造商不支持TEE,則密鑰將存儲在系統提供的仿真軟件環境中。

在這兩種情況下,刪除應用程序後,密鑰都會自動從系統中刪除。同樣,密鑰資料也永遠不會暴露給您(我們將在稍後看到)。我們將只處理關鍵參考,這些參考將傳遞給KeyStore系統服務,在此基礎上,所有涉及關鍵材料的骯髒工作都已完成。

聽起來不錯,對吧?但是像往常一樣,它充滿了驚喜。

樣例項目

演示這些API的實際作用的最佳方法是開發示例應用程序,並在您自己的應用程序開發過程中面對實際案例。


 

 

 

祕密守護者,主屏幕

我們的示例應用程序的主要目標是在本地保存用戶機密, 並使用EncryptionFingerprintConfirm Credentials API 對其進行保護。

要使用該應用程序,用戶需要創建一個 密碼(在註冊過程中)。該密碼將用於保護機密:要添加,查看,編輯和刪除已創建的機密,用戶需要輸入主密碼。

什麼是祕密?您想要保護的所有內容:Gmail密碼,信用卡密碼,您的祕密筆記,沒人可以看到。


該應用程序本身已經開發並位於GitHub上。在本系列文章中,我們將重點介紹其特定的安全功能實現(而不是其用戶界面)。爲了更好地瞭解我們在做什麼,讓我們看一下此應用程序具有的要求:

  • 支持Android 18 +設備(我們希望專注於最佳可用API,但是請放心,本系列文章還將介紹較低API版本的兼容性);
  • 僅當設置了“鎖定屏幕”時才允許用戶訪問應用程序(保護的第一步,也是非常重要的一步,如果要保護數據,請保護設備);
  • 使用加密保護用戶主密碼(我們不希望有人通過獲取共享的首選項文件並讀取密碼來獲取用戶數據);
  • 通過加密保護用戶的機密(即與密碼相同);
  • 允許用戶使用指紋訪問機密(將有單獨的文章專門討論指紋);
  • 添加其他“確認憑據”保護(將另外有一篇文章專門介紹“確認憑據”)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章