如何保护(加密)由 webkit/本地存储存储的数据
Posted
技术标签:
【中文标题】如何保护(加密)由 webkit/本地存储存储的数据【英文标题】:How to protect (encrypt) data stored by webkit/local store 【发布时间】:2013-04-11 09:27:04 【问题描述】:我正在开发一个使用 PhoneGap 框架的应用程序,因此它只是一个使用 html5 的普通网络应用程序。与许多网络应用程序一样,我的客户也希望设备离线时数据可用。对于这些情况,我想将数据存储在浏览器的本地存储中。
但是,客户还希望数据被加密,这样在设备丢失的情况下,敏感数据不会落入坏人之手。我目前的研究提出了 2 个可能的方法:
1) 在存储到本地存储之前,使用 JS 加密框架对任何数据进行加密。由于我的应用需要用户登录,我可以使用用户密码来派生加密密钥(用户密码存储在 ios 钥匙串中)
2) 用户iOS的数据保护机制https://www.apple.com/business/docs/iOS_Security_Guide.pdf
对于 2),在开发者门户(应用程序 ID 部分)中启用数据保护是否正确不会实际上加密任何内容,而是 启用加密的可能性使用适当的NSData
或NSFileManager
操作的特定文件?
还是可以通过在 App ID/配置文件级别启用数据保护来加密整个沙箱(包括浏览器本地存储!)?
还有其他推荐的方法来保护浏览器本地存储中存储的数据吗?
【问题讨论】:
从用户密码中获取密钥(使用正确的 KDF 和 salt)。要求用户在启动应用程序时输入密码。但显然,只有当用户的密码很强大时,这才是安全的。 【参考方案1】:第一个选项适用于跨设备。
我在研究中发现的两个可靠的 JS 加密框架是
Stanford javascript Crypto Library CryptoJS(在我使用 AES-256 的测试中比 SJCL 更快)无论您做什么,请确保用于派生加密密钥的可能数据(在您的示例中为密码)安全存储。
【讨论】:
使用 iOS 的钥匙串应该是安全的吧?我发现了在存储到钥匙串之前额外加密密码的代码示例。这是必要的吗?我认为钥匙串的重点已经是有一个安全的位置来存储敏感的东西......?另外,有人可以告诉我上面的2)吗? 引用 Mac 开发者库:“钥匙串是一个加密的容器,用于保存多个应用程序和安全服务的密码。钥匙串是安全存储容器,这意味着当钥匙串被锁定时,没有人可以访问其受保护的内容。”所以没有必要额外加密密码,除非你非常偏执;)来源:developer.apple.com/library/mac/#documentation/security/… 谢谢你的信息。 2)但是我仍然不清楚。通过在配置文件中启用数据保护,应用沙箱是否可以全局加密(inkl.浏览器本地存储)? 我明白了,看看这个问题,因为它解决了您的一些问题:***.com/questions/4595955/protecting-the-app-sandbox 很遗憾,此页面没有解释配置文件选项的作用。以上是关于如何保护(加密)由 webkit/本地存储存储的数据的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI / iOS / iPhone如何在存储之前加密数据/图像以及在哪里/如何在本地存储,一般最佳实践?