0

I have an authentication application and don't know how secure it is.

here is the algorithm.

1) A clientToken is generated by using SHA512 hash a new guid. I have about 1000 ClientsToken generated and store in the database.

every time the caller calling my web service it need to provide the clientToken, if the clienttoken does not exists in the database, then it is not valid client.

The problem is how long does it take to brute force to get the existing ClientToken?

4

1 回答 1

1

GUID 是一个 128 位的值,其中 6 位保持不变,因此总共有 122 位可用。由于这是您对哈希的输入,因此您的应用程序中不会有 2^512 个唯一的哈希。这大约需要检查 5.3*10^36 个值。

假设您的攻击者能够每秒计算 1,000,000 (10^6) 个哈希值(我不确定这对于 SHA-512 有多合理,但在这种大小下,几个数量级不会对事情产生太大影响)。这大约需要 5.3*10^30 秒来检查空间(作为参考,这将远远超过所有星星都变暗的时间)。此外,除非您有数十亿客户,否则生日攻击可能不会从中消除太多数量级。

但是,只是为了好玩,假设攻击者有一些技巧可以让他将要检查的哈希数量减少一半(或减少检查空间和提高速度的某种组合),要么是你拥有这么多用户,要么是一些缺陷在你的 GUID 生成器中,或者你有什么。我们仍在寻找超过 1 亿年的时间来寻找碰撞。

我认为你已经超出了安全范围,进入了有点矫枉过正的领域。另请注意,对 GUID 进行散列实际上没有任何作用,并且 GUID 可能不是通过安全随机数生成器生成的。实际上,通过您的平台使用的任何安全随机数生成器生成 128 位(16 字节)的随机性,并将其用作共享机密,您实际上会好一些。

于 2013-09-25T16:02:03.920 回答