Windows 8 应用程序 - 本地存储安全性

6

本地数据的安全性如何?

ApplicationData.Current.LocalSettings

Windows 8应用商店中使用的存储方式?

这篇应用数据存储文章没有提到安全性,这篇文章也是如此。

这些数据能否被从应用程序外部操纵?

我查看了数据的位置

C:\Users[username]\AppData\Local\Packages[package_namespace]\LocalState)

但是没有找到。它确切地保存在哪里?

我正在尝试评估这种存储机制的安全性,以决定是否可以将安全关键信息存储在那里。

3个回答

4

经过进一步调查,我发现:

http://lunarfrog.com/blog/2012/09/13/inspect-app-settings/

数据存储在

C:\Users[用户名]\AppData\Local\Packages[包命名空间]\LocalState\Settings\settings.dat

这是一个Windows NT注册表文件(REGF),可以用注册表编辑器打开并进行操作。

也就是说,本地存储不安全。

如果没有其他办法,可以加密数据并混淆密钥。


你想要保护数据的来源和对象是什么?阅读?修改?用户?还是机器上的其他应用程序? - Marcus Ilgner
除了在某台机器上的应用程序读写之外,一切都可以。 - dschenk
1
对于这种情况,“安全”是一个非常脆弱的术语。即使您加密了数据,也需要将密钥存储在应用程序内部。因此,如果有人真的想读取它,他们会提取密钥并自行解码数据。这就是为什么仅基于软件的数字版权管理(DRM)很容易被破解的原因:如果某个人可以阅读它,那么很可能其他人也可以阅读它。 - Marcus Ilgner
这是绝对正确的。但是根据上下文和安全要求,加密可能足以“够好”。当然,正如您指出的那样,不存在100%的安全性。 - dschenk
@dschenk 只是提醒一下:提取密钥并不像听起来那么困难。应用程序的源代码以可读格式存储在 C:\Program Files\WindowsApps 中(特别是如果您使用 JS 编码)。 - ComFreek

3

如果你需要存储用户凭据,可以看一下 PasswordVault 类。否则使用你已经建议的 DPAPI


2
这段文字的大意是:这篇应用程序数据存储文章没有提到安全性,另一篇文章也没有。这些数据能否被从应用程序外部操纵?该存储与iOS的Core Data类似,除非在应用程序层以下进行保护,否则它基本上是不可信的输入。即使使用加密保护存储,也很可能没有认证,因此容易遭到篡改。如果没有其他方法,加密数据和混淆密钥是一种可能性。
在 Windows 平台上,保护敏感数据的标准方法是使用数据保护 API (DPAPI)。 使用用户提供的密钥(在API中提供的额外熵)可以获得最佳的保护效果。您可以将 DPAPI 数据存储在用户配置文件、注册表或文件系统中。例如,参见 Windows Data ProtectionHow to: Use Data ProtectionData protection API (Windows Store apps)。Michael Howard 和 David LeBlanc 在 Writing Secure Code, Second Edition 一书中对该主题进行了很好的阐述。请参见第9章“保护机密数据”,从第299页开始。
如果您想要类似数据库的加密,可以看看SQLCipher。它使用认证加密,因此提供机密性和完整性。Windows 8支持本地库,包括在他们的手机上(例如,请参阅Windows Phone 8上的本地代码)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接