S/KEY
S/KEY — это одноразовая система аутентификации (OTP, One-Time Password), основанная на криптографической хеш-функции и предназначенная для защиты от атак с перехватом пароля (sniffing) и повторного воспроизведения (replay attack). Разработана в 1994 году Лесли Лэмпортом, Мартином Хеллманом и другими исследователями из компании Bellcore (ныне Telcordia Technologies). S/KEY является одной из первых практических реализаций концепции одноразовых паролей, которая впоследствии была стандартизирована как RFC 1760 (The S/KEY One-Time Password System) и RFC 2289 (A One-Time Password System).
История
Идея одноразовых паролей возникла как ответ на уязвимости статических паролей, которые могли быть перехвачены при передаче по незащищённым сетям (например, через Telnet или FTP). В 1981 году Лесли Лэмпорт предложил метод использования цепочки хешей (hash chain) для аутентификации, который стал теоретической основой S/KEY. В 1994 году команда Bellcore (Лэмпорт, Хеллман, и другие) реализовала эту идею в виде программного продукта S/KEY, который был выпущен в открытый доступ.
Система быстро получила распространение в операционных системах Unix, где была интегрирована в стандартные утилиты (например, skey и login). В 1995 году она была описана в RFC 1760, а в 1998 году — в RFC 2289, который уточнил алгоритмы и форматы. В 2000-х годах S/KEY постепенно вытеснялась более современными системами, такими как OATH (Initiative for Open Authentication) и TOTP (Time-based One-Time Password), но остаётся важной исторической вехой в развитии аутентификации.
Принцип работы
Цепочка хешей
S/KEY использует криптографическую хеш-функцию (например, MD4 или MD5) для генерации последовательности одноразовых паролей. Процесс основан на цепочке хешей (hash chain), которая строится следующим образом:
- Выбор секретного ключа: Пользователь выбирает секретный ключ (seed) — случайную строку, которая хранится на сервере.
- Генерация цепочки: К секретному ключу последовательно применяется хеш-функция N раз (где N — количество паролей, обычно 100 или 1000). Результат каждого шага — это хеш предыдущего значения. Получается последовательность:
H(N)(seed),H(N-1)(seed), ...,H(1)(seed), гдеH(n)(seed)означает n-кратное применение хеша. - Хранение на сервере: Сервер сохраняет только последнее значение цепочки —
H(N)(seed). Это значение используется для проверки первого пароля. - Выдача паролей: Пользователю выдаются пароли в обратном порядке: первый пароль —
H(N-1)(seed), второй —H(N-2)(seed)и так далее до последнего —H(1)(seed).
Процесс аутентификации
- Пользователь вводит свой идентификатор (логин) и текущий одноразовый пароль.
- Сервер применяет к введённому паролю хеш-функцию один раз и сравнивает результат с сохранённым значением (которое является
H(N)(seed)для первого пароля,H(N-1)(seed)для второго и т.д.). - Если результат совпадает, сервер заменяет сохранённое значение на введённый пароль (который становится новым хешем для следующей проверки).
- После использования всех N паролей цепочка истощается, и пользователь должен пройти процедуру повторной инициализации (re-initialization) с новым секретным ключом.
Пример
Пусть секретный ключ — secret, а N=3. Цепочка:
H3(secret)=H(H(H(secret)))— сохраняется на сервере.- Пароль 1:
H2(secret)=H(H(secret)). - Пароль 2:
H1(secret)=H(secret). - Пароль 3:
H0(secret)=secret(обычно не используется, так как это сам секретный ключ).
При первой аутентификации пользователь вводит H2(secret). Сервер вычисляет H(H2(secret)) = H3(secret) и сравнивает с сохранённым значением. При совпадении сервер сохраняет H2(secret) как новое значение для следующей проверки.
Классификация
S/KEY относится к классу одноразовых паролей на основе счётчика (counter-based OTP), где последовательность паролей определяется порядковым номером (счётчиком) в цепочке хешей. В отличие от систем на основе времени (TOTP), S/KEY не зависит от синхронизации часов, что делает её устойчивой к временным расхождениям.
Характеристики и ограничения
Преимущества
- Защита от перехвата: Каждый пароль используется только один раз, поэтому перехваченный пароль бесполезен для последующих атак.
- Не требует синхронизации времени: В отличие от TOTP, не нужны точные часы на клиенте и сервере.
- Простота реализации: Алгоритм основан на одной криптографической хеш-функции и не требует сложных вычислений.
- Открытый стандарт: Описан в RFC и доступен для свободного использования.
Недостатки
- Ограниченный срок службы: После использования всех N паролей требуется повторная инициализация, что неудобно для частого использования.
- Уязвимость к атакам на хеш-функции: В ранних реализациях использовались слабые хеш-функции (MD4, MD5), которые впоследствии были признаны небезопасными. RFC 2289 рекомендует использование SHA-1, но и он считается устаревшим.
- Отсутствие защиты от атак «человек посередине» (MITM): Если злоумышленник перехватывает и модифицирует трафик, он может подменить пароль или перенаправить пользователя на поддельный сервер.
- Неудобство для пользователя: Пароли представляют собой длинные строки (обычно 6–8 слов из словаря), которые сложно запомнить и вводить вручную.
Применение
S/KEY использовалась в основном в следующих областях:
- Удалённый доступ к Unix-системам: В 1990-х годах S/KEY была встроена в стандартные утилиты Telnet и FTP для защиты от перехвата паролей.
- Аутентификация в корпоративных сетях: Некоторые компании использовали S/KEY для доступа к внутренним ресурсам через незащищённые каналы.
- Образовательные и исследовательские цели: Система часто изучается в курсах по криптографии и сетевой безопасности как пример одноразовой аутентификации.
В настоящее время S/KEY практически не используется в промышленных системах из-за устаревания алгоритмов и неудобства. Её место заняли более современные стандарты, такие как OATH (HOTP и TOTP), которые поддерживают динамическое обновление ключей и более устойчивы к атакам.
Интересные факты
- Название «S/KEY» происходит от сокращения «Secure Key» (безопасный ключ) и не связано с английским словом «skey» (скипетр).
- В RFC 2289 для генерации читаемых паролей используется словарь из 2048 слов, что позволяет представлять пароли в виде последовательности из 6 слов (например, «BARK BARK BARK BARK BARK BARK»).
- Система S/KEY была предшественником более известной системы OTP, разработанной в рамках проекта OpenBSD (однако OpenBSD позже перешла на OATH).
- В 1995 году S/KEY была признана одной из наиболее безопасных систем аутентификации для удалённого доступа, но уже к 2000 году уступила место более совершенным протоколам, таким как SSH (Secure Shell), который использует асимметричную криптографию.
Источники
- RFC 1760: The S/KEY One-Time Password System (1995)
- RFC 2289: A One-Time Password System (1998)
- Lamport, L. (1981). «Password Authentication with Insecure Communication». Communications of the ACM, 24(11), 770–772.
- Haller, N. (1994). «The S/KEY One-Time Password System». Bellcore Technical Report.
- Справочные материалы по криптографии и аутентификации (курс лекций МФТИ, 2020).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →