【问题标题】:Authentication android messaging app身份验证android消息传递应用程序
【发布时间】:2016-04-28 02:17:56
【问题描述】:

这是一个消息应用程序。它没有登录名(用户名或密码)。这意味着它必须向服务器发送消息,并且服务器必须相信它来自它说它来自的电话号码。

你是怎么做到的?

1) 通过短信服务向手机发送令牌

【问题讨论】:

    标签: android security authentication encryption


    【解决方案1】:

    很遗憾,您无法 100% 保证向服务器报告的电话号码就是它的来源。原因是客户端代码可以被逆向工程,不管你做什么。但是,您可以做一些事情来让它变得更困难一些,尽管重要的是您不要依赖它来保证 100% 的安全。如果您需要 100% 的保证,那么您需要让应用通过传统方式向服务器进行身份验证。

    我这样做的方式是在每个被释放的客户端副本中嵌入一个令牌,这样每个客户端都有一个不同的令牌。令牌应该具有极大的熵(例如 128 位或更大的整数),并且您应该在服务器上保留您已发布的令牌列表以及设备的电话号码,以便您检查它们的有效性。要求重新安装应用程序以使用新令牌,并将以前的令牌列入黑名单,使其无法再使用。可以使用 UID,但请注意,它很容易被 root 设备欺骗。

    每次都将此令牌提交给服务器,并确保应用声称的电话号码永远不会改变。为了使逆向工程师更难在您的代码中找到令牌,您可以使用额外的令牌xor 一次或多次,您还可以在整个代码中放置一堆虚假令牌,这些令牌被列入服务器黑名单。

    您还可以使用从服务器检索到的密钥对其进行加密,以便在与服务器进行实时交互期间,RE 必须检索嵌入式令牌。同样,这绝不保证令牌不会被发现和更改/被盗,但它提高了潜在逆向工程师的门槛。

    为防止有人嗅探线路并获取和/或篡改您的令牌,或使用Burp Suite 之类的代理来捕获/篡改它,您应该使用encrypted HMAC。如果您以前从未使用过 HMAC,请注意,除非您对其进行加密,否则它仅提供身份验证和完整性,不提供机密性

    编辑:

    还应该补充一点,您应该在部署它之前run your code through an Obfuscator。这不会混淆令牌,但它会混淆反编译的代码,因此它看起来像 RE 的胡言乱语。这会迫使 RE 使用您应用中的字节码/汇编代码,这要困难得多。

    【讨论】:

      【解决方案2】:
      1. 将每个电话号码与唯一的设备标识符相关联
      2. 获取 udid 并随每个请求一起发送
      3. 在对服务器的每个请求之后创建一个签名。签名应该是这样的:secret key1+msg+phone number+udid+secret key2,然后 SHA1 字符串并附加到请求中。
      4. 在服务器上计算签名并与消息后面的原始文件进行比较。如果他们匹配,好的,否则不要发送它。

      使用强键,并使用两个,几乎不可能进行暴力提取。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-10-26
        • 1970-01-01
        • 1970-01-01
        • 2019-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多