当前位置: 首页 > 知识库问答 >
问题:

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

耿俊
2023-03-14

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

问题是我对密码学还是新手(对移动编程也是新手),我的初创公司没有足够的资源来聘请这方面的专家。我做了很多研究

我学到的是:

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

在阅读了很多文章/问题/解决方案后,我最终概述了我能做什么。

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

我的问题是:

>

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

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

    很抱歉,我的问题有点抽象。这是因为我还处于设计阶段,还没有具体实现一些东西。

  • 共有1个答案

    酆景辉
    2023-03-14

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

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

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

    那么,你的创业公司应该利用时间做其他事情。

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

    这违反了你所学的#1、#4和#5。

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

    通过查看您的代码。

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

    只有真正愚蠢的攻击者。智商高于普通岩石的攻击者会在您完成所有解码工作后,简单地修改您的应用程序,将所有解码字节写入磁盘。毕竟,这些字节必须在您的进程中解码,以便能够向用户显示它们,这意味着修改了您的应用程序的攻击者可以使用这些字节。

     类似资料:
    • 我需要在android外部可移动存储设备上创建一个文件夹kalid。但是我的文件夹是在手机存储上创建的。我已经从教程中实现了这两个代码。 上面的代码在内部内存中创建kalids文件夹 我的清单如下所示 如何在外部存储设备中创建文件夹?

    • 如果您需要在线使用空间数据,您可以使用SuperMap GIS云存储服务,几分钟就可以把您的数据安全上云。 具体来说,您只需在Web页面或SuperMap iDesktop中登录SuperMap Online账户,即可将GIS数据——工作空间/UDB/Shapefile/Excel/CSV/GEOJson等空间数据,上传、存储在云平台中。 将GIS数据在线存储后,您就可以通过Web/PC/移动端A

    • 从文件共享复制到blob存储时,是否有方法设置目标blob的层?AzCopy在后台使用Azure Storage Data Movation Library for.NET,它具有--block-blob-tier选项。所以,我想这可能是有可能实现的使用库。

    • 允许访问简单的加密和解密字符串,以便存储在本地机器上。 进程:主进程 此模块保护磁盘上存储的数据不被其他应用程序或拥有完全磁盘访问权的用户访问。 请注意,在Mac上,需要访问系统Keychain,这些调用可以阻止当前线程来收集用户输入。 如果密码管理工具可用,Linux 亦是如此。 方法 safeStorage 模块包含以下方法: safeStorage.isEncryptionAvailable

    • 问题内容: 我的主要问题是,我想检查具有相同SSN的某人是否在我们这里有多个帐户。当前,所有个人身份信息都经过加密,解密需要很短的时间。 我最初的想法是在数据库的用户列中添加一个ssn列。然后,我可以简单地执行一个查询,使所有具有ssn或用户A的用户。 我不想将ssn以明文形式存储在数据库中。我当时只是想以某种方式加盐并对其进行哈希处理。 我的主要问题是,这是否安全(或安全性如何)?有什么简单的方

    • 问题内容: 可以类似地使用该对象来存储每个请求的数据吗? 我正在编写一个与Flask和Django兼容的库。我计划在两种情况下都将信息存储在请求对象上。我是否可以安全地在请求中存储对象,例如,以确保不会在不同请求之间共享对象? 问题答案: 是的,这很安全。每个请求的请求对象都是唯一的。 通常使用它是因为它是一个空的命名空间,专门用于在请求期间保存数据。 是具有现有含义的内部对象,尽管通常将其用于存