验证移动设备

时间:2013-10-07 16:35:56

标签: android ios security authentication

我正在开发客户端 - 服务器应用程序,其中客户端应用程序将在移动设备(Android,iOS)上运行,并将通过HTTP协议与服务器通信。移动应用程序将在市场上免费提供,多个用户将在同一设备上使用相同的应用程序实例。

我需要对服务器的每个请求进行身份验证,我需要对设备进行身份验证,而不是用户,而且几乎任何人都可以拥有设备。

我已经解决了这个问题:

安装应用程序后:

我们假设这是在安全的网络上完成的:

  1. 管理员(不是普通用户)在给定设备上运行应用程序并使用应用程序的身份验证表单一次(填写他的登录名和密码)。
  2. 服务器对管理员进行身份验证,并发送一个秘密设备密钥和一个特定于该设备的“公共”设备ID
  3. 服务器存储设备密钥设备ID
  4. 设备将设备密钥存储在安全存储设备ID 中。
  5. 现在设备有自己的“凭据”。

    随每个客户请求:

    1. 客户端请求请求密钥。该请求包含设备ID
    2. 服务器生成请求密钥,将其与设备ID 一起存储并发送给客户端。
    3. 客户端使用设备ID 和(数据+ 请求密钥 + 设备密钥)的哈希值发送请求数据,从而签署请求
    4. 服务器检查哈希。服务器还会使请求密钥无效。
    5. 我的问题:

      1. 假设存在安全存储之类的东西:这种方法有多安全?

      2. 有什么类似安全存储在iOS和Android中没有人(但唯一的应用程序)可以读取的内容吗?你能提供一些学习的链接(特别是对于android)。这取决于设备的生根吗?


      3. 有些说明:

        我相信,由于请求密钥,客户​​端确实需要证明秘密设备密钥的知识(没有请求密钥 >黑客可以再次发送截获的数据)。由于设备密钥是通过安全网络发送的,因此无法拦截,因为它存储在安全存储中,因此无法从设备中窃取。

        但是我希望没有100%安全存储(最低限度安装在Android上),如果设备已植根,则秘密的设备密钥可能会被盗。将其加密存储会使黑客更难 - 他需要反编译客户端应用程序并找到如何解密它。


        编辑:建议的方法变化不大(存在安全漏洞),添加了一些注释和其他一些细节。

2 个答案:

答案 0 :(得分:0)

http://developer.android.com/reference/android/accounts/AccountManager.html我想你已经知道了。 keytool和自签名证书怎么样?我可能没多大帮助。

答案 1 :(得分:0)

我要做的是在Android上为您的应用程序创建登录Web服务(当然,您需要加密和解密您的登录信息)。如果登录成功,请将用户会话保存在sharedPreferences或您选择的其他存储中。用户完成后,用户可以注销,用户会话将被销毁。