【问题标题】:How to hide public key on android?如何在android上隐藏公钥?
【发布时间】:2011-04-11 13:26:33
【问题描述】:

Android 的安全手册说,将公钥(用于 Android 市场)保存为字符串是不安全的,应该以某种方式隐藏/编码。 有人可以举个例子吗?

(我没有单独的服务器,所以不能存储在那里)

更新。相信,这是很常见的任务,与 Android 无关,但也与其他应用程序有关。

【问题讨论】:

  • 你确定你不是指 private 密钥吗?攻击者对公钥几乎无能为力。
  • 我说的是发布者帐户中的 public 密钥。 developer.android.com/guide/market/billing/…为了保护您的公钥免受恶意用户和黑客的攻击,请勿将您的公钥嵌入为整个文字字符串。相反,在运行时从片段构造字符串或使用位操作(例如,与其他字符串进行异或)来隐藏实际密钥。密钥本身不是秘密信息,但您不想让黑客或恶意用户轻松将公钥替换为另一个密钥。
  • 您可以尝试在security.stackexchange.com 询问这个问题。那里有一些真正的专家......
  • @LA_ 你找到解决办法了吗
  • 没错,但您不想轻易用另一个公钥替换公钥。

标签: java android security key


【解决方案1】:

来自page you linked to的相关文字是这样的:

重要提示:保护您的公钥免受恶意用户的侵害,并且 黑客们,不要将您的公钥嵌入为整个文字字符串。 相反,在运行时从片段构造字符串或使用位 操作(例如,与其他字符串异或)来隐藏 实际密钥。密钥本身不是秘密信息,但你没有 想让黑客或恶意用户轻松替换 公钥与另一个密钥。

这就是您需要知道的几乎所有内容。人们知道您的公钥并没有什么害处,这里的潜在危害是有人用他们自己的公钥替换了您程序中的公钥,以便将应用内购买转移到他们自己的帐户。

他们建议您通过将密钥存储在单独的部分中或将密钥与其他一些字符串异或来使攻击者更加困难。现在,他们不能只是将他们的密钥粘贴到您的密钥上,而是必须弄清楚您对字符串进行了哪些转换,并使他们自己的密钥适合该模式。这是更多的工作,可能会阻止临时攻击者,但不会阻止真正有决心的人。

【讨论】:

  • 我不太明白这个。因此,与其拥有String base64EncodedPublicKey = "thisIsMyKey";,不如拥有String one="thisIs"; String two="MyKey"; String base64EncodedPublicKey = one+two; 更安全?
  • @TheBeatlemaniac,他们建议的最低限度是这样的。攻击者拥有自己的公钥,他想找到你的公钥并用他自己的公钥替换它。您拆分和操纵密钥的次数越多,攻击者就需要做更多的工作来替换它。不过,正如我所说,这一切都无法阻止真正坚定的攻击者。
【解决方案2】:

如果您使用 Keytool 实用程序,这一切都会为您完成。您将在本地计算机上获得一个.keystore 文件,其中包含使用密码加密的私钥;将该文件和密码保密,这样您就安全了。

http://developer.android.com/guide/publishing/app-signing.html

事实上,我相信 Eclipse 的 Android 插件甚至会自动为您完成所有这些工作。

【讨论】:

  • 请检查我对该问题的第一条评论 - 我在谈论公钥。
【解决方案3】:

在公钥上,您可以对其进行哈希处理并将其保存为哈希值。更好的是,在需要取回散列值时用您知道的东西来加盐散列值。可能是用户名或 ESN 之类的东西。看看 android.telephony.TelephonyManager.getDeviceId()

【讨论】:

  • 这不是一个解决方案,因为他大概需要在某个时候取回公钥。一种方式不会这样做。
猜你喜欢
  • 1970-01-01
  • 2020-09-28
  • 2020-08-17
  • 2021-04-07
  • 2016-02-12
  • 1970-01-01
  • 2021-08-18
  • 1970-01-01
  • 2011-10-26
相关资源
最近更新 更多