首页 > 解决方案 > 使用秘密值的 SHA 哈希作为其外部 ID 是否安全?

问题描述

我正在尝试设计需要将用户的秘密值存储在数据库中的系统(私钥和公钥字符串)。机密本身的存储将在 HashiCorp Vault 的帮助下完成。但是我还有一个要求不允许存储两个相等的对(私钥+公钥)。至于我无法在存储之前检查密钥的唯一性,我必须存储原始秘密的哈希值。我的想法是从秘密数据中计算 SHA 哈希并将其与已保存的哈希进行比较。所以,我想知道它是否可行,我是否可以将此摘要用作访问数据的外部 ID(因为哈希意味着数据条目的唯一性)。希望得到您的帮助。

标签: encryptioncryptographyshasecret-keyhashicorp-vault

解决方案


我的想法是从秘密数据中计算 SHA 哈希并将其与已保存的哈希进行比较

当没有其他唯一标识符时,我认为加密哈希是您拥有的最佳选择

(因为散列暗示了数据条目的唯一性)

这是错误的假设。不管密码散列被设计成具有可忽略的冲突概率(两个输入具有相同散列值的概率),原则上仍然存在一些(非常小的)概率。

对于受控(格式化)输入,我会说碰撞概率非常小,您可以大胆地使用哈希作为唯一标识符,但准备处理发生碰撞的极少数情况(可能您可以发布它并成名)

从秘密数据计算 SHA 哈希

关于安全性 - 根据其哈希计算输入值非常困难(=不可能)(假设加密哈希当前被认为是安全的)

注意空间大小——如果你有 1000 个已知值,检查哪个秘密值具有一定的散列是很简单的。假设您存储密钥对,应该没问题


推荐阅读