我想在我的Android应用程序中使用Curve25519在本地加密/解密AES加密密钥 . 我不需要任何密钥交换,密钥协议或签名 . 为什么我需要使用那条特定的曲线?因为我需要能够自己提供私钥并能够计算它匹配的公钥 . 所以就我而言,只有Curve25519这样做 . 如果我错了,请纠正我 .
所有Curve25519实现都只进行密钥生成,密钥交换和签名/验证 .
在获得Curve25519私钥/公钥后,是否可以进行数据加密/解密,或者您可以建议任何符合我标准的替代曲线?
Edit
那我为什么需要这个呢?我会更仔细地解释一下 . 我的应用正在进行本地文件加密,尤其是照片 . 我的目标是让用户无需输入密码即可拍照,然后输入密码进行查看 . 为此,我需要能够从密码创建公钥/私钥对,并且只要提供相同的密码,就能够在运行时重新创建相同的密钥对 . 所以在第一次运行时,我从密码生成ECC密钥对,并在设备上存储公钥 . 当用户想要使用新的照片应用程序使用随机256位AES密钥加密照片,然后使用存储的公钥加密该密钥 . 当用户想要查看照片时,他/她提供正确的密码,我获得相同的ECC密钥对并使用我的私钥解密AES密钥,然后我可以使用AES 256解密照片 .
所以,就我而言,Curve25519可以给我这种能力,或者还有其他选择 . 欢迎使用Java中的代码示例!
1 回答
加密Android设备上的文件的关键是永远不存储密钥 . 为此,您添加了加密图片不需要密码的约束 . 最后,因为非对称加密很慢,所以你需要使用AES来完成繁重的工作 .
这适用于RSA或任何其他非对称算法 .
Initial Run
首次运行时,生成密钥对并要求用户输入密码 .
将公钥存储为明文 . 使用密码生成的AES密钥加密私钥 .
Encryption
Decryption
(我们实际上有4个密钥 . 我们需要密钥对来允许我们在没有密码的情况下加密 . 我们需要第一个AES密钥来安全地存储私钥 . 我们需要第二个和更改AES密钥来加密文件 . )
我认为这应该是安全的,除了密钥记录等攻击 . Java代码应该非常简单 . 希望这很清楚 .
================================================== ====================
完整示例使用AES和RSA . 对于Curve,仅切换RSA代码,虽然它不支持开箱即用,因此您需要一个外部库 . 此外,出于时间和简洁的考虑,代码的安全性应该低于应有的水平 . 例如,我使用的是ECB,而不是CBC .
}