在创建简单消息传递android应用程序的过程中,我决定使用RSA公钥/私钥加密。问题是如何存储私钥,以便即使手机被恶意扎根,密钥也会保持安全?据我所知,KeyStore是用来认证的,不能用来做这个吗?我应该用AES将私钥加密为文本文件吗?我在安全方面的经验很少,所以请随时纠正我的想法,并给出你的意见!
致以亲切的问候。
发布于 2013-11-21 01:41:38
我认为KeyStore可以适合您的使用。它能够存储RSA密钥并使用AES对其进行加密,因此即使使用root访问,也无法在没有密码或暴力破解的情况下提取它们。
这里有一个关于使用KeyStore的很好的帖子:http://nelenkov.blogspot.fr/2012/05/storing-application-secrets-in-androids.html
发布于 2014-04-01 15:04:49
你可以使用android上的SharedPreference保存你的RSA公钥/私钥。为了在手机被恶意扎根时保护您的密钥安全,您可以执行以下步骤:
1:当你想要加密任何数据时,生成一个密钥对。
2:提示用户输入密码。
3:使用该密码生成对称密钥来加密您的私钥。
4:您可以使用公钥对数据进行加密,使用私钥进行解密。
5:您可以为步骤2中提示的密码保留会话,在会话期间,您可以使用对称密钥(由密码生成)对私钥进行加密/解密。
下面的代码片段展示了如何存储和获取公钥
public void setPublicKey(PublicKey publicKey, String key, Context context) {
byte[] pubKey = publicKey.getEncoded();
String pubKeyString = Base64.encodeBytes(pubKey);
this.setString(key, pubKeyString, context);
}
public PublicKey getPublicKey(String key,Context context) {
PublicKey pKey = null;
try {
String pubString = this.getString(key, context);
if(pubString!=null) {
byte[] binCpk = Base64.decode(pubString);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(binCpk);
pKey = keyFactory.generatePublic(publicKeySpec);
}
}catch(Exception e){
}
return pKey;
}
下面的代码片段展示了如何存储和获取私钥。
public void setPrivateKey(PrivateKey privateKey, String key, Context context) {
byte[] priKey = privateKey.getEncoded();
String priKeyString = Base64.encodeBytes(priKey);
this.setString(key, priKeyString, context);
}
public PrivateKey getPrivateKey(String key, Context context) {
PrivateKey privateKey = null;
try {
String privateString = this.getString(key, context);
if(privateString!=null){
byte[] binCpk = Base64.decode(privateString);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(binCpk);
privateKey = keyFactory.generatePrivate(privateKeySpec);
}
}
catch(Exception e){
}
return privateKey;
}
发布于 2015-08-21 19:16:14
文件系统中的密钥存储库(P12、JKS、AKS)都不能足够安全,无法保存RSA私钥。只有SmartCard或安全令牌可以提供高级别安全性。阅读这本书:"Android安全内部原理“。在这本书中,你会找到很好的Android安全和JCA提供商的描述。
https://stackoverflow.com/questions/20102570
复制相似问题