【问题标题】:Storing secure data in android在android中存储安全数据
【发布时间】:2014-06-26 16:28:20
【问题描述】:

我正在使用 OAuth 2 登录我的 Android 应用程序。用户名和密码不存储在设备上。但是,我在源代码本身的类常量中包含了三个字符串参数。

public class Constants{
public static String redirectUri = "http://someurl/users/me";
public static String clientId = "my-android-app";
public static String clientSecret =    "asdfasf";

}

我在登录期间使用 Constants.clientId 访问这些参数。我的问题是我存储数据的方式是否安全?我是否必须加密这 3 个数据。我无法将这些数据存储在共享首选项或数据库中,因为在根设备中可以查看这些数据。

【问题讨论】:

  • 代码硬编码怎么样??
  • 我不太确定,但我正在做的是在 java 中硬编码字符串。
  • 这是我认为最好的方式,否则按照您所说的使用某种算法进行编码
  • 我唯一担心的是android apk文件是zip文件,可以打开查看内容。所有的 java 类都被转换,但可以逆向工程。
  • 你可以使用一些算法来阻止重新设计,我很确定

标签: android security


【解决方案1】:

OAuth 2.0 Threat Model and Security Considerations(rfc6819) 已将获取客户端机密列为威胁。

正如 Google doc Using OAuth 2.0 for Installed Applications 所说:

这些应用程序分布在各个机器上,并且假定这些应用程序不能保密。

所以实际上没有客户端“秘密”。试图混淆已安装应用程序中的秘密是徒劳的,因为可以使用大量的逆向工程和调试工具来恢复秘密。

当然,您应该尽最大努力保护机密,但最终,积极主动的黑客总能在已安装的应用程序中获取机密。所以这是秘密的价值与提取的难度。客户端密钥的值是模拟应用程序。它不提供对用户数据的任何访问权限。

我的建议: 只是冒险继续并混淆它。或者你可以 考虑使用代理模式(move the secret to a web server acting as an API proxy)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 2012-02-01
    • 1970-01-01
    • 2011-01-01
    • 2020-10-27
    • 1970-01-01
    相关资源
    最近更新 更多