Android Keystore,密钥的安全值

6 security encryption android keystore

我目前正在调查使用Android 4.3中引入的安全/改进的Keystore.

我想在此密钥库中存储加密密钥,此密钥用于加密sqllite数据库以及我的共享首选项中包含的值.

当我查看SDK中的KeyStore示例时,我看到以下内容:

public static final String ALIAS = "my_key"
Run Code Online (Sandbox Code Playgroud)

如果有人能够反编译我的代码,他们将能够看到明文别名(=从密钥库中检索加密密钥的密钥),因此他们将能够获得对我的加密密钥的引用.我怎样才能安全地管理我的ALIAS?还是我错过了这里的观点?

Dor*_*ori 7

以下答案适用于4.3+.此版本的KeyStore和KeyChain类发生了重大变化.有关详细信息,请参见此处

Keystore 访问受UID限制 - 您的应用在安装时分配了UID.

这是阻止其他应用/进程访问您的密钥对/私钥的原因.密钥库deamon将强制执行此操作.

这可能需要一个器件引脚进行额外的加密.请参阅http://developer.android.com/reference/android/security/KeyPairGeneratorSpec.Builder.html#setEncryptionRequired()

使用软件/硬件密钥库的全部意义在于解决您描述的情况 - 应用程序中的任何硬编码数据都可以在反编译中读取,因此不安全.

@Duncans的答案让你看起来需要密码.我建议您使用密钥库生成密钥对,然后使用它来加密可用于加密任何所需内容的AES密钥(比使用RSA密钥快得多)

您可以使用硬件/ sortware密钥库支持的私钥keyStore.getEntry(alias, null);,但不传递任何类型的密码.

请参阅SecretKeyWrapper.java以获取此示例


Dun*_*nes 1

别名不是敏感信息。每个密钥库都与一个密码关联,每个密钥也有自己的(可选)密码。这些是必须保持安全的价值观。

如果没有密码,攻击者即使知道别名也无法读取您的密钥材料。