【问题标题】:Is my method of ensuring the integrity of a string secure?我确保字符串完整性的方法是否安全?
【发布时间】:2011-06-03 10:28:49
【问题描述】:

这是我在这里的第一个问题,如果我做错了,请告诉我!

我正在使用 Eclipse 构建一个 Android 应用程序,并且正在使用条形码阅读器读取 QR 码。这一切都很好,但是,有时会出现包含用户“奖励”的“特殊情况”条形码。

这个“奖励”包含在一个特殊格式的字符串中,这个字符串可能被打算欺骗系统的人篡改。这不是一个大问题,但我已经采取了措施来防止它,现在我的问题是......这些步骤有多安全?

这里有两个字符串示例:

***Code-v1.0:31c8f90a4050:1001:0:C:1337
***Code-v1.0:6a9c4e8d92da:1002:C4D23A1B:C:1337

字符串的格式如下:

***Code-v1.0:HASH:CODE_ID:REDEEM_ONCE:CODE_ACTION:ARG
(REDEEM_ONCE has 3 possible values)

我的哈希系统是这样工作的:

salt = "************:***"; // didnt think it wise to post this, but the length is
                           //  the same and its alphanumeric
MD5 = salt . ":" . codeParts[2] . codeParts[5] . codeParts[4] . ":" . codeParts[3] . ":";
MD5 .= codeParts[4] . codeParts[3] . ":" . codeParts[5] . codeParts[2];

这是一种安全的方法吗,代码似乎无法在不影响哈希的情况下被篡改,但哈希肯定会发生冲突,如果有人制定了哈希方案,这一切都变得毫无意义(这风险要小一些只是在服务器端“找到”它,但如果有人想出来的话)。

你有什么想法?

【问题讨论】:

  • 如果 MD5 看起来不安全,您可以使用 SHA-256 或 SHA-512。
  • 这会合法地增加它的安全性,还是几乎没有什么不同?

标签: android security md5 barcode hash


【解决方案1】:

如果您发送了部分和哈希,但没有发送任何地方的盐(只是为了确定;)),您看起来就像在正确的轨道上。 一些备注:

  1. 为什么要使用 md5? SHA 系列更安全。
  2. 我们的支付服务提供商最近对字符串进行了这样的格式化,以确保在不太可能发生冲突(它们的推理)的情况下使用更长的字符串:

codepart1.SALT.codepart2.SALT.codepart3.SALT 等

从技术上讲,我认为它不会是盐,但仍然......

所以发送你的哈希和你的代码部分,并从代码部分和盐/秘密字符串重新创建哈希,你就设置好了。

我看到一个问题:您的秘密字符串必须是真正的秘密,并且它在您的应用程序中。所以逆向工程可以显示你的哈希是如何产生的,所以他们可以改变你发送的字段和哈希?

【讨论】:

  • 我的应用程序扫描条形码(和散列),然后将其发送到执行所有检查的服务器,并且应用程序不包含散列方案或盐。我可能会听取您关于 SHA 和多种盐的建议。我现在留下的最大问题是关于我的“字符串到哈希”中相同数据的“重复”。这实际上是否增加了哈希的安全性?
  • 不应该/没关系。即使您在最后添加 1 个字符,您要散列的字符串中的微小变化也会使结果完全不同。
  • 感谢南妮的帮助。 +1 接受的答案:D
猜你喜欢
  • 2015-03-10
  • 1970-01-01
  • 2013-01-22
  • 2013-03-02
  • 1970-01-01
  • 2016-07-20
  • 2010-09-24
  • 2019-12-03
  • 2014-11-08
相关资源
最近更新 更多