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

我应该为旨在用于IOSAndroid的视频流应用程序设计/实现加密解决方案.我的主要密码要求是使视频流在移动设备上保持加密,并防止用户在任何其他设备/程序上运行它.因此,我需要一个很好的方法在每次播放过程中解密流,而又不必每次都麻烦用户输入密码.

问题是我对密码学不熟悉(对移动编程也不陌生),而我的创业公司没有足够的资源来为此聘请专家.通过阅读一些在线资源以及*,我在最先进的密码设计实践方面进行了大量的研发.我学到了很少的重要原理,并且自然而然地遇到了几个新问题,这些问题的答案在任何地方都找不到,因为这些问题并不是针对任何算法的.

我学到的是:

>密码学会使我的流媒体速度变慢.我需要明智地使用它.
>开发人员/设计人员不应尝试自己“发明”新的加密算法.始终建议使用现有的成熟解决方案.
>解决方案的优势/劣势不在于算法的设计/选择,而在于密钥管理和密钥管理策略
>不可能在移动设备上存储解密密钥,每个人都建议不要这样做.因此,这排除了使用任何基于PKI的方案的可能性.唯一可能的解决方案是每次都要求用户输入密码来解密流.
>我想到了使用ID-based encryption scheme并在移动设备本身上实现PKG的想法.但是很快我意识到这也需要在设备上存储一个“秘密”,事实证明与上述问题相同.

阅读了很多文章/问题/解决方案后,我最后概述了我可以做的事情.

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

我的问题是:

>即使阅读了所有这些内容,我仍然不清楚一件事.有几种算法.攻击者如何知道产品中使用了哪种算法?只有攻击者知道了,他才能设计出破解方法,对吗?仅以弱DES算法实现为例,只有攻击者知道我正在使用DES时,她才能找到破解它的方法.她怎么知道的?我是否可以通过在程序中设计接口/声明字符串来使攻击者相信我正在实现AES,但实际上仅在实现DES,从而愚弄了攻击者?密码设计师会采用这种方法吗?
>我的生成密钥的方法是否违反了一般性建议,即不要重新发明较新的算法,不要重用久经考验的解决方案?我相信我不会那样做.我使用标准的AES,但是只是找到一种新的(用于发现自己,我知道几个人以前会做过)管理密钥的方法.我错了吗?

抱歉,我的问题有点抽象.这是因为我仍处于设计阶段,还没有具体实现.

解决方法:

My main cryptographic requirement is to keep video streams encrypted on the mobile device and prevent the users from running it on any other device/program.

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

my startup company doesn’t have enough resources to hire an expert for this

那么,您的创业公司应该在时间上做其他事情.

I would use AES 256 symmetric scheme for encryption/decryption.

这违反了您所学的#1,#4和#5.

How does an attacker knows which algorithm is used in a product?

通过查看您的代码.

Can I fool the attacker by designing an interface/declare strings in the program to make the attacker believe that I’m implementing AES, but actually I’m implementing mere DES?

只有真正愚蠢的攻击者.在完成所有工作后,智商高于一般摇滚的攻击者只需修改您的应用程序,即可将所有解码字节写入磁盘.毕竟,必须在您的进程中对字节进行解码,以便能够将其显示给用户,这意味着修改了您的应用的攻击者可以使用这些字节.

上一篇:android-具有离线访问和本地安全性以及跨平台功能的Google Drive / Dropbox之类的解决方案


下一篇:用PHP加密字符串