Эквивалентная длина хешей и паролей
Еще один момент касается соизмеримой длины паролей и хешей.
Дело в том, что длина паролей в Oracle может достигать 30 знаков, а длина хеша фиксирована и равна 8 байт, т.е.64 бита. Таким образом, на одно хеш-значение приходится приблизительно 1052/1019=1033 возможных паролей в Oracle.
Давайте прикинем эффективную длину пароля, в зависимости от длины хеш-значения. Возможных значений хеш-функции 264, следовательно, надо решить уравнение 57х=264. В результате получаем х≈11. Этот факт показывает, что практически для всех паролей длиной больше 11 знаков будет существовать более короткий пароль. Следовательно, в результате силовой атаки злоумышленник обнаружит один из кратчайших паролей. Но, поскольку хеш короткого и длинного паролей одинаковы, то пароли можно считать неразличимыми. Следовательно, при длине пароля более 11 знаков увеличение длины пароля не увеличивает время безопасности СУБД, т.е. необходимое злоумышленнику для его нахождения.
Интересно также узнать, а что если Oracle решит отказаться от принудительного преобразования символов к верхнему регистру, то, как это повлияет на эффективную длину? Оказывается в этом случае х≈10! Разница всего в 1 знак.
Для современных хеш-функций минимальная длина хеш-значения обычно находится на уровне 128 бит. Что в этом случае?
А в этом случае 2128 ≈ 5722 ≈8320, что означает, что для хеш-значений 128-битовой длины потребуется 22 знака из 57-знакового множества, либо 20 знаков для 83-знакового (т.е. 20 знаков, если отказаться от преобразования к верхнему регистру).
Ну и, наконец, 30-символьному паролю должен соответствовать хеш длиной
- 175 бит, если сохраняется Upper() (57 знаков);
- 191,25 бит, если отказаться от Upper() (83 знака).