处理nonce的理想结构是什么?

时间:2015-03-20 20:03:35

标签: c#

我想跟踪nonces的......。它应该跟踪nonce值和到期日期。该结构应该允许快速查找随机数,如字典,但允许合理有效的清理,例如,弹出过期的随机数并在不再需要弹出它们时停止。您有什么推荐的吗?到期黑客(例如,有限大小的旋转缓冲区)也很好。

1 个答案:

答案 0 :(得分:5)

如果没有关于典型使用模式的进一步信息,由包含过期值作为值的随机数键入的字典以及对当时到期的一组随机数的执行时间的反向查找似乎最有效。

如果您对nonce的生命周期以及该生命周期中的阶段有所了解,通常会访问它们,而使用以下策略可能更有效:

  • 拥有代表到期时间范围的存储桶。
  • 在每个存储桶中,有一个由nonce键入的字典,其值为到期时间。
  • 当nonce进来时,请先在最近的存储桶中查找。如果没有,请按到期顺序检查其他存储桶。
  • 如果您在存储桶中找到nonce,请确认它的到期日期尚未过去。
  • 清理就像处理超过允许的nonce持续时间的存储桶一样简单。

此解决方案的缺点是您可能会检查多个存储桶以查找给定的随机数,并检查每个存储桶是否存在无效的随机数。优点是您可以避免从过期日期到过期的nonce列表的需要,以便进行有效的清理。要调整存储桶大小(根据时间跨度),您应该知道在nonce的生命周期中何时可能会使用它。

请注意,如果nonce验证需要在服务器重新启动或在服务器场中工作后继续存在,那么您将需要某种形式的永久存储(例如数据库)。你仍然会使用相同的策略。