gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:43:49 25 4
gpt4 key购买 nike

我在这里发现了一个类似的问题Saving passwords inside an application但它并没有真正解决我的担忧。

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

我担心的是我不想在核心转储中看到密码,所以我想在将任何密码保存到任何变量之前对其进行加密。

问题:

  • 在将其保存到变量之前对其进行加密就足够了吗?还是我遗漏了一些安全漏洞?

  • 是否有可以进行加密的简单 header 库?你能指导我从哪里开始寻找吗?

回答评论者的注意事项:

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

  • 不幸的是,交易的参与者无法解密密码,因此我需要先解密再发送给他们。

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

  • 我找到了 OpenSSL 库和 crypto++,但它似乎需要与它们链接,我不能只包含并调用它们(即不是仅 header 库)...

谢谢,

最佳答案

(注意:我敢肯定,关于如何处理安全软件中的密码,有严格的 list 和官方指南,来自真正了解安全的人和当局。这不是那些!)

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

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

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

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

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

至于你问题的第二部分,我不知道有任何header-only 加密库,但加密密码可能只需要一个密码,可能只需要一个散列。所有最好的算法都有公共(public)领域或其他免费的野外实现。您可以获得其中之一并复制/粘贴到您自己的应用程序中。不要忘记认真测试它!

关于c++ - 如何在您的应用程序中安全地处理密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17068818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com