我正在创建一个处理用户名和密码的 C++ 类。
我试图在c ++中对一些基本但有效的做法进行一些研究来处理这些信息,因此它不能轻易地被别人找到,例如,扫描内存和变量来确定信息。
我所说的“基本”是指不需要做很多工作的东西;我不想对整个密码库、随机寻址系统甚至哈希函数进行编程。
另外,我假设最好不要将这些信息保留在变量中,并在不需要时立即将其删除?
编辑:
不,我不会将此信息保存到磁盘,只会将其保存在内存中的变量中。
编辑2:
该类与平台无关并使用 boost。
编辑3:
这是函数的声明:
void authenticate(const std::string & user, const std::string & pass);
任何基本技术都无法保护拥有调试器并可以访问内存的人的密码!
因此,最安全的方法是不存储密码,而仅存储密码的哈希值。有许多可用的实现,例如来自可信来源的this开源实现。
是的,当您不再需要变量时将其删除。 即:覆盖值,而不仅仅是销毁变量(如果你想真正安全起见,你可以在上面写入随机值,但这在这里太过分了):
如果是字符串,值得一提的是 VoidStars 的建议:
string pwd;
....
std::fill_n(&pwd[0], pwd.capacity()-1, 0xff); // really overwrite
免责声明:我是这个包的作者
github上有一个simple-password-manger库:
https://github.com/image357/password
它适用于Windows和Linux(32位和64位),并具有跨平台文件存储。 默认情况下,它将加密密码存储为文件和文件夹。但是,如果您只关心重置/登录用例,您也可以打开哈希存储。
它使用 AES256 加密和最先进的安全哈希算法 (Argon2)。您还可以启用恢复模式,这是有效的多密钥加密。如果您担心密码长度攻击,它还会采用数据填充。
此外,您可以启动 REST 服务来访问您的密码存储。