Открыть сервис

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), которая строится следующим образом:

  1. Выбор секретного ключа: Пользователь выбирает секретный ключ (seed) — случайную строку, которая хранится на сервере.
  2. Генерация цепочки: К секретному ключу последовательно применяется хеш-функция N раз (где N — количество паролей, обычно 100 или 1000). Результат каждого шага — это хеш предыдущего значения. Получается последовательность: H(N)(seed), H(N-1)(seed), ..., H(1)(seed), где H(n)(seed) означает n-кратное применение хеша.
  3. Хранение на сервере: Сервер сохраняет только последнее значение цепочки — H(N)(seed). Это значение используется для проверки первого пароля.
  4. Выдача паролей: Пользователю выдаются пароли в обратном порядке: первый парольH(N-1)(seed), второй — H(N-2)(seed) и так далее до последнего — H(1)(seed).

Процесс аутентификации

  1. Пользователь вводит свой идентификатор (логин) и текущий одноразовый пароль.
  2. Сервер применяет к введённому паролю хеш-функцию один раз и сравнивает результат с сохранённым значением (которое является H(N)(seed) для первого пароля, H(N-1)(seed) для второго и т.д.).
  3. Если результат совпадает, сервер заменяет сохранённое значение на введённый пароль (который становится новым хешем для следующей проверки).
  4. После использования всех 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 →