我正在尝试设计一个系统,该系统需要将用户的秘密值存储在数据库中(私钥和公钥字符串)。秘密的存储本身将在HashiCorp Vault的帮助下完成。但是我还有一个要求,即不允许存储两个相等的对(私钥+公钥)。 就我在存储之前无法检查密钥唯一性而言,我必须存储原始机密的哈希值。我的想法是从机密数据计算SHA哈希并将其与已保存的哈希进行比较。因此,我想知道它是否有效,是否可以将此摘要用作访问数据的外部ID(因为散列表示数据条目的唯一性)。希望对您有所帮助。
答案 0 :(得分:4)
我的想法是根据秘密数据计算SHA哈希并将其与已保存的哈希进行比较
我认为在没有其他唯一标识符的情况下,加密散列是最好的选择
(因为散列意味着数据条目的唯一性)
那是错误的假设。无论密码散列被设计为具有可忽略的冲突概率(两个输入具有相同哈希值的概率),原则上仍然存在(很小)概率。
对于受控(格式化)输入,我想说碰撞概率非常小,以至于您可以大胆地将散列用作唯一标识符,但是准备处理很少发生碰撞的情况(可能您可以将其发布并出名)
根据机密数据计算SHA哈希
关于安全性-很难(=不可能)根据其哈希值(假设当前认为加密哈希值很安全)来计算输入值
当心空间大小-如果您说1000个已知值,那么检查哪个秘密值具有一定的哈希值是很简单的。假设您存储密钥对,应该没问题