is integer comparison in Python constant time? Can I use it to compare a user-provided int
token with a server-stored int
for crypto in the way I would compare strings with constant_time_compare
from django.utils.crypto
, i.e. without suffering timing attacks?
Alternatively, is it more secure to convert to a string and then use the above function?
The answer is yes for a given size of integer - by default python integers that get big become
long
and then have potentially infinite length - the compare time then grows with the size. If you restrict the size of the integer to actypes.c_uint64
orctypes.c_uint32
this will not be the case.Note that compare with 0 is a special case, normally much faster, due to the hardware actions many CPUs have a special flag for 0, but if you are using/allowing seeds or tokens with a values of 0 you are asking for trouble.