我需要在Android设备上存储一些任意长度的对称密钥。 最安全的存储位置是KeyStore。 问题在于KeyStore无法保存任意密钥,而只能存储它生成的密钥。 只能从API 23开始生成对称密钥,而从18开始才能生成RSA密钥。这就是为什么通常建议在KeyStore中生成RSA密钥,而不是使用公共密钥对对称密钥进行加密,将对称密钥保存在首选项中,然后再使用私钥对其解密。
考虑到Android版本从21开始,我考虑了省略共享首选项而仅使用KeyStore的方法。 从安全角度来看,以下方案的合法性如何?
与私钥相比,攻击者更容易从KeyStore获得证书吗?也许攻击者可以发起一些虚假的SSL / TLS连接来检索它?除此之外,我无法想到一种将私钥用作对称密钥的方法(通过对其进行哈希处理或使用KDF),因为它无法以编码形式从KeyStore中检索。
任何帮助将不胜感激。