Algorithm 在散列中包含时间戳,但是如何比较散列?

Algorithm 在散列中包含时间戳,但是如何比较散列?,algorithm,security,rest,Algorithm,Security,Rest,客户端创建包含以下信息的哈希 请求url 请求方法 密钥用于根据此信息创建哈希。他将这个散列和他的公钥一起发送到服务器,服务器从数据库中检索客户机的密钥。现在,服务器创建自己的散列,如果散列匹配,则访问应用程序被授权 但是当我补充 时间戳 到散列。如何比较服务器端的哈希值?由于服务器在几毫秒后创建哈希,因此哈希将不同。假设我只想信任在30秒内发出请求的客户机 有什么想法吗?将时间戳与散列一起传递,这样您就可以计算散列并将时间戳的值与当前时间进行比较,以验证指定的30秒窗口 将时间戳与散列

客户端创建包含以下信息的哈希

  • 请求url
  • 请求方法
密钥用于根据此信息创建哈希。他将这个散列和他的公钥一起发送到服务器,服务器从数据库中检索客户机的密钥。现在,服务器创建自己的散列,如果散列匹配,则访问应用程序被授权

但是当我补充

  • 时间戳
到散列。如何比较服务器端的哈希值?由于服务器在几毫秒后创建哈希,因此哈希将不同。假设我只想信任在30秒内发出请求的客户机


有什么想法吗?

将时间戳与散列一起传递,这样您就可以计算散列并将时间戳的值与当前时间进行比较,以验证指定的30秒窗口

将时间戳与散列一起传递,以便计算散列并将时间戳的值与当前时间进行比较,以验证指定的30秒窗口

一个选项是,不要使用毫秒或秒精度的时间戳,而是使用30秒精度,即在30秒内,每个时间戳都是相同的

因此,在发送请求后的30秒内,最多可能有2个时间戳。您只需在服务器上计算这两个值,并检查哈希值是否匹配

这里的缺点是会有30秒的时间范围-您将接受约60秒的旧请求,并拒绝约31秒的旧请求。但是,如果你对此感到满意。。。(时间戳的精度也可以更高,但代价是必须计算更多的散列)


对于每个请求,必须计算2个哈希值,这显然会对性能产生影响。

一个选项是,使用30秒的精度,而不是毫秒或秒的精度作为时间戳,也就是说,对于30秒,每个时间戳都是相同的

因此,在发送请求后的30秒内,最多可能有2个时间戳。您只需在服务器上计算这两个值,并检查哈希值是否匹配

这里的缺点是会有30秒的时间范围-您将接受约60秒的旧请求,并拒绝约31秒的旧请求。但是,如果你对此感到满意。。。(时间戳的精度也可以更高,但代价是必须计算更多的散列)


对于每个请求,必须计算2个哈希值,这显然会对性能造成影响。

yeah似乎是唯一一种方法,您可以选择不发送带有哈希值的时间戳,并尝试在当前时间的30秒内使用每个可能的时间戳计算每个可能的哈希值,但显然存在性能问题。是的,这似乎是唯一一种方法,您可以选择不发送带有哈希的时间戳,并尝试在当前时间的30秒内使用每个可能的时间戳计算每个可能的哈希,但是很明显,这里可能存在性能问题。客户端和服务器必须就当前时间达成一致。客户端和服务器也必须就当前时间达成一致。