Android Keystore 是客户端 KMS,您不能在服务器端使用它。
如果您想在 Android 上将 Tink 与 Android Keystore 一起使用,请查看AndroidKeysetManager。这是一个例子:
String masterKeyUri = "android-keystore://my_master_key_id";
AndroidKeysetManager manager = AndroidKeysetManager.Builder()
.withSharedPref(getApplicationContext(), "my_keyset_name", "my_pref_file_name")
.withKeyTemplate(SignatureKeyTemplates.ECDSA_P256)
.withMasterKeyUri(masterKeyUri)
.build();
PublicKeySign signer = PublicKeySignFactory.getPrimitive(manager.getKeysetHandle());
这将读取存储在首选项文件my_keyset_name
首选项中的密钥集。my_pref_file_name
如果首选项文件名称为空,则使用默认首选项文件。
如果未找到密钥集或密钥集无效,并且使用 设置了有效的 KeyTemplate AndroidKeysetManager.Builder.withKeyTemplate(com.google.crypto.tink.proto.KeyTemplate)
,则会生成新的密钥集并将其写入共享首选项文件my_keyset_name
的首选项。my_pref_file_name
在 Android M 或更高版本上,如果主密钥 URI 设置为AndroidKeysetManager.Builder.withMasterKeyUri(java.lang.String)
,则密钥集将使用生成的主密钥加密并存储在 Android Keystore 中。当 Tink 无法解密密钥集时,它会假定它未加密。
主密钥 URI 必须以android-keystore://
. 如果主密钥不存在,则会生成一个新的。可以使用 禁用 Android Keystore 的使用AndroidKeysetManager.Builder.doNotUseKeystore()
。
在 Android L 或更早版本上,或者当未设置主密钥 URI 时,密钥集将以明文形式存储在私有首选项中,由于 Android 框架的安全性,其他应用程序无法读取或写入。