S/КЛЮЧ
S/KEY — это система одноразовых паролей, разработанная для аутентификации в Unix-подобных операционных системах , особенно с тупых терминалов или ненадежных общедоступных компьютеров, на которых нежелательно вводить долгосрочный пароль. Реальный пароль пользователя объединяется в автономном устройстве с коротким набором символов и уменьшающимся счетчиком для формирования одноразового пароля. Поскольку каждый пароль используется только один раз, он бесполезен для перехватчиков паролей .
Поскольку короткий набор символов не меняется до тех пор, пока счетчик не достигнет нуля, можно подготовить список одноразовых паролей по порядку, который может носить с собой пользователь. Альтернативно, пользователь может предоставить пароль, символы и желаемое значение счетчика локальному калькулятору для генерации соответствующего одноразового пароля, который затем может быть передан по сети в открытом виде. Последняя форма более распространена и практически представляет собой аутентификацию типа «запрос-ответ» .
S/KEY поддерживается в Linux (через подключаемые модули аутентификации ), OpenBSD , NetBSD и FreeBSD , а общая реализация с открытым исходным кодом может использоваться для обеспечения его использования в других системах. OpenSSH также реализует S/KEY, поскольку версия OpenSSH 1.2.2 была выпущена 1 декабря 1999 года. [1] Одна из распространенных реализаций называется OPIE . S/KEY является товарным знаком компании Telcordia Technologies , ранее известной как Bell Communications Research (Bellcore).
S/KEY также иногда называют схемой Лэмпорта , по имени ее автора Лесли Лэмпорта . Он был разработан Нилом Халлером, Филом Карном и Джоном Уолденом в Bellcore в конце 1980-х годов. По истечении срока действия основных патентов на криптография с открытым ключом и широкое использование портативных компьютеров с SSH и другие криптографические протоколы, которые могут защитить весь сеанс, а не только пароль, S/KEY падает в негодность. [ нужна ссылка ] Схемы, реализующие двухфакторную аутентификацию , напротив, становятся все более популярными. [2]
Генерация пароля
[ редактировать ]Сервер — это компьютер, который будет выполнять аутентификацию.
- начинается с секретного ключа W. Этот шаг Этот секрет может быть предоставлен пользователем или сгенерирован компьютером. В любом случае, если этот секрет будет раскрыт, безопасность S/KEY окажется под угрозой.
- Криптографическая хэш-функция H применяется n раз к W , создавая тем самым хеш-цепочку из n одноразовых паролей. Пароли являются результатом применения криптографической хэш-функции:
- Ч ( Ш ), Ч ( Ч ( Ш )), ..., Ч н ( В ).
- Начальный секрет W отбрасывается.
- Пользователю предоставляются n паролей, распечатанных в обратном порядке:
- ЧАС н ( Вт ), Ч п -1 ( Ж ), ..., Ч ( Ч ( Ж )), Ч ( Ж ).
- Пароли H ( W ), H ( H ( W )), ..., H п -1 ( W ) удаляются с сервера. Только пароль H н ( W ), тот, который находится вверху списка пользователей, хранится на сервере.
Аутентификация
[ редактировать ]После генерации пароля у пользователя появляется лист бумаги с n паролями. Если n очень велико, либо сохранение всех n паролей, либо вычисление заданного пароля из H ( W ) становится неэффективным. Существуют методы эффективного расчета паролей в необходимом порядке, используя только хэш-вычисления за шаг и сохранение пароли. [3]
В более идеальном варианте, хотя на практике, возможно, реже, пользователь может носить с собой небольшое, портативное, безопасное, не подключенное к сети вычислительное устройство, способное восстановить любой необходимый пароль с учетом секретной парольной фразы, соли и количества требуемых итераций хеша. последние два из которых удобно предоставляются сервером, запрашивающим аутентификацию для входа в систему.
В любом случае первым паролем будет тот же пароль, который сохранился на сервере. Этот первый пароль не будет использоваться для аутентификации (пользователь должен нацарапать этот пароль на листе бумаги), вместо него будет использоваться второй:
- Пользователь предоставляет серверу второй пароль pwd в списке и стирает этот пароль.
- Сервер пытается вычислить H ( pwd ), где pwd — предоставленный пароль. Если Н ( pwd ) создает первый пароль (тот, который сохранил сервер), после чего аутентификация проходит успешно. Затем сервер сохранит pwd в качестве текущей ссылки.
Для последующих аутентификаций пользователь предоставит passwordя . (Последний пароль в распечатанном списке, пароль n — первый пароль, сгенерированный сервером, H ( W ), где W — первоначальный секрет). Сервер вычислит H ( пароль i ) и сравнит результат с пароль i −1 , который хранится как ссылка на сервере.
Безопасность
[ редактировать ]Безопасность S/KEY зависит от сложности обращения криптографических хэш-функций . Предположим, злоумышленнику удалось получить пароль, который использовался для успешной аутентификации. Предположим, что это пароль i , этот пароль уже бесполезен для последующих аутентификаций, поскольку каждый пароль можно использовать только один раз. Злоумышленнику было бы интересно это узнать. пароль i −1 , потому что именно этот пароль будет использоваться для следующей аутентификации.
Однако для этого потребуется инвертировать хэш-функцию, которая создала пароль i −1 с использованием пароль я ( H ( пароль я -1 ) = пароль i ), что крайне сложно сделать с помощью нынешних криптографических хеш-функций .
Тем не менее, S/KEY уязвим для атаки «человек посередине», если используется сам по себе. Он также уязвим для определенных условий гонки , например, когда программное обеспечение злоумышленника прослушивает сеть, чтобы узнать первые N - 1 символов пароля (где N равно длине пароля), устанавливает свой собственный TCP-сеанс с сервером и быстро последовательность пробует все допустимые символы в N -й позиции, пока один из них не достигнет успеха. Этих типов уязвимостей можно избежать, используя ssh , SSL , SPKM или другой зашифрованный транспортный уровень.
Поскольку каждая итерация S/KEY не включает соль или счетчик, можно напрямую обнаружить коллизии, не нарушая исходный пароль. Это имеет сложность 2 64 , который можно предварительно рассчитать с тем же объемом пространства. Сложность пространства можно оптимизировать за счет хранения цепочек значений, хотя коллизии могут уменьшить охват этого метода, особенно для длинных цепочек. [4]
Кто-то, имеющий доступ к базе данных S/KEY, может взломать их все параллельно со сложностью 2. 64 . Хотя они не получат исходный пароль, они смогут найти действительные учетные данные для каждого пользователя. В этом отношении это похоже на хранение несоленых 64-битных хешей надежных уникальных паролей.
Протокол S/KEY может зацикливаться. Если бы такой цикл был создан в цепочке S/KEY, злоумышленник мог бы использовать ключ пользователя, не найдя исходное значение и, возможно, не сообщив действительному пользователю. Патологическим случаем этого может быть OTP, хэширующий сам себя.
Удобство использования
[ редактировать ]Внутри S/KEY использует 64-битные числа. Для удобства использования каждое число сопоставляется с шестью короткими словами длиной от одного до четырех символов каждое из общедоступного словаря на 2048 слов. Например, одно 64-битное число соответствует «ROY HURT SKI FAIL GRIM KNEE». [5]
См. также
[ редактировать ]- ОТПВ
- Система аутентификации OPIE
- PGP Биометрический список слов использует два списка по 256 слов, каждое слово представляет 8 бит.
Ссылки
[ редактировать ]- ^ «История проекта OpenSSH» . ОпенСШ . Проверено 5 декабря 2019 г.
- ^ «Глобальный рынок многофакторной аутентификации 2017-2021» . ТехНавио. Август 2017 года . Проверено 5 декабря 2019 г.
- ^ Д. Юм, Дж. Со, С. Эом и П. Ли, «Однослойный обход фрактальной хэш-цепочки с почти оптимальной сложностью», Topics in Cryptology – CT-RSA 2009, стр. 325–339, 2009. [ 1]
- ^ Сэмюэл, Майкл (01 июля 2011 г.). «Атака подземелья S/Key» . Проверено 5 декабря 2019 г.
- ^ Халлер, Нил; Мец, Крейг; Нессер II, Филип Дж.; Стро, Майк (1998). «Приложение D: Словарь для преобразования между 6-словным и двоичным форматами» . Система одноразовых паролей . IETF . дои : 10.17487/RFC2289 .