Глава 22. Хранение секретов
валентно увеличению размера пароля на 20 бит. Чем больше значение
r
, тем
больший выигрыш в размере пароля мы получаем.
Теперь посмотрим на эту ситуацию с другой стороны. Параметр
r
не дает
злоумышленнику извлечь пользу из появления высокоскоростных компьюте-
ров, поскольку с увеличением мощности компьютеров возрастает и значение
r
. Это нечто наподобие компенсатора закона Мура (Moore’s law), но толь-
ко в долгосрочной перспективе. Через 10 лет злоумышленник может вос-
пользоваться технологией следующего десятилетия, чтобы взломать пароли,
с которыми мы работаем сегодня. Поэтому нам все еще нужно обеспечивать
приличный уровень безопасности и использовать пароли, которые содержат
большое количество энтропии.
Это, между прочим, еще один аргумент в пользу применения протоко-
ла согласования ключей с прямой безопасностью. Каким бы ни было наше
приложение, вполне вероятно, что закрытые ключи пользователя А будут
защищены паролем. Через 10 лет у злоумышленника появится возможность
определить пароль пользователя А. Но если ключ, зашифрованный с помо-
щью пароля, применялся только для запуска протокола согласования клю-
чей с прямой безопасностью, тогда, даже взломав ключ, злоумышленник не
узнает ничего ценного. К тому времени ключ пользователя А больше не будет
действительным (он давным-давно устареет), а знание его старого закрыто-
го ключа никак не поможет раскрыть ключи сеанса, которые применялись
10 лет назад.
Наличие соли мешает злоумышленнику сэкономить свои усилия, когда
он пытается одновременно взломать большое количество паролей. Предпо-
ложим, что у системы есть миллион пользователей. Каждый из них хранит
на диске файл со своими ключами, зашифрованный с помощью растянутого
пароля соответствующего пользователя. Если бы мы не использовали соль,
злоумышленник мог бы атаковать систему следующим образом: взять пароль
p
, вычислить растянутый ключ
K
и попытаться расшифровать каждый из
этих файлов с помощью
K
. Для каждого пароля значение функции растяги-
вания нужно подсчитать только один раз, а полученный ключ может быть
использован злоумышленником, чтобы попытаться расшифровать сразу мил-
лион файлов.
Добавляя к функции растягивания соль, мы делаем описанную ситуа-
цию невозможной. Все значения соли — случайные числа, поэтому каждый
пользователь будет применять свою соль. Теперь злоумышленнику придется
подсчитывать значение функции растягивания не для каждого пароля, а для
каждой комбинации “пароль-файл”. Это потребует от него намного б´ольше
усилий, а для пользователей системы расходы окажутся незначительными.
Какого размера должно быть значение соли? Мы не будем отвлекаться на
подробный анализ этого вопроса. Возможно, вам хватит и 128-битового зна-
22.3. Портативное хранилище
375
чения (если система не допускает проведения атак, в основе которых лежит
парадокс задачи о днях рождения), но зачем экономить на таких мелочах?
В наше время биты очень дешевы, и использование 256-битового значения
соли удовлетворит любые потребности.
Кстати, будьте очень внимательны, используя соль и растягивание. Од-
нажды нам попалась система, в которой были замечательно реализованы
оба этих приема. Затем, однако, какому-то программисту пришло в голову
улучшить пользовательский интерфейс, предоставляя более быстрый ответ
относительно того, правилен ли введенный пользователем пароль. Для это-
го программист сохранял контрольную сумму каждого пароля, что свело на
нет всю процедуру применения соли и растягивания. Если время отклика си-
стемы оказывается недопустимо медленным, вы можете немного уменьшить
значение
r
, но убедитесь, что злоумышленник сможет проверить правиль-
ность пароля, только выполнив по меньшей мере
r
операций хэширования.
22.3
Портативное хранилище
Очередная идея — хранить ключи где-нибудь за пределами компьютера.
Самая простая форма внешнего хранилища — это клочок бумаги, на кото-
ром записаны пароли. Многие заводят хранилища подобного рода даже для
абсолютно не криптографических систем наподобие Web-узлов. Очень часто
нам (в том числе и авторам этой книги) приходится помнить по меньшей
мере полдюжины паролей, а это не очень-то легко, особенно если речь идет
о системах, в которых пароль используется крайне редко. Чтобы запомнить
пароли, пользователи просто их записывают. Ограничение этого решения со-
стоит в том, что пароль все еще должен обрабатываться глазами, мозгом
и пальцами пользователей при каждом его применении. Чтобы раздражение
пользователя и совершаемые им при вводе ошибки не превышали разумных
пределов, данный прием может применяться только к паролям и идентифи-
кационным фразам с относительно низкой степенью энтропии.
Как разработчику, вам не придется предпринимать каких-либо действий
для реализации данного метода хранения. Пользователи всегда будут запи-
сывать пароли на клочках бумаги, какие бы правила вы ни установили и как
бы ни настроили систему паролей.
Более совершенная форма хранилища представляет собой некоторую раз-
новидность переносимой памяти. Это может быть карта флэш-памяти, диске-
та, пластиковая карта с магнитной полосой или любой другой вид цифрового
хранилища. Системы цифрового хранения всегда обладают достаточной ем-
костью для хранения, как минимум, 256-битового секретного ключа, поэтому
можно забыть об использовании паролей с низкой степенью энтропии. По су-
376
Достарыңызбен бөлісу: |