使用内存位置的哈希作为标识符是否安全?



我根据类的某些对象的内存位置(在本例中为来自 vapor swift 的 websocket 对象(生成哈希。

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

或:

ObjectIdentifier(webSocket).hashValue

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

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

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

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

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

最新更新