密码保护Java控制台应用程序的最佳方法

时间:2019-05-22 23:37:50

标签: java hash cryptography

我正在寻找一种最佳实践或标准方法来密码保护控制台应用程序。我研究了各种方法,并希望对我的方法有一些反馈。

我决定使用Argon2对密码进行哈希处理,以便只存储单向哈希值。一切都按预期进行。我的问题是哈希存储在哪里?应该硬编码吗?我应该将其存储在单独的文件中并读入吗?解决此问题的最安全方法是什么?归根结底,我正在编写此应用程序以进行学习,并且非常想学习以正确的方式进行操作。任何相关阅读材料的链接也将不胜感激。我继续谷歌...

编辑:那么,如果我将程序密码存储为文件中的哈希值,那么潜在的弊端是什么?用户必须知道密码才能使用该应用程序。然后让由散列保护的程序密码作为加密密钥来保护敏感信息吗?即使对源代码和/或哈希文件进行了操作,由于使用了正确的密码作为密钥,因此也无法读取敏感数据……我还缺少什么?

1 个答案:

答案 0 :(得分:0)

首先,Argon2是一种精细的密钥派生功能,用于将密码转换为加密密钥。

但是,如果您将Argon2哈希用作加密密钥,那么显然不要将其存储在磁盘上。如果将加密密钥存储在加密数据旁边,则可能根本不会加密。甚至有人会说这更糟,因为它给人一种错误的安全感。

没有密钥,正确加密的数据将毫无用处,因此您不必保护应用程序本身。只需询问密码,是否以及何时需要加密或解密。您可以考虑将散列保留在内存中一段时间​​,这样就不必反复要求它,而不必保留它。

例如,这正是GPG的工作方式。它不会在任何地方存储任何密码哈希。取而代之的是,它存储加密的私钥,并只是询问密码是否需要解密私钥。