Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.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 phonegap应用中的本地存储保护_Android_Ios_Encryption_Cordova - Fatal编程技术网

Android phonegap应用中的本地存储保护

Android phonegap应用中的本地存储保护,android,ios,encryption,cordova,Android,Ios,Encryption,Cordova,我应该开发一个phonegap应用程序。我需要对服务器端的请求进行加密,然后解密。 HTTPS不是一个解决方案,因为我需要对请求进行签名以确保数据不是伪造的。我可以使用任何异步加密(应用程序将生成私钥/公钥密钥,并将公钥发送到服务器)。但这样我需要在设备上保留我的私钥 问题是:如何在设备上安全地保留私钥 我可以使用(加密我的本地SQLite DB)并将其放入我的phonegap应用程序中。很好,但这里我必须保留数据库的密钥:) 任何有权使用手机的人都可以获得此密钥。所以这里我有同样的问题:) 请

我应该开发一个phonegap应用程序。我需要对服务器端的请求进行加密,然后解密。 HTTPS不是一个解决方案,因为我需要对请求进行签名以确保数据不是伪造的。我可以使用任何异步加密(应用程序将生成
私钥/公钥
密钥,并将公钥发送到服务器)。但这样我需要在设备上保留我的私钥

问题是:如何在设备上安全地保留私钥

我可以使用(加密我的本地SQLite DB)并将其放入我的phonegap应用程序中。很好,但这里我必须保留数据库的密钥:)

任何有权使用手机的人都可以获得此密钥。所以这里我有同样的问题:)

请给我一些建议

谢谢


p、 默认情况下,PhoneGap本身不提供加密功能。基于iOs和Android(姜饼版本以上)的设备支持全磁盘加密。但PhoneGap/Cordova开发人员无法使用此功能

从wiki:

PhoneGap通常仅限于平台的安全功能 它正在其上运行


对于一些基于JS的解决方案,请尝试一下

您必须区分加密和身份验证

首先,我建议使用https加密您的消息并安全地传输它们

其次,我建议使用HMAC对消息进行身份验证。它基本上是这样工作的:

  • 在编译时生成应用程序和服务器已知的秘密字符串。您将此秘密直接存储在应用程序的源代码中,这样它就不会被传输到服务器或从服务器传输出去。这可能是私钥/公钥方法的主要区别:您将秘密权限编译到应用程序中,而不是稍后将其写入用户可访问的存储中。“直接进入你的应用程序”是指Phonegap不是在你的HTML/JS文件中,而是在本机源代码中!如有必要,您必须将访问器连接到javascript

  • 当用户首次启动应用程序时,在应用程序中设置用户id(=key;long,random!)。如果您想验证您的用户,您可能有某种登录/密码机制。(将用户id以及根据用户id和共享机密生成的HMAC存储在设备上。每次读取用户id时,请对照哈希检查以确保用户id未被伪造。)

在您的应用程序中

  • 在每条消息中包含一个用户id
  • 在每条消息中包含一个时间戳
  • 根据消息、服务器地址、请求URI和共享机密中的字符串计算HMAC哈希
  • 在请求头中包含哈希值
  • 在服务器端

  • 检查时间戳是否有效,例如。G不超过2分钟左右。这可以防止重播攻击(至少在2分钟后)
  • 如果用户id有效,请签入数据库
  • 根据消息、服务器地址、请求URI和共享机密中的字符串计算HMAC哈希。包含请求URI可防止用户向服务器上的另一个URI发送相同的有效请求;EG在REST环境中,如果向
    /comment/1
    /user/1
    发送相同的删除请求,则会有很大的不同
  • 将其与头中提交的哈希值进行比较,它们必须相等
  • 如果任何检查失败,请发送错误消息。否则发送响应
  • 通过对源代码进行反编译,有可能获得共享的秘密以及有关如何计算HMAC哈希的信息。我认为没有办法避免这种风险。。。在不深入本土发展的情况下:

    iOS钥匙链

    安卓安全功能


    我的一个解决方案是实现“PIN页面”,并在每次应用程序运行时显示它。所以PIN将是数据库的密钥。若用户输入错误的pin码3次,我将清除数据库。事实上,这不是一个解决方案,因为罪犯可以尝试从控制台绕过pin码屏幕打开数据库。哦…你考虑过使用HMAC进行身份验证吗?这就是AWS&Co使用的。据我所知,我在问题中描述了HMAC,不是吗?我在回答中更详细地描述了HMAC方法。建议在将私钥存储在db中之前,将私钥编译到你的应用程序中,并通过同步加密的方式对私钥进行加密。这可能就足够了。问题的关键是,根据文档,没有特定的解决方案。编辑了我的答案,并链接到crypt js链接。这很好,但与phonegap无关。。。您的回答中没有关于如何解决此问题的信息。我详细阐述了“HTTPS不是解决方案,因为我需要对请求进行签名以确保数据不是伪造的。”最后一段是关于如何在设备上安全存储密钥的。Phonegap只是HTML5和本地开发的混合体。因此,您有以下几种可能性:将其存储在HTML资产或本机代码中,或使用本机代码将其存储在密钥链中。
    var db = window.sqlitePlugin.openDatabase({name: "DB", key: "secret1"});