我正在尝试创建一个时间限制键,以便在我的某个应用程序中使用。该密钥用于解锁应用程序中的某些功能。
到目前为止,我的想法是
生成: 加密哈希我需要的各种信息+密钥生成日期
验证: 加密哈希我需要的各种信息+现在约会
如果所有信息都相同且日期相同,我会得到相同的值
但是,
这意味着密钥只能在特定日期使用。我想要的是一个在接下来的24小时内有效的密钥(或延长这个,几天/周/月)。
我可以延长期限,但总是有可能在期限到期之前生成密钥,例如月份密钥的月份的最后一天。
首先,这是一种可以接受的方式吗?如果是这样,我该怎么做?
我知道将时钟“缠绕”会打败系统 - 但我仍然有兴趣获得一些意见
我已阅读How do I generate a time limited key or password without storing data,这是一个类似的问题。
答案 0 :(得分:5)
您可以将令牌的到期日期作为部分,并使用类似HMAC的MAC对整个数据进行身份验证:
token = data ":" expiration ":" HMAC(key, data ":" expiration)
要验证令牌,您只需要比较给定的到期数据,并使用秘密键为提供的数据重新生成MAC >
如果任何提供的参数被篡改,则MAC将不同,因为需要秘密密钥来生成真实的MAC。