Основной способ сравнения строк - сравнивать одну пару символов за раз: сравнивать первый символ первой строки с первым символом второй строки, а затем вторые символы, затем третий и т. Д.,Как только вы найдете пару, которая не соответствует, вы узнаете , не изучая остальную часть строки , что строки не равны.Если все пары равны, строки равны.В качестве дополнительной оптимизации вы можете начать со сравнения длин строк - если они не одинаковы, они не равны, и вам даже не нужно сравнивать символы.
Этовероятно, что делает ==
, и проблема безопасности заключается в оптимизации скорости, когда он прекращает сравнение, когда находит пару, которая не совпадает.Атакующий может попробовать пароли axxx
, bxxx
, cxxx
и т. Д., И, попробовав 1xxx
, они заметят, что сравнение занимает немного больше времени, поскольку ==
теперь проверяет второйпара символов тоже, потому что первая пара символов совпадает.Теперь они знают, что первый символ пароля - 1
.Решение: всегда сравнивайте все пары символов, даже после того, как вы определили, что строки не равны (и не сравнивайте длину строк; всегда выполняйте столько сравнений символов, сколько символов впредоставленный пароль - короче, старайтесь не раскрывать никакой информации о действительном пароле).