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

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

问题是:我怎样才能保密私钥在设备上?

我可以使用sqlclipher (encryption我的本地SQLite数据库 ), 并将其集成到我的phonegap应用程序 。 太好了,但是在这里我必须保密数据库的密钥:)

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

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

请给我任何build议。

谢谢!

适用于iOS和Android的ps应用程序

你必须区分encryption和authentication。

首先,我build议使用https来encryption您的信息并安全地传输它们。

其次,我build议使用HMAC来validation你的消息。 它基本上是这样工作的:

  • 在编译时生成应用程序和服务器已知的秘密string。 您将此密码直接存储在您的应用程序的源代码中,因此绝不会传输到服务器或从服务器传输。 这可能是您的私钥/公钥方法的主要区别:您将秘密权限编译到应用程序中,而不是稍后在某些用户可访问的存储中写入。 “直接进入你的应用程序”意味着Phonegap不在你的HTML / JS文件中,而是在本地源代码中! 如有必要,您必须将访问者连接到JavaScript。

  • 当用户第一次启动你的应用时,在你的应用中设置一个用户ID(= key; long,random!)。 如果你想validation你的用户,你可能有某种login/密码机制。 (将用户标识以及用户标识和共享密钥生成的HMAC存储在设备上,每次读取用户标识时,都要对照哈希值进行检查,以确保用户标识不被欺骗)。

在你的应用程序

  1. 在每个消息中包含一个用户标识。
  2. 在每封邮件中join时间戳。
  3. 计算来自消息,服务器地址,请求URI和共享密钥的string中的HMAC散列。
  4. 在请求头中包含散列值。

在服务器端

  1. 检查时间戳是否有效,例如不超过2分钟左右。 这可以防止重放攻击(至less2分钟后)。
  2. 检查你的数据库,如果用户ID是有效的。
  3. 计算来自消息,服务器地址,请求URI和共享密钥的string中的HMAC散列。 包括请求URI可以防止人们将相同的有效请求发送到服务器上的另一个URI; 例如,在REST环境中,如果您向/comment/1/user/1发送相同的DELETE请求,则会有很大的区别。
  4. 将它与头中提交的哈希值进行比较,它们必须相等。
  5. 如果检查失败,则发送错误。 否则发送回复。

通过反编译源代码,您有机会获得共享密钥和有关如何计算HMAC散列的方式的信息。 我无法避免这种风险。 …没有深入到本地开发:

iOS钥匙串

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

Android安全function

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

默认情况下,PhoneGap不提供自己的encryptionfunction。 基于iOs和Android的设备(以上姜饼版本)支持全盘encryption。 但是这对于PhoneGap / Cordova开发人员是不可用的。

来自wiki:

PhoneGap通常仅限于其运行平台的安全function。

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

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