【发布时间】:2019-10-09 12:01:27
【问题描述】:
我正在寻找密码保护控制台应用程序的最佳实践或标准方法。我研究了各种方法,希望对我的方法有一些反馈。
我决定使用 Argon2 对我的密码进行哈希处理,这样我只需要存储单向哈希。一切都按预期工作。我的问题是我在哪里存储哈希?它应该是硬编码的吗?我应该将它存储在一个单独的文件中并读入吗?解决此问题的最安全方法是什么?归根结底,我正在编写此应用程序来学习,并且非常想学习以正确的方式进行操作。任何相关阅读材料的链接也将不胜感激。我继续谷歌...
编辑:那么,如果我将程序密码作为哈希值存储在文件中,那么潜在的缺点是什么。用户必须知道密码才能使用该应用程序。那么让被哈希保护的程序密码作为加密密钥来保护敏感信息呢?即使源代码和/或哈希文件被操纵,敏感数据也将无法读取,因为正确的密码被用作密钥......我错过了什么?
【问题讨论】:
-
我假设您的控制台应用程序访问了一些存储在本地文件中的数据。在这种情况下,您的重点应该放在加密(和完整性)而不是身份验证上。否则,有什么办法可以阻止某人通过其精美的身份验证绕过您的控制台应用程序并直接访问文件?这就像锁上门,但让窗户开着。加密可以基于密码,并且某些模式提供完整性检查,以便您也可以检测加密数据的更改。
-
另外,散列很好 - 但盐和散列更好:) 编辑添加:哦,我看到 Argon2 包含盐 - 都很好!
-
谢谢,埃里克森。您假设最终目标是保护我存储在文件中的数据是正确的。这些数据的一部分将是敏感数据,我计划对其进行加密。其中一些数据需要解密并呈现给用户。我想我的想法是通过密码保护应用程序,这将防止有人启动它并从程序内部读取数据。
-
最终你无法解决这个问题。如果您的应用程序在用户计算机上运行,则用户控制您的程序所做的一切。提取和/或确定您的加密密钥相对简单。如果这只是用于玩具程序或其他不那么重要的东西,那么您的方法可能没问题。如果这需要真正的安全性 - 那么这种方法无论如何都不够。
标签: java hash cryptography