phonegap应用程序中的本地存储保护

时间:2013-12-05 17:09:09

标签: android ios encryption cordova

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

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

我可以使用sqlclipher(加密我的本地 SQLite数据库)和integrate加入我的 phonegap应用。很好,但在这里我必须为数据库保留密钥:)

var db = window.sqlitePlugin.openDatabase({name: "DB", key: "secret1"});

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

请给我任何建议。

谢谢!

P.S。适用于iOS和Android的应用

2 个答案:

答案 0 :(得分:5)

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

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

其次,我建议使用HMAC来验证您的邮件。它基本上是这样的:

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

  • 当用户第一次启动您的应用时,在您的应用中设置用户ID(=键;长,随机!)。如果要对用户进行身份验证,可能需要某种登录/密码机制。 (存储用户ID以及从设备上的用户ID和共享密钥生成的HMAC。每次读取用户ID时,请根据哈希检查以确保用户ID未被欺骗。)

在您的应用中

  1. 在每封邮件中包含用户ID。
  2. 在每封邮件中加入时间戳。
  3. 根据消息,服务器地址,请求URI和共享密钥放在一起的字符串计算HMAC哈希值。
  4. 在请求标头中包含哈希值。
  5. 在服务器端

    1. 检查时间戳是否有效,例如: G。不超过2分钟左右。这可以防止重放攻击(至少在2分钟后)。
    2. 如果用户ID有效,请检入您的数据库。
    3. 根据消息,服务器地址,请求URI和共享密钥放在一起的字符串计算HMAC哈希值。包括请求URI会阻止人们将相同的有效请求发送到服务器上的另一个URI;即G。在REST环境中,如果您向/comment/1/user/1发送相同的DELETE请求,则会有很大的不同。
    4. 将它与标题中提交的哈希值进行比较,它们必须相等。
    5. 如果检查失败,请发送错误。否则发送回复。
    6. 通过反编译源代码,有可能获得共享机密和有关计算HMAC哈希的方式的信息。我认为没办法避免这种风险。 ...没有深入探索本土发展:

      iOS Keychain

      https://developer.apple.com/library/ios/documentation/Security/Conceptual/keychainServConcepts/iPhoneTasks/iPhoneTasks.html

      Android安全功能

      http://developer.android.com/training/articles/security-tips.html

答案 1 :(得分:0)

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

来自维基:

  

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

请参阅https://github.com/phonegap/phonegap/wiki/Platform-Security

对于某些基于JS的解决方案,请尝试http://code.google.com/p/crypto-js/

相关问题