首页 > 解决方案 > 使用内存位置的哈希作为标识符是否安全?

问题描述

我根据它们的内存位置为类的某些对象生成一个哈希(在这种情况下,是来自 vapor swift 的 websocket 对象)。

Unmanaged.passUnretained(webSocket).toOpaque().hashValue

或者:

ObjectIdentifier(webSocket).hashValue

https://stackoverflow.com/a/41666807/10551293(关于如何获取对象的内存位置的答案)

我想我会用这个作为标识符(最终用户可以查看这个)。这是否打开了攻击的可能性?

标签: swiftsecurityhash

解决方案


Swift 专门为此目的提供了一个工具:ObjectIdentifier().

它的散列包括一个每次启动的随机种子,专门用于挫败基于散列的攻击。即使攻击者对哈希进行暴力破解(这本身就是一个重要但可能并非不可能的问题),它也不会揭示内存中的实际位置。这应该是一个安全的标识符。

但一定要使用ObjectIdentifier. 如果将来发现攻击,那就是可以缓解的 API。


推荐阅读