android - 带有 StrongBox 的 Android KeyStore:如何测试用户存在?
问题描述
在 Pixel 3 上运行的 Android API 28 提供了要求用户在场以获取在Android KeyStore内生成的密钥的选项。但是,在使用该密钥创建签名时,我如何实际测试用户的存在呢?我在文档中遗漏了什么吗?
KeyGenParameterSpec.Builder keyGenSpec = new KeyGenParameterSpec.Builder("alias", KeyProperties.PURPOSE_SIGN)
.setDigests(KeyProperties.DIGEST_SHA256)
.setKeySize(256)
.setIsStrongBoxBacked(true)
.setUserPresenceRequired(true);
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("EC", "AndroidKeyStore");
keyPairGenerator.initialize(keyGenSpec.build());
keyPairGenerator.generateKeyPair();
KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null, null);
PrivateKey privateKey = (PrivateKey) keyStore.getKey("alias", null);
Signature signature = Signature.getInstance("SHA256withECDSA");
signature.initSign(privateKey);
signature.update("Hello".getBytes(Charset.defaultCharset()));
byte[] sign = signature.sign();
该代码抛出android.security.KeyStoreException: -69
转换为PROOF_OF_PRESENCE_REQUIRED
. 我也尝试将签名过程包装在一个 中BiometricPrompt
,但无济于事。
解决方案
推荐阅读
- intellij-idea - 为什么我在反编译的类中看到 lombok 导入
- php - strftime 令人难以置信的行为
- excel - 如何根据 Excel/Googlesheet 中每个单元格的行标题(重复)和列标题(重复)对所有单元格求和?
- javascript - 如何通过单击空格来拆分句子
- uipath - 使用 UiPath 从 PDF 中获取选中值的文本
- jquery - 徽章未在引导程序中正确加载
- python - Python OpenCV实时图像拼接(n=5)性能优化
- typo3 - 扩展编辑器中的链接处理程序
- javascript - 单击按钮时如何打开模式
- oracle - 尝试从游标中获取时出现 PLS-00103 错误