【问题标题】:How to prevent usage of leaked keystore and password?如何防止使用泄露的密钥库和密码?
【发布时间】:2016-09-23 08:38:05
【问题描述】:

问题

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

我们随处可见,“永远不会丢失它”“永远不会泄漏它” 等等。但是如果我这样做了呢?当密钥库及其密码泄露时,我找不到需要遵循的步骤,因此我可以保护我们的用户和我们的应用程序。

问题

即使我使用另一个 appid 发布同一个应用,我如何保护仍在使用旧应用的用户?这里有一些最佳做法吗?

【问题讨论】:

    标签: android android-keystore android-security


    【解决方案1】:

    不幸的是,似乎没有一种很好的方法可以将现有应用程序迁移到新的签名密钥。这可能是最好的,因为最佳实践仍然是 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 接收用户数据的方法,包括旧签名密钥 RSA 1024 的签名引脚,以用于 TrustedIntents
    6. 将 App2 发布到应用商店
    7. 从 App1,提示用户安装 App2
    8. 从 App1 运行和导入数据
    9. App2 提示用户卸载 App1

    【讨论】:

    • 我认为赏金会产生其他答案,但似乎这是一个没有解决方案的真正问题。谢谢你的详细回答。
    【解决方案2】:

    不幸的是,这个问题没有简单的答案。如上所述,最通用的解决方案是创建一个新应用,告诉用户切换,然后将数据迁移过来。

    但是,在 Lollipop+ 上,还有另一种可能的解决方案。您可以使用升级密钥来更改应用程序的签名密钥,这样可以省去创建第二个应用程序或进行数据迁移的麻烦。不幸的是,Play 目前不支持此功能,因此它仅适用于非市场应用程序,Kitkat 上的用户不走运。

    【讨论】:

    • 我不知道更改现有应用程序的签名密钥的可能性。谢谢!
    猜你喜欢
    • 2011-08-31
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-26
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    相关资源
    最近更新 更多