我有一个移动应用程序,我希望存储私钥安全。安全要求意味着即使攻击者无限制地访问移动设备,攻击者也很难获得私钥。为了达到这种安全级别,应用程序采用对称加密技术,其密钥源自用户指定的密码短语和特定于设备的盐。
理想情况下,这应该足够安全,以抵御暴力攻击;但是有两个限制因素:
由于私钥必须符合某种格式,因此解密过程可以测试进程的结果以查看它是否有效。例如,如果私钥是RSA私钥,攻击者将尝试密码短语和测试的各种组合,以查看他是否可以将生成的明文用作有效的RSA私钥。由于RSA私钥必须以某种方式编码某些信息,如果解密失败,RSA引擎将发信号通知该密钥无效。这为攻击者提供了一种完全脱机的方式来验证他的攻击。优选地,攻击者不能够在不与服务器通信的情况下判断他的解密尝试是否成功。
由于应用程序在移动设备上运行,Key Derivation Function的复杂性增加对Key Strengthening没有帮助,因为可能会完全访问移动设备的离线攻击在功能更丰富的设备上拥有更丰富的资源。简而言之,密钥派生函数的计算轮次数的任何增加都会降低用户体验(可接受某个限制),但如果要在台式计算机上执行攻击,则会立即阻止。
有人能为我提供这些问题的解决方案吗?具体来说,是否有人知道非对称加密算法,其中私钥可以是任意随机字节序列(它可以是固定长度序列,无关紧要),算法仍然能够产生密文?
答案 0 :(得分:5)
安全要求意味着即使攻击者无限制地访问移动设备,攻击者也很难获得私钥。
这只是不可能。
以下是攻击者可以做的事情:
由于密钥在内存中,因此通过短语和盐来生成密码并不重要。您的应用程序为攻击者完成所有工作。经典案例失败security through obscurity。
这就是Blu-Ray最初被破解的方式。如果用户在应用程序使用期间完全访问内存转储,则无法阻止他们以这种方式获取密钥。
欢迎来到DRM世界。
答案 1 :(得分:2)
现代对称密码对已知的明文攻击非常有抵抗力。在发现攻击的地方,它们可能需要许多明文,有时必须自适应地选择明文。
在这里,攻击者有一个单一的部分明文。我认为工作量基本上是对关键空间的强力搜索。如果从整个密钥空间中随机选择对称密钥,则攻击者无法从密文中恢复私钥。
间接攻击的可能性更大。
例如,像密钥记录间谍软件这样简单的东西就足以击败最好的密码术。也可以使用冷启动内存攻击或核心转储分析。这些风险可以通过在使用后立即从内存中消除秘密来最小化,但它们不能完全消除。
由于此情况下的密钥是从用户选择的密码派生的,因此有效密钥空间可能比完整密钥空间小得多。通过要求包含所有类别字符的更长密码来缓解这种情况。另外,不要打折关键加强。通常的建议是针对密钥派生函数的数千次迭代,但即使您只能承担几百次,也会给攻击者带来巨大的计算成本。
答案 2 :(得分:1)
RSA 的私钥是固定长度的随机字节序列。你恰好正在查看它的ASCII编码。只需以非ASCII格式存储密钥,您应该很好。