我尝试创建一个带有过期时间的令牌,以确保客户端(在Web应用程序中)只能访问指定的时间。
我喜欢https://www.keycdn.com/support/secure-token/
之类的东西我看到前面提到的令牌是从Hash函数(MD5)创建的,消化带有(PATH + SECURETOKEN + TIME)的消息,实际上,我猜,PATH + SECURETOKEN只能在一个变量中合并,说SECURE_CODE。
我怀疑在服务器中,当发出请求时会解析URL,解析令牌并验证到期时间。
最后,我的问题是:
考虑hash = MD5(SECURETOKEN + TIME),一旦我有SECURETOKEN,是否可以解密哈希?如果不是,时间验证令牌有多大用处?
提前致谢!
答案 0 :(得分:2)
您无需解密令牌以验证它是否正确 - 您只需使用相同的密钥重新计算它,并检查生成的令牌是否相同。
事实上,生成(和验证)此类令牌的推荐方法是使用消息身份验证代码,例如HMAC(在内部使用哈希,但是这样做可以抵抗某些潜在的攻击)。您可以提供您的密钥令牌密钥作为HMAC的密钥输入,以及您希望使用令牌验证的数据(在这种情况下,路径和到期时间)作为消息。虽然KeyCDN使用的 ad hoc “连接和哈希”结构可能适用于此特定目的,但它缺乏广泛的安全性分析和HMAC的冗余安全功能,可以容易受到攻击,例如如果验证码碰巧错误地接受格式错误的到期时间戳。
此外,在新系统中,您确实应该使用除MD5之外的其他哈希函数。虽然MD5在HMAC中使用时仍然被认为是安全的(或者在仅需要不可逆性而不是抗冲击性的其他应用中),但是已知的实际攻击使得它对于某些其他目的而言是完全不安全的。一个更新,更安全的哈希函数,如SHA-2或SHA-3,将是一个更安全的选择。