10

我有一个移动应用程序,我想在其中安全地存储私钥。安全要求意味着即使攻击者可以无限制地访问移动设备,他们也很难获得私钥。为了实现这一级别的安全性,应用程序采用对称加密技术,其密钥源自用户指定的密码短语和特定于设备的盐。

理想情况下,这应该足以抵御暴力攻击;但是有两个限制因素:

  1. 由于私钥必须符合一定的格式,所以解密过程可以测试该过程的结果,看它是否有效。例如,如果私钥是 RSA 私钥,攻击者会尝试各种密码组合并测试他是否可以将生成的明文用作有效的 RSA 私钥。由于 RSA 私钥必须以某种方式对某些信息进行编码,如果解密失败,RSA 引擎会发出密钥无效的信号。这为攻击者提供了一种完全离线的方式来验证他的攻击。优选地,攻击者应该能够在不与服务器通信的情况下判断他的解密尝试是否成功。

  2. 由于应用程序在移动设备上运行,密钥派生函数增加的复杂性无助于密钥强化,因为可以完全访问移动设备的离线攻击可能会在资源更丰富的功能更强大的设备上进行。简而言之,密钥推导函数计算轮数的任何增加都会减慢用户体验(这在一定限度内是可以接受的),但如果攻击是在台式计算机上执行的,则会立即被挫败。

有人可以为我提供这些问题的解决方案吗?具体来说,有没有人知道一种非对称加密算法,其中私钥可以是任何随机字节序列(它可以是固定长度的序列,没关系),并且该算法仍然能够产生密文?

4

3 回答 3

5

安全要求意味着即使攻击者可以无限制地访问移动设备,他们也很难获得私钥。

那是不可能的

以下是攻击者可以执行的操作:

  1. 使应用程序处于必须将私钥加载到内存中的状态。经常使用应用程序会导致这种情况。
  2. 转储内存中的内容。
  3. 滑过内存位,尝试所有已知密钥长度的范围。

由于密钥在内存中,因此您想出什么聪明的方案来从密码短语和盐中生成它并不重要。您的应用程序为攻击者完成所有工作。因默默无闻而导致安全失败的经典案例。

这就是蓝光最初被破解的方式。如果用户在应用程序使用期间可以完全访问内存转储,则无法阻止他们以这种方式获取密钥。

欢迎来到 DRM 的世界。

于 2009-12-11T16:04:40.567 回答
2

现代对称密码对已知的明文攻击具有很强的抵抗力。在发现攻击的地方,它们可能需要许多明文,有时必须自适应地选择明文。

在这里,攻击者有一个单一的、部分明文。我假设工作负载本质上是对密钥空间的蛮力搜索。如果对称密钥是从整个密钥空间中随机选择的,那么攻击者从密文中恢复私钥是不可行的。

间接攻击的可能性更大。

例如,像按键记录间谍软件这样简单的东西就足以击败最好的密码学。也可以使用冷启动内存攻击或核心转储分析。这些风险可以通过在使用后立即将内存中的机密归零来最小化,但它们不能完全消除。

由于这种情况下的密钥来自用户选择的密码,因此有效密钥空间可能比完整密钥空间小得多。通过要求包含所有字符类别的更长密码来缓解这种情况。另外,不要打折键强化。通常的建议是密钥派生函数的数千次迭代,但即使你只能负担几百次,这也会给攻击者带来巨大的计算成本。

于 2009-12-11T17:58:17.793 回答
1

RSA 的私钥一个固定长度的随机字节序列。您只是碰巧在查看它的 ASCII 编码。只需以非 ASCII 格式存储密钥,就可以了。

于 2009-12-11T15:59:18.743 回答