当前位置: 首页 > 面试题库 >

桌面应用程序中哈希,盐,密钥的存储位置

林炫明
2023-03-14
问题内容

我试图弄清楚应该在哪里或如何在桌面应用程序中存储应用程序的秘密和密钥。
例如,Facebook应用程序密钥或保管箱密钥和机密。

所以我读到我应该哈希,加盐,加密等这些值。这是为了防止有人对我的代码进行反向工程并查看密钥。

都很好,但是使用所有这些方法,最后我只是将salt或hash值而不是密钥本身存储在某个地方。当然,如果黑客可以使用盐/哈希和可能的源代码,那么他们将能够解密加密密钥并获得我的密码/密钥/秘密吗?

我已经阅读过的一种似乎最安全的选择是根本不将这个值存储在桌面应用程序中,而是调用Web服务来获取密钥(可能是加密的)。但是我的问题是,即使在这种情况下,一个体面的黑客也肯定会进行一次内存转储或执行某种操作来查看Web服务返回的值是什么,然后我们回到平方1。

下一个最佳选择似乎是晦涩难懂。

我完全想念什么吗?

附带说明一下,无论如何,facebook / twitter / dropbox / etc key /
secret对黑客有什么用?当然,他们仍然需要用户的凭据或访问令牌才能使用它吗?

任何意见或建议,将不胜感激。


问题答案:

为每个用户帐户成功登录到您的服务后,为应用程序生成一个新的访问令牌。您的登录服务应设计为类似于网站登录:

  • 该API仅应允许设置次数(例如5次)的错误登录尝试,该尝试会向桌面客户端报告用户名/密码不匹配。
  • 当用户成功登录时,API应该返回仅与该用户关联的令牌。
  • 使用SSL和本地化的哈希方法将用户密码传递给您的API

您的API提供的此身份验证令牌仅适用于个人帐户,因此,应仅允许用户对其个人帐户执行操作。因此,例如,如果用户要执行操作,则他们必须能够提供有效的身份验证令牌才能完成操作。使用此方法,攻击者仍然可以获取身份验证密钥,但是该身份验证密钥将仅能够对其生成帐户进行操作。它将无法对任何其他帐户执行操作。这里的想法是让他们弄乱数据,但将不良活动划分为一个帐户。

从那里开始,如果确实有访问来自多个帐户的数据的通用API调用(例如图像搜索),请确保您永远不会返回或允许任何帐户直接访问系统中的 所有
数据。仅提供有限数量的记录。在这种情况下,系统仍在执行其工作,但是决不允许访问系统中的所有记录。

我通常实现这样的服务:

  • 用户登录并获得身份验证令牌。我将所述身份验证令牌存储在与该用户关联的数据库中。
  • 用户使用身份验证令牌调用We​​b服务。我 通过 传输的身份验证令牌和用户ID(两种身份验证形式)查找用户帐户,并使用发现的用户帐户执行所有操作。我不只是假设用户ID是正确的,还必须是auth令牌进行身份验证的用户ID。
  • 如果用户需要执行 微妙的 操作(例如重设密码),我的应用程序会在应用程序中打开浏览器窗口或浏览器任务,用户可以在其中请求和管理重设。与未知客户端上的Web应用程序相比,我可以更轻松地保护Web应用程序。

使用这些方法,您应该能够制作一个完全可操作的桌面应用程序。如果您有任何异常,请在注释中添加这些功能,我们可以进一步深入探讨问题并查看该解决方案是否仍对您有效。



 类似资料:
  • keytool-exportcert-alias diego-keystore“c:\users\diego\desktop\celuchat.keystore”“c:\openssl\bin\openssl.exe”sha1-binary“c:\openssl\bin\openssl.exe”base64 celuchat.keystore是我在导出签名的应用程序时使用的密钥库,当keytool

  • 我已经完成了一个android应用程序的开发,该应用程序使用facebook sdk与facebook集成。目前,我对这个应用程序没有任何问题需要解决,因为它功能齐全,运行良好——但尽管如此,我相信即使应用程序正在运行,我仍然不完全理解Android密钥散列是什么 1)据我所知,facebook sdk为开发者提供了一个独特的应用程序id,以了解他们与谁“交谈”,这样他们也可以控制谁是谁之类的人,

  • 在Google Play控制台中,您可以上传加密的应用程序签名密钥,将现有应用程序转换为使用Google managed应用程序签名:https://support.Google.com/googleplay/android-developer/answer/9842756?hl=en#zippy=%2Cexisting-apps 提供了3种不同的方法,它们都产生相同的加密密钥,但从不同类型的输入

  • 问题内容: 我正在建立一个网站,并试图决定如何加密用户密码以将其存储在SQL数据库中。 我意识到使用简单的md5(password)是非常不安全的。我正在考虑使用sha512(password.salt),并且我一直在研究生成有用盐的最佳方法。我阅读了许多文章,指出盐应尽可能地随机以增加哈希值的熵,这似乎是个好主意。但: 您需要将随机盐与哈希一起存储 鉴于攻击者以某种方式可以访问您的哈希密码(并试

  • 问题内容: 目前,据说MD5部分不安全。考虑到这一点,我想知道使用哪种机制进行密码保护。 这个问题,“双重哈希”密码是否比仅哈希一次密码安全? 建议多次散列可能是一个好主意,而如何对单个文件实施密码保护?建议使用盐。 我正在使用PHP。我想要一个安全,快速的密码加密系统。将密码哈希一百万次可能更安全,但也更慢。如何在速度和安全性之间取得良好的平衡?另外,我希望结果具有恒定数量的字符。 哈希机制必须

  • 我认为我理解散列和加盐密码,但似乎我有一些误解。我在nodejs为我的网站创建一个用户帐户系统。 我的理解是,当用户创建密码时,我们会生成一个随机盐,将其附加到密码中,然后散列该字符串。我们还可以添加一个工作因子以使散列工作缓慢并防御蛮力攻击。我们将盐与散列一起存储在我们的数据库中,为了验证登录尝试,我们使用存储的盐和尝试的密码重复上述过程(在服务器上),并检查散列是否匹配。 nodejs中的模块