【译】Android中的安全数据— Android中的加密(第1部分)
目錄
- Java密碼體系結(jié)構(gòu)
- Android Key Store
- 樣例項(xiàng)目
- 下一步是什么
- 安全提示
Java密碼體系結(jié)構(gòu)
Android建立在Java密碼體系結(jié)構(gòu)(JCA)的基礎(chǔ)上,該體系結(jié)構(gòu)提供了用于數(shù)字簽名,證書,加密,密鑰生成和管理的API。
?
KeyGenerator?—提供用于生成對稱加密密鑰的公共API。
KeyPairGenerator?—一個(gè)引擎類,能夠使用初始化時(shí)所使用的算法來生成私有密鑰及其相關(guān)的公共密鑰。
SecretKey?—秘密(對稱)密鑰。該接口的目的是對所有秘密接口(例如SecretKeySpec)進(jìn)行分組(并提供類型安全性)。
PrivateKey?—私鑰(非對稱)。該接口的目的是對所有私鑰接口(例如RSAPrivateKey)進(jìn)行分組(并提供類型安全性)。
PublicKey-公鑰。此接口不包含任何方法或常量。它僅用于對所有公共密鑰接口(例如RSAPublicKey)進(jìn)行分組(并提供類型安全性)。
KeyPair?—此類是密鑰對(公共密鑰和私有密鑰)的簡單持有者。它不強(qiáng)制執(zhí)行任何安全性,并且在初始化時(shí)應(yīng)被視為私鑰。
SecureRandom-生成加密安全的偽隨機(jī)數(shù)。我們不會(huì)在本系列中直接使用它,但是它在KeyGenerator,KeyPairGenerator組件和Keys實(shí)現(xiàn)中被廣泛使用。
KeyStore?—具有良好數(shù)據(jù)保護(hù)機(jī)制的數(shù)據(jù)庫,用于保存,獲取和刪除密鑰。需要每個(gè)密鑰的輸入密碼和密碼。換句話說,它是您需要?jiǎng)?chuàng)建,讀取和更新(使用提供的API)的受保護(hù)文件。
證書?-用于驗(yàn)證和保存非對稱密鑰的證書。
密碼?-提供對加密密碼的實(shí)現(xiàn)的訪問權(quán)限,以進(jìn)行加密,解密,包裝,解包和簽名。
提供程序?-定義了一組可擴(kuò)展的實(shí)現(xiàn),即獨(dú)立的API。提供者是不同算法或其自定義項(xiàng)的組。有3d派對提供商,例如Bouncy Castle和Spongy Castle(Bouncy Castle的安卓版本),以及現(xiàn)成的提供商,例如Bouncy Castle的簡化版本(我們將對其進(jìn)行更深入的研究,稍后,在本系列文章中)。
Android Key Store
在18版本的Android中,引入了AndroidKeyStore:
Android密鑰存儲系統(tǒng)可讓您將加密密鑰存儲在容器中,以使其更難從設(shè)備中提取。
一旦密鑰進(jìn)入密鑰存儲區(qū),就可以將其用于加密操作,而密鑰材料仍不可導(dǎo)出。
而且,它提供了限制何時(shí)和如何使用密鑰的功能,例如要求用戶進(jìn)行身份驗(yàn)證才能使用密鑰,或者限制僅在某些加密模式下使用密鑰。
AndroidKeyStore是JCA Provider實(shí)現(xiàn),其中:
- 不需要KeyStore密碼(真的)
- 關(guān)鍵材料永遠(yuǎn)不會(huì)進(jìn)入申請流程
- 密鑰材料可能綁定到安全硬件(“?信任區(qū)域”)
- 從18歲以上開始提供非對稱密鑰
- 對稱密鑰可用于23 +
如果沒有它,在Android 18之前,您將需要在本地或外部設(shè)備存儲中的某個(gè)位置創(chuàng)建一個(gè)文件,所有密鑰都將保留在該文件中(如您所知,提取該文件很容易)。但是隨著AndroidKeyStore?您無需創(chuàng)建任何內(nèi)容,系統(tǒng)將為您管理所有內(nèi)容:
- 如果設(shè)備制造商支持受信任的執(zhí)行環(huán)境(TEE),則您的密鑰將保存在此處(最安全的選項(xiàng));
- 如果設(shè)備制造商不支持TEE,則密鑰將存儲在系統(tǒng)提供的仿真軟件環(huán)境中。
在這兩種情況下,刪除應(yīng)用程序后,密鑰都會(huì)自動(dòng)從系統(tǒng)中刪除。同樣,密鑰資料也永遠(yuǎn)不會(huì)暴露給您(我們將在稍后看到)。我們將只處理關(guān)鍵參考,這些參考將傳遞給KeyStore系統(tǒng)服務(wù),在此基礎(chǔ)上,所有涉及關(guān)鍵材料的骯臟工作都已完成。
聽起來不錯(cuò),對吧?但是像往常一樣,它充滿了驚喜。
樣例項(xiàng)目
演示這些API的實(shí)際作用的最佳方法是開發(fā)示例應(yīng)用程序,并在您自己的應(yīng)用程序開發(fā)過程中面對實(shí)際案例。
?
?
秘密守護(hù)者,主屏幕
我們的示例應(yīng)用程序的主要目標(biāo)是在本地保存用戶機(jī)密,?并使用Encryption,Fingerprint和Confirm Credentials?API?對其進(jìn)行保護(hù)。
要使用該應(yīng)用程序,用戶需要?jiǎng)?chuàng)建一個(gè)主?密碼(在注冊過程中)。該密碼將用于保護(hù)機(jī)密:要添加,查看,編輯和刪除已創(chuàng)建的機(jī)密,用戶需要輸入主密碼。
什么是秘密?您想要保護(hù)的所有內(nèi)容:Gmail密碼,信用卡密碼,您的秘密筆記,沒人可以看到。
該應(yīng)用程序本身已經(jīng)開發(fā)并位于GitHub上。在本系列文章中,我們將重點(diǎn)介紹其特定的安全功能實(shí)現(xiàn)(而不是其用戶界面)。為了更好地了解我們在做什么,讓我們看一下此應(yīng)用程序具有的要求:
- 支持Android 18 +設(shè)備(我們希望專注于最佳可用API,但是請放心,本系列文章還將介紹較低API版本的兼容性);
- 僅當(dāng)設(shè)置了“鎖定屏幕”時(shí)才允許用戶訪問應(yīng)用程序(保護(hù)的第一步,也是非常重要的一步,如果要保護(hù)數(shù)據(jù),請保護(hù)設(shè)備);
- 使用加密保護(hù)用戶主密碼(我們不希望有人通過獲取共享的首選項(xiàng)文件并讀取密碼來獲取用戶數(shù)據(jù));
- 通過加密保護(hù)用戶的機(jī)密(即與密碼相同);
- 允許用戶使用指紋訪問機(jī)密(將有單獨(dú)的文章專門討論指紋);
- 添加其他“確認(rèn)憑據(jù)”保護(hù)(將另外有一篇文章專門介紹“確認(rèn)憑據(jù)”)。
總結(jié)
以上是生活随笔為你收集整理的【译】Android中的安全数据— Android中的加密(第1部分)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BINDER SECCTX PATCH
- 下一篇: Mysql能删了重装吗_mysql卸载重