寻找安全,便携的密码存储方法

Mac*_*iek 2 c++ security

我正在研究应该在Win32和Linux上运行的C++项目,该软件将被部署到小型计算机上,通常在远程位置工作 - 每台机器可能包含它自己的用户/服务人员池.

最近,我们的客户要求我们通过密码保护引入访问控制.

我们要符合以下标准:

  • 支持远程登录
  • 支持远程密码更改
  • 支持远程密码重置EDITED
  • 支持意外/有目的的删除数据检索
  • 支持安全存储

我能够使用现有的库来满足"远程"需求,但我需要考虑的是一种存储这些数据的方法,最好是以一种既可以在两个平台上运行又不会让用户看到的方式/读它,加密不是问题 - 这是存储方法本身.

任何人都可以推荐一种可以帮助我满足这些标准的安全存储方法吗?

编辑

我们最初考虑使用便携式SQLite数据库,但我们感兴趣的是限制用户向数据访问数据.我们怎样才能做到这一点?(文件对用户不可见,文件无法由用户手动打开等)

编辑2

对于迄今为止的响应干杯,我们能否专注于限制文件本身访问的方法?加密不是问题.我们正在寻找的是隐藏和/或备份文件的方法,并且只允许"MyApp.exe"使用它.

到目前为止,我们还在研究备用NTFS流,但我们不确定这是否适用于Linux

Dea*_*vey 6

对于登录,您希望存储密码的迭代盐渍哈希,而不是密码本身.两种可能性是:

  • bcrypt - 改良形式的河豚,增加了工作因素
  • PBKDF2 - 来自PKCS#5规范的函数,它使用具有散列函数和随机盐的HMAC多次迭代密码.

但是,这不符合您的要求:

  • 支持远程密码检索

我希望你可以说服客户,他们真正的意思是重置密码,在这种情况下你仍然可以使用密码哈希.

  • 支持意外/有目的的删除数据检索

此要求难以解决,并且需要通过将加密密码存储在数据库中来削弱安全性,以便可以反转它们.为此,您应使用主密钥,使用AES/CBC或AES/CTR模式等密码随机IV加密每个密码.您应该定期重新生成主密钥并重新加密所有密码.然后,您将需要一种机制来确定何时允许密码检索(例如母亲的婚前姓名等)

要使用密码加密数据,请使用PKCS#5中的PKDF2函数从密码生成密钥.