我的应用程序中有一段代码,它在运行时检索应用程序证书,并将其用作加密某些机密信息的密钥。
某些攻击者是否可以通过反编译我的代码获取该证书byte[]
,或者该证书仅对我的应用程序可见?
以下是我获得证书的方式:
PackageManager pm = this.getPackageManager();
String packageName = this.getPackageName();
int field = PackageManager.GET_SIGNATURES;
PackageInfo packageInfo;
packageInfo = pm.getPackageInfo(packageName, field);
Signature[] signatures = packageInfo.signatures;
// and here we have the DER encoded X.509 certificate
byte[] certificate = signatures[0].toByteArray()
答案 0 :(得分:2)
PackageInfo签名是公钥,
这不是私钥。此密钥可供手机上安装的任何应用访问。
答案 1 :(得分:2)
申请证书是公开的;用于签署应用程序的私钥永远不会离开你的财产(除非你放弃)。无法从公钥重建私钥。他们能够解密你的机密信息的唯一方法是通过某种蛮力尝试,最终没有防御。对你来说幸运的是,运行这种蛮力企图的费用是如此之大,以至于除非他们认为里面有核秘密等,否则他们心智正常的人都不会尝试它。