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