如何防止使用泄露的密钥库和密码?

How to prevent usage of leaked keystore and password?

问题

密钥库及其密码用于签署应用程序,Android 然后使用该应用程序来识别开发者。如果泄露,有人可以代表我们更新相关应用程序。即使此人无法访问我们的 Playstore 帐户,他们仍然可以在其他地方发布它

我们随处可见,"never lose it""never leak it",等等。但如果我看到了呢?当密钥库及其密码都泄露时,我找不到需要遵循的步骤,因此我可以保护我们的用户和我们的应用程序。

问题

即使我使用其他 appid 发布相同的应用程序,我如何保护仍在使用旧应用程序的用户?这里有一些最佳实践吗?

遗憾的是,似乎没有将现有应用程序迁移到新签名密钥的好方法。这可能是最好的,因为最佳实践仍然是 a) 拥有一个强密钥和 b) 尽可能保持您的私人发布密钥的私密性。我发现 this article 概述了一种从 1024 位密钥迁移到 4096 位密钥的可行(但对用户不友好的方式),这似乎适合您的用例。由于您仍然拥有受感染应用程序的有效签名密钥,您可以尝试通过更新将它们从它迁移出去。

  1. 生成新的签名密钥,RSA 4096
  2. 使用 TrustedIntents 和 Checkey 将为您生成的新密钥 RSA 4096 的签名 pin,使用导出私有数据的机制更新第一个应用程序 App1
  3. 使用不同的包名称 App2 创建应用的新版本
  4. 使用新密钥 RSA 4096 签署 App2
  5. 向 App2 添加方法以从 App1 接收用户数据,包括旧签名密钥的签名 pin,RSA 1024,用于 TrustedIntents
  6. 将 App2 发布到应用商店
  7. 从 App1,提示用户安装 App2
  8. 从 App1 运行并导入数据
  9. App2 提示用户卸载 App1

不幸的是,这个问题没有简单的答案。上面说了,最通用的方案就是新建一个app,告诉用户切换,然后把数据迁移过来。

但是,在 Lollipop+ 上,还有另一种可能的解决方案。您可以使用升级密钥就地更改应用程序的签名密钥,这样可以省去创建第二个应用程序或进行数据迁移的麻烦。不幸的是,Play 目前不支持此功能,因此它实际上只是场外应用程序的一个选项,而 Kitkat 上的用户运气不佳。