【发布时间】:2013-10-13 03:57:31
【问题描述】:
客户端创建包含以下信息的哈希
- 请求网址
- 请求方法
密钥用于从该信息创建散列。他将此哈希与他的公钥一起发送到服务器,该服务器从数据库中检索客户端密钥。现在服务器创建自己的哈希,如果哈希匹配访问应用程序被授权。
但是当我添加
- 时间戳
到哈希。如何比较哈希服务器端?哈希值会有所不同,因为服务器会在几毫秒后创建哈希值。假设我只想在 30 秒内发出请求时信任客户端。
有什么想法吗?
【问题讨论】:
客户端创建包含以下信息的哈希
密钥用于从该信息创建散列。他将此哈希与他的公钥一起发送到服务器,该服务器从数据库中检索客户端密钥。现在服务器创建自己的哈希,如果哈希匹配访问应用程序被授权。
但是当我添加
到哈希。如何比较哈希服务器端?哈希值会有所不同,因为服务器会在几毫秒后创建哈希值。假设我只想在 30 秒内发出请求时信任客户端。
有什么想法吗?
【问题讨论】:
将时间戳与哈希一起传递,以便您计算哈希并将时间戳的值与当前时间进行比较,以验证您指定的 30 秒窗口。
【讨论】:
一种选择是,您的时间戳不使用毫秒或秒精度,而是使用 30 秒精度,即在 30 秒内,每个时间戳都是相同的。
因此,在发送请求后的 30 秒内,最多可能有 2 个时间戳。您可以简单地在服务器上计算两者并检查哈希是否匹配。
这里的缺点是会有 30 秒的范围 - 您将接受一些 60 秒前的请求并拒绝一些 31 秒前的请求。但是,如果您对此感到满意...(您还可以为时间戳设置更高的精度,但代价是必须计算更多的哈希值)。
而且对于每个请求都必须计算 2 个哈希值,显然会对性能产生影响。
【讨论】: