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

时间:2013-12-06 12:28:37

标签: android ios mobile encryption cryptography

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

问题是我不熟悉加密技术(也是移动编程的新手),而我的创业公司没有足够的资源来聘请专家。通过阅读多个在线资源以及stackoverflow,我在最先进的加密设计实践方面做了很多研发。我已经学到了一些重要的原则,并且自然而然地结束了几个新的问题,因为这些问题对任何算法都不太具体,所以在任何地方都找不到答案。

我学到的是:

  1. 密码学会使我的流媒体变慢。我需要明智地使用它。
  2. 开发人员/设计人员不应试图自己“发明”新的加密算法。始终建议使用现有的成熟解决方案。
  3. 解决方案的优缺点不在于算法的设计/选择,而在于密钥管理和密钥管理策略
  4. 无法在移动设备上存储解密密钥,并且每个人都建议不要使用解密密钥。因此,这排除了使用任何基于PKI的方案的可能性。唯一可行的解​​决方案是要求用户每次都要输入密码来解密流。
  5. 我有一个想法是使用ID-based encryption scheme并在移动设备上实现PKG。但很快我意识到这也需要在设备上存储“秘密”,结果与上述问题相同。
  6. 在阅读了很多文章/问题/解决方案之后,我最终概述了我能做些什么。

    1. 我会用C ++实现解决方案,以尽可能地混淆代码。
    2. 我会使用AES 256对称方案进行加密/解密。
    3. 我会使用设备中的几个参数和多个散列级别(并在每个级别中添加参数作为salt以使其尽可能复杂)来派生将充当密钥的散列。这将(希望)安全地识别我的用户安装。这受到here
    4. 的启发
    5. 我会在将设备下载到设备后加密设备上的数据。从服务器到客户端,我会进行某种加扰,其密钥将被编码为算法(例如:空间填充曲线方法)。我知道这可能是最薄弱的环节,但我会在以后找到更好的解决方案。
    6. 我的问题是:

      1. 即使在阅读了所有这些内容之后,有一点我不清楚。那里有几种算法。攻击者如何知道产品中使用了哪种算法?只有攻击者知道它,他才能设计破解它的方法,对吗?仅举一个弱DES算法实现的例子,只有当攻击者知道我正在使用DES时,她才能找到破解它的方法。她怎么知道的?我是否可以通过在程序中设计接口/声明字符串来欺骗攻击者,以使攻击者相信我正在实施AES,但实际上我只是实现了DES?加密设计师是否采用这种方法?

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

      3. 对不起,我的问题略微抽象。这是因为我还处于设计阶段,还没有具体实施。

1 个答案:

答案 0 :(得分:3)

  

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

这称为“DRM”。有两种类型的DRM:已经破解的DRM,以及没有人想要破解的DRM。

  

我的创业公司没有足够的资源来聘请专家

你的初创公司应该用它的时间做其他事情。

  

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

这违反了你学到的#1,#4和#5。

  

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

查看您的代码。

  

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

只有真正愚蠢的攻击者。智商高于平均水平的攻击者只需修改你的应用程序,在完成所有解码工作后,将所有已解码的字节写入磁盘。毕竟,字节必须在您的进程中已解码,以便能够将这些字节显示给用户,这意味着已修改您的字节可用于攻击者应用