我有一个移动应用程序,我想在其中安全地存储私钥。安全要求意味着即使攻击者可以无限制地访问移动设备,他们也很难获得私钥。为了实现这一级别的安全性,应用程序采用对称加密技术,其密钥源自用户指定的密码短语和特定于设备的盐。
理想情况下,这应该足以抵御暴力攻击;但是有两个限制因素:
由于私钥必须符合一定的格式,所以解密过程可以测试该过程的结果,看它是否有效。例如,如果私钥是 RSA 私钥,攻击者会尝试各种密码组合并测试他是否可以将生成的明文用作有效的 RSA 私钥。由于 RSA 私钥必须以某种方式对某些信息进行编码,如果解密失败,RSA 引擎会发出密钥无效的信号。这为攻击者提供了一种完全离线的方式来验证他的攻击。优选地,攻击者不应该能够在不与服务器通信的情况下判断他的解密尝试是否成功。
由于应用程序在移动设备上运行,密钥派生函数增加的复杂性无助于密钥强化,因为可以完全访问移动设备的离线攻击可能会在资源更丰富的功能更强大的设备上进行。简而言之,密钥推导函数计算轮数的任何增加都会减慢用户体验(这在一定限度内是可以接受的),但如果攻击是在台式计算机上执行的,则会立即被挫败。
有人可以为我提供这些问题的解决方案吗?具体来说,有没有人知道一种非对称加密算法,其中私钥可以是任何随机字节序列(它可以是固定长度的序列,没关系),并且该算法仍然能够产生密文?