1

我正在开发一个使用公钥证书对发送到服务器的消息进行签名的 android 应用程序。当用户登录时,他会收到一个 x509 证书。现在,当他想向服务器发送消息时,他必须使用证书公钥对消息进行签名,并将其与消息一起发送到服务器。我是安全新手,我不知道该怎么做。这些是我的一些问题:

  1. 如何将证书安全地存储在手机中,以便我的应用程序可以使用它来签署发送到服务器的消息?

  2. 我还计划在某个时候进行一次密钥轮换。因此,服务器会将更新后的证书发送给用户,我的应用程序必须更新存储在手机中的证书。

如果您能指出我需要仔细处理的教程或任何问题,那将非常有帮助。谢谢

4

2 回答 2

3

您应该问自己的第一个问题是您是要签名还是加密您的消息。如果您要签名(= 向收件人证明您的消息在传输过程中没有被更改,并且还证明发件人确实是您的应用程序),那么您应该使用私钥签名并让服务器与公共验证签名钥匙。如果要加密消息,则应使用服务器的公钥对其进行加密,并让服务器使用其私钥对其进行解密。

第二个问题是证书的传输:如果您担心中间人篡改您的应用程序的消息,那么这个攻击者也可以拦截您发送到应用程序的证书并因此签署他的消息。

要回答您的问题:

  1. 我能想到的将任何东西安全地存储在手机上的唯一方法(这样即使攻击者获得了 root 权限也无法访问它)是使用未存储在设备上但必须由用户输入的用户密码对其进行加密。每次访问证书时的用户。

  2. 如果您设法将一个证书安全地发送到设备(我怀疑您可以),那么您可以通过在服务器端使用旧证书的公钥加密新证书并将其发送到设备来执行密钥轮换。在那里,您可以使用私钥对其进行解密。

于 2012-08-29T07:26:07.627 回答
0

这真的取决于你的目标是什么。如果目标是断言一个有效的经过身份验证的用户发送了请求,那么使用公钥签名不是要走的路。为了确定发件人是您认为的那个人,您使用私钥签名并使用公钥进行验证。但是,根据您的环境,保持私钥私有的客户端可能是个问题。

如果您的目标只是防篡改,那么也许 HMAC(键控哈希)可能是一种更有效的方法。

于 2012-08-28T14:04:50.803 回答