• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

android - 在应用程序中存储和保护私有(private) API key 的最佳实践

[复制链接]
菜鸟教程小白 发表于 2022-8-1 01:20:11 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

关闭。这个问题是opinion-based .它目前不接受答案。












想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它.


2年前关闭。







Improve this question




大多数应用程序开发人员会将一些第三方库集成到他们的应用程序中。如果是访问服务,例如 Dropbox 或 YouTube,或者记录崩溃。第三方图书馆和服务的数量是惊人的。大多数这些库和服务都是通过以某种方式与服务进行身份验证来集成的,大多数情况下,这是通过 API key 发生的。出于安全目的,服务通常会生成公共(public)和私有(private) key ,通常也称为 secret key 。不幸的是,为了连接到服务,必须使用此私钥进行身份验证,因此可能是应用程序的一部分。
不用说,这面临着巨大的安全问题。可以在几分钟内从 APK 中提取公共(public)和私有(private) API key ,并且可以轻松实现自动化。

假设我有类似的东西,我该如何保护 key :

public class DropboxService  {

    private final static String APP_KEY = "jk433g34hg3";
    private final static String APP_SECRET = "987dwdqwdqw90";
    private final static AccessType ACCESS_TYPE = AccessType.DROPBOX;

    // SOME MORE CODE HERE

}

您认为存储私钥的最佳和最安全的方式是什么?混淆,加密,你怎么看?



Best Answer-推荐答案


  • 实际上,您编译的应用程序包含 key 字符串,还包含常量名称 APP_KEY 和 APP_SECRET。从这种自记录代码中提取 key 是微不足道的,例如使用标准的 Android 工具 dx。
  • 您可以应用 ProGuard。它将保持键字符串不变,但会删除常量名称。它还将尽可能用简短、无意义的名称重命名类和方法。然后提取 key 需要更多时间,以确定哪个字符串用于哪个目的。

    请注意,设置 ProGuard 并不像您担心的那么困难。首先,您只需要启用 ProGuard,如 project.properties 中所述。如果第三方库有任何问题,您可能需要在 proguard-project.txt 中隐藏一些警告和/或防止它们被混淆。例如:
    -dontwarn com.dropbox.**
    -keep class com.dropbox.** { *; }
    

    这是一种蛮力方法;一旦处理的应用程序工作,您可以优化此类配置。
  • 您可以在代码中手动混淆字符串,例如使用 Base64 编码,或者最好使用更复杂的编码;甚至可能是 native 代码。然后,黑客将不得不对您的编码进行静态逆向工程或在适当的位置动态拦截解码。
  • 您可以应用商业混淆器,例如 ProGuard 的专用兄弟 DexGuard .它还可以为您加密/混淆字符串和类。提取 key 需要更多的时间和专业知识。
  • 您也许可以在自己的服务器上运行部分应用程序。如果你能把 key 放在那里,它们是安全的。

  • 最后,这是你必须做出的经济权衡: key 有多重要,你能负担多少时间或软件,对 key 感兴趣的黑客有多老练,他们想要多长时间花费, key 被黑客入侵之前的延迟有多少值(value),任何成功的黑客将分发 key 的规模等等。像 key 这样的小块信息比整个应用程序更难保护。从本质上讲,客户端没有什么是牢不可破的,但您当然可以提高标准。

    (我是 ProGuard 和 DexGuard 的开发者)

    关于android - 在应用程序中存储和保护私有(private) API key 的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14570989/

    回复

    使用道具 举报

    懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关注0

    粉丝2

    帖子830918

    发布主题
    阅读排行 更多
    广告位

    扫描微信二维码

    查看手机版网站

    随时了解更新最新资讯

    139-2527-9053

    在线客服(服务时间 9:00~18:00)

    在线QQ客服
    地址:深圳市南山区西丽大学城创智工业园
    电邮:jeky_zhao#qq.com
    移动电话:139-2527-9053

    Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap