【问题标题】:How to store user sensitive information locally? [closed]如何在本地存储用户敏感信息? [关闭]
【发布时间】:2014-08-21 09:31:40
【问题描述】:

我正在开发一个应用程序,它要求用户输入他的帐户名和密码,以便登录在线论坛等。

请注意,实际上并没有通过我的应用程序在 Internet 上传输任何数据,我只是连接到特定的服务器。我正在使用HtmlUnit 获取论坛链接,获取正确的登录表单,填写数据并提交。网络上的实际数据中继由第三方公司管理。

现在到实际问题:

一些用户希望能够保存他们的凭据,这样他们就不必在启动应用程序时重新输入这些凭据。

我将他们的凭据保存到一个.txt 文件中,我使用Password Based Encryption with MD5 and DES algorithmstatic passwordstatic salt 对其内容进行加密。我主要对这些文件进行加密,因此如果他们不小心将此文件发送给某人,他们将无法如此轻松地获取该信息,并希望避免麻烦。

据我了解,由于我是密码学的菜鸟,因此使用硬编码盐和硬编码密码并不是一种非常安全的技术,但是当我在本地保存数据时可能就足够了。 我在这里吗?

.txt 文件也是存储此类数据的安全方式吗?如果没有,你有什么建议?

【问题讨论】:

  • 我认为只要数据本身经过加密和哈希处理就可以了。现在反转散列你不能真正做到(或应该能够做到)。所以使用一些只有你知道或你的程序可以计算的盐的加密算法。
  • 最好在security.stackexchange.com上提问。
  • 如果你想自己动手做些有趣或教育的事,很酷。如果没有,有图书馆可以为你做这些事情。 Jasypt 就是这样一个库。
  • 任何有权访问您的应用程序的人都可以提取密码、获取加密文件并对其进行解密,从而读取用户的明文凭据,对吗?
  • @DavidConrad 假设他们可以访问其他用户的文件,那么是的,但这意味着他们的系统已经受到威胁。我将每个文件本地存储在用户的机器上。此文件从不通过互联网中继,仅在加密/解密时访问。

标签: java encryption passwords user-data sensitive-data


【解决方案1】:

如果您担心用户可能会不小心将文件发送给其他人,那么使用更强大的算法(如 AES 256)可能会更好地加密。

【讨论】:

  • 再次抱歉,在密码学方面我完全是个傻瓜,AES 是否仍然使用密钥来加密/解密我必须在我的应用程序中硬编码的数据?如果攻击者拿到文件,他仍然可以使用简单的解密工具。我看不出你的建议在哪里有用。请赐教。
  • 我不确定我是否理解应用程序的操作:如果访问 .txt 文件,每次都用于填充用户凭据,加密内容仍然可以填充字段(通过服务器上的 ASP 解密)。如果.txt 文件是为了方便用户,不直接由应用程序访问,他们可以将密码存储在其他地方(安全保险库、其他设备等)。 MD5 wiki 提到破坏其加密 (en.wikipedia.org/wiki/MD5),DES (en.wikipedia.org/wiki/EFF_DES_cracker) 也是如此。我相信 AES 256 更强大(请参阅 en.wikipedia.org/wiki/Advanced_Encryption_Standard)。
【解决方案2】:

在我看来,您的解决方案已经足够好了。此信息是否经过高度加密位于用户计算机中,只有在他的系统受到威胁时才能被盗,在这种情况下,无论您存储它的安全性如何,即使您不安全,也有许多其他获取此密码的方法根本不存储它。

我要添加的唯一安全层是确保不能将此凭据文件简单地复制到装有您的软件的另一台计算机并从那里使用。为了防止您可以在 salt 中包含系统规格,例如分区序列号等。

【讨论】:

  • 据我所知,硬盘序列号并不是完全唯一的,但是找到两个具有相同序列号的磁盘是相当罕见的。这是个好主意,谢谢。
  • 废止最后的评论,我刚刚意识到你在谈论操作系统分配给磁盘的序列号,而不是磁盘固件中编码的序列号。再次感谢您。
  • 更好的是,使用主以太网适配器的 MAC 地址。它似乎是最近流行的硬件参考。不知道你是怎么得到它的。
猜你喜欢
  • 1970-01-01
  • 2012-12-26
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 2015-05-03
  • 1970-01-01
  • 2017-05-20
  • 2014-08-28
相关资源
最近更新 更多