我有一个身份验证应用程序,不知道它有多安全。
这是算法。
1)通过使用SHA512哈希新的guid生成clientToken。我有大约1000个ClientsToken生成并存储在数据库中。
每次呼叫者调用我的Web服务时都需要提供clientToken,如果clienttoken在数据库中不存在,那么它就不是有效的客户端。
问题是暴力破解获取现有ClientToken需要多长时间?
答案 0 :(得分:1)
GUID是128位值,6位保持不变,因此总共有122位可用。由于这是您对哈希的输入,因此您的应用程序中不会有2 ^ 512个唯一哈希值。这大约是5.3 * 10 ^ 36值。
假设您的攻击者能够计算每秒1,000,000(10 ^ 6)个哈希值(我不确定SHA-512的哈希值是多么合理,但是在这个数量上,几个数量级不会影响那些许多)。这可以达到大约5.3 * 10 ^ 30秒来检查空间(作为参考,这将远远超出所有恒星变暗的时间)。此外,除非您有数十亿个客户,否则birthday attack可能不会从中删除太多的数量级。
但是,只是为了好玩,让我们说攻击者有一些技巧可以让他减少一半的哈希值(或者减少检查空间和增加速度的组合),或者你拥有那么多用户,或GUID生成器中的一些缺陷,或者你有什么。我们仍然看着超过1亿年发现碰撞。
我认为你已经超出了安全范围而且有些过度杀伤。另请注意,实际散列GUID不会执行任何操作,并且GUID可能不是通过安全随机数生成器生成的。实际上,通过平台使用的任何安全随机数生成器生成128位(16字节)的随机性并将其用作共享密钥会更好一些。