如何在您的应用程序中安全地处理密码

Kam*_*Kam 6 c++ security passwords

我在这里找到了一个类似的问题在一个应用程序中保存密码,但它并没有真正回答我的担忧.

我正在处理一个从用户那里(安全地)接收密码的应用程序.一旦我收到密码,我就需要将它存储在一些变量中并通过事务将其发送到其他系统(这种逻辑安全可靠且已经实现).

我担心的是我不希望能够在核心转储中看到密码,因此我想在将密码保存到任何变量之前对其进行加密.

问题:

  • 在将它保存到变量之前加密吗?还是我错过了一些安全漏洞?

  • 是否只有一个简单的标题库可以进行加密?你能引导我到我可以开始寻找的地方吗?

回答评论者的注意事项:

  • 密码不会长期存储; 仅适用于交易的生命周期.

  • 不幸的是,交易的参与者无法解密密码,因此我需要在将密码发送给他们之前对其进行解密.

  • 我现在主要关注的是找到一种在本地加密和解密密码的方法 - 以一种简单的方式......

  • 我找到了OpenSSL库和crypto ++,但它需要与它们链接,我不能只包括并调用它们(即不是只有标题库)...

谢谢,

yzt*_*yzt 2

(注意:我确信有关于如何处理安全软件中的密码的严格清单和官方指南,这些指南来自真正了解安全性的人和当局。这不是其中之一!)

我认为没有一种加密安全的方法可以在进程内存中保存密码,能够使用它们,但不能向可以在调试器下运行应用程序或检查核心转储的用户授予访问权限。

你能做的就是隐藏密码。以下是您可以使用的一些技巧:

  • 不要将密码作为简单的字符串保存在内存中的任何位置(将字符分散等)
  • 使用后清理存储密码的所有变量(例如,如果将密码传递给函数,则应在使用完密码后在函数内将该变量的所有字符设置为 NUL。
  • 加密密码。
  • 每次运行应用程序时改变加密密钥(如果是长时间运行的应用程序,则定期改变加密密钥)。
  • 根据系统/硬件的某些方面按程序生成加密密钥,并且不要将密码的加密密钥存储在进程内存中的任何位置。
  • 如果可用,请使用受信任平台模块 (TPM) 等硬件。

一致且有效地实现上述内容非常困难,并且会影响所有处理密码的代码。有时,您甚至必须故意使代码更加晦涩,违背您作为程序员的所有本能(例如,不将密码作为参数传递给函数,而是在函数内使用硬编码地址。)

我必须再次强调,当对手拥有对物理机器的完全访问权限时,仅通过软件来保护您的密码可能是不可能的。

至于你问题的第二部分,我不知道有任何仅标头的加密库,但加密密码可能只需要一个密码和一个哈希值。所有最好的算法都有公共领域或其他自由的实现方式。您可以获取其中之一并将其复制/粘贴到您自己的应用程序中。但不要忘记认真测试一下!