如何在移动设备上安全地存储数据?

Posted

技术标签:

【中文标题】如何在移动设备上安全地存储数据?【英文标题】:How to store data securely on a mobile device? 【发布时间】:2013-12-23 19:22:43 【问题描述】:

我应该为适用于 iosandroid 的视频流应用程序设计/实施加密解决方案。我的主要加密要求是在移动设备上保持视频流加密,并防止用户在任何其他设备/程序上运行它。所以,我需要一个很好的方法来在每次播放期间解密流,而不用打扰用户每次输入密码。

问题是我是密码学新手(对移动编程也是新手),而我的初创公司没有足够的资源为此聘请专家。通过阅读一些在线资源和 ***,我对最先进的密码设计实践进行了大量的研发。我学到了一些重要的原则,自然而然地遇到了几个新问题,这些问题在任何地方都找不到答案,因为这些问题对任何算法都不太具体。

我学到的是:

    加密技术会使我的流式传输速度变慢。我需要明智地使用它。 开发人员/设计人员不应尝试自行“发明”新的加密算法。始终建议使用现有经过验证的解决方案。 解决方案的强项/弱点不在于算法的设计/选择,而在于密钥管理和密钥管理策略 在移动设备上存储解密密钥是不可能的,每个人都反对它。因此,这排除了使用任何基于 PKI 的方案的可能性。唯一可能的解决方案是每次都要求用户输入密码来解密流。 我想到了使用ID-based encryption scheme 并在移动设备本身上实现PKG。但很快我意识到这也需要在设备上存储一个“秘密”,结果与上述问题相同。

在阅读了很多文章/问题/解决方案后,我总结出了我能做什么。

    我会在 C++ 中实现该解决方案,以尽可能地混淆代码。 我会使用 AES 256 对称方案进行加密/解密。 我将使用来自设备的多个参数和多个级别的哈希(并将每个级别中的参数添加为盐以使其尽可能复杂)来派生将充当密钥的哈希。这将(希望)安全地识别我的用户安装。灵感来自here。 我会在将设备本身的数据下载到设备后对其进行加密。从服务器到客户端,我会进行某种加扰,其密钥将被编码为算法(例如:空间填充曲线方法)。我知道这可能是最薄弱的环节,但我稍后会找到更好的解决方案。

我的问题是:

    即使在阅读了所有这些之后,我也不清楚一件事。有几种算法。攻击者如何知道产品中使用了哪种算法?只有攻击者知道它,他才能设计破解它的方法,对吗?举个弱DES算法实现的例子,只有攻击者知道我在使用DES,她才能想办法破解它。她怎么知道的?我可以通过在程序中设计一个接口/声明字符串来欺骗攻击者,让攻击者相信我正在实现 AES,但实际上我只是在实现 DES?密码设计者会采用这种方法吗?

    我生成密钥的方法是否违反了一般建议,即不要重新发明新算法、重复使用经过验证的解决方案?我相信我不会那样做。我使用标准的 AES,但只是寻找一种新的(只是发现自己,我知道以前有几个人会这样做)方法来管理密钥。我错了吗?

很抱歉,我的问题有点抽象。这是因为我仍处于设计阶段,尚未具体实施。

【问题讨论】:

不幸的是,加密对混淆没有帮助。有关该主题的更多信息:blogs.msdn.com/b/ericlippert/archive/2011/09/27/… 解密比视频解码快得多。特别是如果您稍微减少轮数,因为在 DRM 方案中,与安全密钥管理的不可能性相比,算法的强度并不重要。例如,ChaCha8 将在单核上每秒解密数百兆字节。 @ntoskrnl:很好的链接,谢谢。 @CodesInChaos:感谢您的意见。我还没有实现这些。 【参考方案1】:

我的主要加密要求是保持移动设备上的视频流加密,并防止用户在任何其他设备/程序上运行它。

这称为“DRM”。 DRM 有两种类型:已破解的 DRM 和尚未尝试破解的 DRM。

我的初创公司没有足够的资源为此聘请专家

那么,您的初创公司应该利用自己的时间做其他事情。

我会使用 AES 256 对称方案进行加密/解密。

这违反了您所学的第 1、第 4 和第 5 条内容。

攻击者如何知道产品中使用了哪种算法?

通过查看您的代码。

我可以通过在程序中设计一个接口/声明字符串来欺骗攻击者,让攻击者相信我正在实现 AES,但实际上我只是在实现 DES?

只有真正愚蠢的攻击者。 IQ 高于一般岩石的攻击者会在您完成所有解码工作后修改您的应用程序,将所有解码字节写入磁盘。毕竟,字节必须在你的进程中解码,以便任何东西能够向用户显示它们,这意味着这些字节可供修改你的攻击者使用应用程序。

【讨论】:

感谢您的意见。我阅读了各种巨头尝试 DRM 的历史,以及它们是如何迅速破解的。最后一部分非常有用。普通程序员不应该重用我的代码。我从来没有想过它(看看加密表面的缺乏经验;))

以上是关于如何在移动设备上安全地存储数据?的主要内容,如果未能解决你的问题,请参考以下文章

移动设备上的数据保护

如何在移动应用程序中安全地存储密码

Mac 如何使用外部存储设备,移动硬盘备份 iPhone 数据

如何在服务器上安全地存储文件

安全地存储数据

谈分布式存储(上)