生成增加的Nonce

时间:2017-01-18 11:53:33

标签: python nonce

到目前为止,在使用API​​进行身份验证时,我使用它来生成一个简单的nonce

def nonce():
    return str(int(time.time()) * 1000)

It has now been pointed out to me,这并非完全安全,因为time.time()可能会倒退:

>>> import time
>>> time.get_clock_info('time').monotonic
False

我如何改为生成nonce呢? 我的第一个猜测就像使用randint,但由于我需要确保nonce总是在增加,所以我不确定如何确保这一点,而不为将来保存变量{ {1}}代 - 或者这是不可挽回的?

1 个答案:

答案 0 :(得分:1)

如果系统时钟在您下面更新,

time.time将只会后退 - 因为DST不适用于秒 - 自 - 纪元,这应该永远不会发生在使其时钟保持最新的系统上使用ntp。

A * nix特定的解决方案是在启动时添加一个检查,以确保ntpd在生成它的第一个nonce之前正在运行。一旦运行,ntpd将不会将时钟转回(它只会让它比每秒1秒慢一点),所以这可能是你的充分保证。

这完全取决于你的情况以及对风险和安全权衡的兴趣,但我认为这是一个学术问题,而不是一个实际问题。