Как всегда сравнивать две строки, возможно, разной длины в постоянное время? - PullRequest
0 голосов
/ 03 мая 2019

Я уже читал об этой теме в интернете, но смог найти способы, при которых он работал только для 2 строк одинаковой длины. В большинстве случаев это выглядело примерно так:

string userinput;
string password;
int falsekey = 0;

if(userinput.length != password.length){
    return 1;
}

for(i = password.length-1; i>=0; i--){
    falsekey |= userinput[i] ^ password[i];
}
return falsekey; 

Но это имеет только сравнение строк с постоянным временем, если две строки имеют одинаковую длину. Поэтому, если кто-то ищет длину правильного пароля, вы можете легко найти его с помощью временной атаки.

Я пытался придумать, как это исправить. Может быть, посмотрев на длину пользовательского ввода.

Если эта длина меньше длины пароля, добавьте случайные символы в строку ввода пользователя, пока она не будет иметь такую ​​же длину пароля, а затем запустите цикл for в коде. Если эта длина превышает длину пароля, удалите символы из строки ввода пользователя, пока она не будет иметь такую ​​же длину пароля, а затем запустите цикл for в коде.

Но тогда я думаю, что возникнет проблема, потому что в редких случаях, путем добавления случайных символов, программа может случайно добавить те символы, которые дают пользователю правильный ввод, хотя он был неправильным ...: /

Но как еще эта работа может иметь две разные длины?

1 Ответ

1 голос
/ 03 мая 2019

В криптографии вам нужно сравнение строк с постоянным временем , если вы, например, сравните криптографические ключи (чтобы предотвратить временные атаки ), но на самом деле это не с паролями , если все сделано правильно. Это потому, что пароли не должны храниться в оригинальной форме.

Вместо этого сохраняется вычисленный хэш пароля, и затем выполняется проверка путем вычисления хэша для предоставленного пароля и сравнения с сохраненным хэшем пароля. Это сравнение с сохраненным хешем пароля не показывает никакой информации о длине исходных паролей .

Различные методы используются для предотвращения получения паролей, даже если у вас есть доступ к сохраненным хэшам паролей, включая односторонние хеши , хеширование и использование медленных хешей для противодействия угадыванию пароля с использованием грубой силы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...