TIL: You shouldn't use == to compare HMACs, or anything sensitive really. Doing so
creates a timing side channel that can reveal the secret to an attacker. Instead you need to use a comparison function that takes a constant amount of time for all values, not matter how similar they are to the actual HMAC. The python example given in the article is:
def is_equal(a, b):
if len(a) != len(b):
return False
result = 0
for x, y in zip(a, b):
result |= x ^ y
return result == 0
This function is
available in python 3.3+ as:
hmac.compare_digest(a, b)
No comments:
Post a Comment