假设我想从某人那里收到一个敏感号码(例如银行帐户详细信息)。通过电话分享该号码,然后发送一封包含该号码的 SHA-256 哈希值的电子邮件以确保该号码被正确复制,这样安全吗?我认为在电子邮件中说明该号码是什么不是一个好主意(因为这样可能会大大缩小映射到该哈希值的内容数量)。
答案1
因为这样大概就会大大缩小映射到该哈希值的事物的数量
这已经意味着原始数字(例如帐户详细信息)没有足够的熵,并且您不应该依赖于不知道这些有关该数字的详细信息的人(通过模糊性实现安全性)。
如果您告诉对方号码和一些随机字符串(使其足够长以具有足够的熵),然后向他们发送一封包含整个组合的 SHA-256 的电子邮件,例如<number>.<random-string>
(基本上类似于散列密码中的盐的想法),这样会更安全。
更新
但是你如何分享随机字符串呢?
您通过电话分享随机字符串以及号码。不是将随机字符串放入电子邮件中,这样就会失去目的。
更新 2
经过进一步思考,随机字符串需要具有与 SHA-256 哈希相似的熵才能有效。在这种情况下,通过电话发送哈希(而不是随机字符串)会更容易,并且完全不需要电子邮件。更简单的是,在这种情况下,现在您不需要加密安全哈希,任何简单的纠错码都可以(正如其他人提到的,银行帐号通常内置了一些校验和,但如果您需要更安全地防止意外错误,您可以添加更多校验和)。
答案2
我确实想知道这是否是一个 XY 问题(即,询问一种安全的方式来传达数字不是更好吗)。
发送数字哈希值的安全性取决于数字的大小和随机性。如果哈希值足够小,则某些人可以暴力破解该数字。
不过,还有另一种可能——你在电话里说出了电话号码。有多少人有权以未加密的方式获得该通信——我认为,比起知道端到端加密电子邮件的人,你拥有的权限要多得多。
具备检查哈希值知识的人大概也具备使用 PGP 或安全电子邮件客户端或 https 网页(即使用公钥加密进行通信)的知识 - 这肯定是您的答案?否则像 Signal messenger 这样的程序呢?
答案3
您可以尝试使用密码加密电子邮件,或尝试对其进行模糊处理,但您仍然需要一种方法来告诉对方如何从电子邮件中恢复原始哈希值。另一种选择是使用 Base64 或其他方法对消息进行编码,这样随机的人就不会立即看到对消息做了什么,但不需要额外的信息来恢复编码。