2016-03-03 89 views
13

http://developer.android.com/training/articles/keystore.html 阅读Android文档,但我错过了一些细节...Android Keystore系统如何安全?

如果应用程序生成密钥使用AndroidKeyStore(对称或不对称)。

我们可以从该密钥库中提取密钥吗?

另一个应用程序(AppB)可以访问AppA生成的密钥吗?

在这种情况下我们可能会失去钥匙?设备工厂复位?

谢谢。

+0

1)你应该保持你的密钥仓库安全,并且在任何情况下都不要共享它2)密钥仓库中的密钥需要一个密码,尽管我猜想任何事情都是可能的,所以看点1 3)不确定我理解这个问题,但通常我会说不,至少不是私钥(用于签署应用程序)4)这一个我不确定我会得到,只要你有密钥库,你可以使用它创建一个签名的应用程序,但再次。它不应该存储在设备或类似的 – cYrixmorten

+0

感谢您的答案,但我没有谈论我们用来签署应用程序的密钥库。我向该问题添加了Android文档。 –

+0

好吧然后我误解了:-) nvm – cYrixmorten

回答

15

您可以使用Android KeyStore Provider或创建一个正常的KeyStore文件。

  • 密钥库(API 1):你必须创建一个密钥存储文件,你还必须管理秘密访问它。这些秘密非常敏感,难以隐藏给攻击者。我个人不推荐这种选择。

  • Android KeyStore Provider(API 18):使用这个API,您将委派所有沉重的东西来访问它的操作系统。你不需要使用任何密码,因为操作系统本身将存储它,它来源于你的锁屏密码,密码,模式和其他变量。如果设备包含嵌入式安全元素,并将存储类型设置为硬件支持的而不仅仅是软件支持的,它将在那里存储秘密。这是使用安全硬件来存储任何类型的秘密的最安全的方式。即使用户已经植入了手机,这甚至可以保证机密的安全。

我们可以提取密钥库的钥匙?

与他们两个你的应用程序可以得到PrivateKey并使用它,如果这是你的意思。

另一个应用程序(AppB)可以访问由AppA生成的密钥吗?

使用KeyStore提供程序,每个应用程序只能访问其KeyStore实例或别名。使用普通的KeyStore,如果另一个应用程序可以访问该文件,它可以尝试对其进行攻击。

在这种情况下我们可能会失去钥匙?设备工厂复位?

删除应用程序将清除应用程序的KeyStore提供程序实例。但是,由于Android中的a nasty bug(Android 5之前更常见),如果用户将锁定屏幕模式更改为密码或删除该模式,则KeyStore将被删除。当用户从android设置执行“清除凭据”时也会发生同样的情况。使用经典的KeyStore,您可以将其存储在外部存储器中,并在设备出厂重置后保存。但是,它的安全性还不如提供者。

我在某些方面可能是错的,但这是我学到的东西,我只是分享了我的经验。希望这对你有所帮助。

+1

谢谢,这对我真的很有帮助。 – Herman

+0

@Herman:您是否使用Android KeyStore提供程序来存储您的密钥? – j10