Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 验证移动设备_Android_Ios_Security_Authentication - Fatal编程技术网

Android 验证移动设备

Android 验证移动设备,android,ios,security,authentication,Android,Ios,Security,Authentication,我正在开发客户机-服务器应用程序,其中客户机应用程序将在移动设备(Android、iOS)上运行,并通过HTTP协议与服务器通信。移动应用程序将在市场上免费提供,多个用户将在同一设备上使用同一应用程序实例 我需要对服务器的每个请求进行身份验证,我需要对设备进行身份验证,而不是对用户进行身份验证,实际上任何人都可能拥有设备 我一直围绕着这个解决方案工作: 安装应用程序后: 假设这是在安全网络上完成的: 管理员(不是普通用户)在给定设备上运行应用程序,并使用应用程序的身份验证表单一次(填写登录名和密

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

我需要对服务器的每个请求进行身份验证,我需要对设备进行身份验证,而不是对用户进行身份验证,实际上任何人都可能拥有设备

我一直围绕着这个解决方案工作:

安装应用程序后:

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

  • 管理员(不是普通用户)在给定设备上运行应用程序,并使用应用程序的身份验证表单一次(填写登录名和密码)
  • 服务器对管理员进行身份验证,并发回设备密钥和特定于该设备的“公共”设备id
  • 服务器存储设备密钥和设备id
  • 设备将设备密钥存储在安全存储器中,并在任何位置显示设备id
  • 现在设备有了自己的“凭证”

    每个客户端请求:

  • 客户端请求一个请求密钥。请求包含设备id
  • 服务器生成请求密钥,将其与设备id一起存储,并将其发送到客户端
  • 客户端发送带有设备id和散列(数据+请求密钥+设备密钥)的请求数据,并因此对请求进行签名
  • 服务器检查散列。服务器还使请求密钥无效
  • 我的问题:

  • 假设存在类似安全存储的东西:这种方法有多安全

  • 在iOS和安卓系统中,有没有任何人(除了唯一的应用程序)都无法读取的安全存储?你能提供一些学习的链接吗(特别是android)。这是否取决于设备的根目录


  • 一些注意事项:

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

    然而,我认为没有100%的安全存储(至少在android上),并且如果设备是根设备,则机密设备密钥可能会被盗。对黑客来说,将其加密存储只会更加困难——他需要对客户端应用程序进行反编译,并找到如何解密



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

    我想你已经知道了。keytool和自签名证书呢?我可能帮不了什么忙。

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

    问题是,我确实需要验证设备而不是用户(只是为了确保请求来自特定设备)。用户甚至没有任何登录/密码,他们只有ID。但是,管理员(服务器)从设备登录一次没有问题,但他不能每天登录,也不能在整个会话中监视设备。基本上,我只需要确保具有给定用户ID的请求来自正确的设备(管理员将管理允许的设备列表);然而,这是一种为你的应用程序识别用户的冒险方式,因为如果用户擦除设备,它就会消失,并且你的用户可能无法在不同的设备上运行你的应用程序。关于设备id的更多信息,请查看此链接:谢谢,我知道DeviceID,但是,尽管任何人都可以访问设备,但也比任何人都可以访问设备id,然后伪造通信(像设备一样)。那么,在这种情况下,你需要想出一种算法来加密你的客户端证书是的,我也发现了。。。我现在不确定,是否有其他应用程序可以访问保存的帐户信息。。。在任何情况下,黑客都可以访问存储的信息,如果一个设备是根。。。如果我存储在任何其他“仅用于应用”的存储中,他也会这样做。。根据我所发现的-数据可能会受到保护(即使黑客拥有物理访问权限),因为Android 4.3和TPM(这不是很令人满意)都使用了KeyChain如果android适用于个人设备,则系统没有用户帐户。但是,构建android的Linux内核确实有用户。浪费这些功能会让人感到羞耻,因此他们所做的就是重新调整其用途。应用程序供应商有帐户,因此默认情况下,应用程序只能访问自己的软件包名称。您可以覆盖。这在清单权限中,当安装应用程序时,用户必须接受“sudo”权限,但只能在安装时接受。你好,卢卡斯,我今天刚遇到这个问题,你找到解决方案了吗?你好,Chintan。不幸的是,我没有发现比上述协议更好的东西。幸运的是,在我的环境中,高安全性并不重要,我只是想让它尽可能安全。最后,我基本上没有编写android应用程序,只有服务器。但请注意,我有一句评论是“自从安卓4.3安装了TPM以来,数据可能会受到保护(即使黑客拥有物理访问权)。也许你想检查它是否是真的,是否对你有任何可能的用途。实际上,确切地说,我对协议做了一些改进:所有的请求密钥只有时间限制的持续时间(比如5分钟)+一些其他特定于上下文的修改,