我正在使用Haskell Codec.Crypto.SimpleAES包创建一个简单的密码管理器。密码管理器似乎是安全的,但当解密密钥无效时,它无法警告用户。如果用户提供了一个错误的解密密钥,程序只会发送回垃圾,而不是“无效解密密钥”错误。
当提供了一个错误的解密密钥时,我想给用户一个错误。我能想到的最简单的方法是在密码管理器初始化时散列解密密钥并将其保存在本地文件中。从那时起,每当用户请求密码时,程序将根据哈希值检查提供的解密密钥,然后调用解密算法。如果密钥与哈希不匹配,程序将发回错误,但如果密钥匹配,程序将解密请求的密码并将其发回给用户。
如果密码管理器将解密密钥的散列实例存储在本地文件中,这会大大降低安全性吗?
发布于 2019-07-27 23:07:00
您正在寻找的是所谓的关键检查值(KCV)。
通过加密欧洲央行模式中的零字节块(与密码的块大小相同的空字节数)来创建一个KCV,然后将输出的前三个字节保存为一个6个字符的十六进制字符串,例如A1B2C3。
将来,您可以通过执行相同的KCV算法来测试密钥;如果字节未损坏,它将产生相同的KCV。这种方法经常被用来验证高安全性的密钥,而这些密钥是由快递员在纸面上传递的。
该输出被故意限制为不包含足够的数据来显示有关密钥的重要信息。通过不使用散列,它不会因为哈希算法中未知或不可预见的弱点而冒暴露风险。
https://security.stackexchange.com/questions/214182
复制相似问题