c++ 密码处理安全实践?

问题描述 投票:0回答:2

我正在创建一个处理用户名和密码的 C++ 类。

我试图在c ++中对一些基本但有效的做法进行一些研究来处理这些信息,因此它不能轻易地被别人找到,例如,扫描内存和变量来确定信息。

我所说的“基本”是指不需要做很多工作的东西;我不想对整个密码库、随机寻址系统甚至哈希函数进行编程。

另外,我假设最好不要将这些信息保留在变量中,并在不需要时立即将其删除?

编辑:

不,我不会将此信息保存到磁盘,只会将其保存在内存中的变量中。

编辑2:

该类与平台无关并使用 boost。

编辑3:

这是函数的声明:

void authenticate(const std::string & user, const std::string & pass);
c++ encryption cryptography passwords
2个回答
3
投票

任何基本技术都无法保护拥有调试器并可以访问内存的人的密码!

因此,最安全的方法是不存储密码,而仅存储密码的哈希值。有许多可用的实现,例如来自可信来源的this开源实现。

是的,当您不再需要变量时将其删除。 即:覆盖值,而不仅仅是销毁变量(如果你想真正安全起见,你可以在上面写入随机值,但这在这里太过分了):

如果是字符串,值得一提的是 VoidStars 的建议:

 string pwd; 
 ....
 std::fill_n(&pwd[0], pwd.capacity()-1, 0xff);  // really overwrite

0
投票

免责声明:我是这个包的作者

github上有一个simple-password-manger库:
https://github.com/image357/password

它适用于Windows和Linux(32位和64位),并具有跨平台文件存储。 默认情况下,它将加密密码存储为文件和文件夹。但是,如果您只关心重置/登录用例,您也可以打开哈希存储。

它使用 AES256 加密和最先进的安全哈希算法 (Argon2)。您还可以启用恢复模式,这是有效的多密钥加密。如果您担心密码长度攻击,它还会采用数据填充。

此外,您可以启动 REST 服务来访问您的密码存储。

© www.soinside.com 2019 - 2024. All rights reserved.