我正在开发需要验证最终用户创建的数据的应用程序。
我知道我可以为此使用KeyChain API,但是这个 API 有我认为对我们的应用程序来说是一个缺陷的地方。由于 KeyChain 需要用户访问证书并因此访问私钥,因此我们的应用程序可能被指控窃取身份和伪造数据。我需要某种方法来使用用户私钥来验证这些数据,而不能“复制”私钥或发送到其他地方。
无论如何我可以做到这一点吗?
我现在期待智能卡和 USB 令牌,但如果其他人可以分享实施经验以解决类似问题甚至提出建议,我会很高兴。
我正在开发需要验证最终用户创建的数据的应用程序。
我知道我可以为此使用KeyChain API,但是这个 API 有我认为对我们的应用程序来说是一个缺陷的地方。由于 KeyChain 需要用户访问证书并因此访问私钥,因此我们的应用程序可能被指控窃取身份和伪造数据。我需要某种方法来使用用户私钥来验证这些数据,而不能“复制”私钥或发送到其他地方。
无论如何我可以做到这一点吗?
我现在期待智能卡和 USB 令牌,但如果其他人可以分享实施经验以解决类似问题甚至提出建议,我会很高兴。
如果 KeyChain API 使用硬件密钥存储实现,则不允许复制私钥。毫无疑问,只有 Android 4.1+ 的 Google Nexus 设备实现了硬件密钥库。其他供应商也可能这样做,或者可能使用标准的不安全软件实现。
我认为有专门的 SD 卡支持智能卡,但它们并不便宜,我不知道它们是否适用于所有手机。
同样在 Android 4.1+ 中,您无法访问私钥。您只会获得一个可用作签名/解密/加密中的私钥的对象,但您没有获得实际的密钥。在此处查看有关实施的更多详细信息:http: //nelenkov.blogspot.de/2012/07/jelly-bean-hardware-backed-credential.html
如果您将返回对象而不是访问并在同一文件中有两个类时使用私有变量。
private class test_A
{
private int num;
private test_A getObject()
{
return this;
}
}
private class test_B
{
private void test()
{
test_A __object__ = new test_A().getObject();
__object__.num = 3;
}
}*