Руководство FreeBSD
Пред. | Глава 14. Безопасность | След.

# 14.5. Одноразовые пароли

S/Key это схема с одноразовыми паролями, основанная на одностороннем хэше. FreeBSD использует хэш MD4 для совместимости, но другие системы используют MD5 и DES-MAC. S/Key была частью базовой системы FreeBSD начиная с версии 1.1.5 и используется также во все большем числе операционных систем. S/Key это зарегистрированная торговая марка Bell Communications Research, Inc.

Начиная с FreeBSD версии 5.0, S/Key была замещена на функциональный эквивалент -- OPIE (One-time Passwords In Everything). OPIE по умолчанию использует MD5.

Есть три различных вида паролей, о которых мы поговорим ниже. Первый вид это ваш обычный пароль UNIX® или пароль Kerberos; мы будем называть его ''пароль UNIX''. Второй вид это одноразовый пароль, сгенерированный программой S/Key `key` или программой OPIE opiekey(1) и принимаемый командами `keyinit` или opiepasswd(1) и в приглашении login; мы будем называть их ''одноразовыми паролями''. Последний вид паролей это защищенные пароли, которые вы передаете программам `key`/`opiekey` (и иногда программам `keyinit`/`opiepasswd`), и которые эти программы используют для создания одноразовых паролей; мы будем называть его ''защищенными паролями'' или просто ''паролями''.

Защищенный пароль не имеет никакого отношения к вашему паролю UNIX; они могут быть одинаковыми, но это не рекомендуется. Защищенные пароли S/Key и OPIE не ограничены 8-ю символами, как старые UNIX пароли[1], они могут быть настолько длинными, насколько вы захотите. Очень часто используются пароли длиной в шесть или семь символов. По большей части система S/Key или OPIE работает полностью независимо от системы паролей UNIX.

Помимо паролей, есть два других вида данных, важных для S/Key и OPIE. Первый, известный как ''seed'' или ''ключ'', состоит из двух букв и пяти цифр. Другой, называемый ''счетчиком цикла'', это номер от 1 до 100. S/Key создает одноразовый пароль, соединяя ключ и защищенный пароль, а затем применяя MD4/MD5 столько раз, сколько указано счетчиком цикла и выдает результат в виде шести коротких слов на английском. Эти шесть слов на английском и есть ваш одноразовый пароль. Система аутентификации (как правило PAM) хранит последний использованный одноразовый пароль, и пользователь аутентифицитуется если хэш вводимого пользователем пароля совпадает с предыдущим паролем. Поскольку используется односторонний хэш, невозможно сгенерировать следующий одноразовый пароль если получен предыдущий; счетчик цикла уменьшается после каждого успешного входа для поддержки синхронизации пользователя с программой login. Когда счетчик цикла уменьшается до 1, S/Key и OPIE должны быть переинициализированы.

В каждой из обсуждаемых ниже систем задействованы три программы. Программы `key` и `opiekey` получают счетчик цикла, ключ и защищенный пароль и создают одноразовый пароль или последовательный список одноразовых паролей. Программы `keyinit` и `opiepasswd` используются для инициализации S/Key и OPIE соответственно, и для смены паролей, счетчиков цикла, или ключей; они принимают защищенный пароль или счетчик цикла, ключ и одноразовый пароль. Программы `keyinfo` и `opieinfo` проверяют соответствующие файлы (`/etc/skeykeys` или `/etc/opiekeys`) и печатают текущий счетчик цикла и ключ вызывающего пользователя.

Мы рассмотрим четыре вида операций. Первая это использование `keyinit` или `opiepasswd` через защищенное соединение для первоначальной настройки системы одноразовых паролей, или для изменения пароля или ключа. Вторая операция это использование в тех же целях `keyinit` или `opiepasswd` через незащищенное соединение, в сочетании с `key` или `opiekey` через защищенное соединение. Третья это использование `key`/`opiekey` для входа через незащищенное соединение. Четвертая это использование `key` или `opiekey` для генерации набора ключей, которые могут быть записаны или распечатаны для соединения из места, где защищенное соединение недоступно.

## 14.5.1. Защищенная установка соединения

Для первоначальной настройки S/Key, измените ваш пароль или ключ при входе через защищенное соединение (например, с консоли компьютера или через ssh), используйте команду `keyinit` без параметров при входе под своим именем:

    % keyinit
    Adding unfurl:
    Reminder - Only use this method if you are directly connected.
    If you are using telnet or rlogin exit with no password and use keyinit -s.
    Enter secret password:
    Again secret password:

    ID unfurl s/key is 99 to17757
    DEFY CLUB PRO NASH LACE SOFT

Для OPIE, вместо этого используется `opiepasswd`:

    % opiepasswd -c
    [grimreaper] ~ $ opiepasswd -f -c
    Adding unfurl:
    Only use this method from the console; NEVER from remote. If you are using
    telnet, xterm, or a dial-in, type ^C now or exit with no password.
    Then run opiepasswd without the -c parameter.
    Using MD5 to compute responses.
    Enter new secret pass phrase:
    Again new secret pass phrase:
    ID unfurl OTP key is 499 to4268
    MOS MALL GOAT ARM AVID COED

В приглашениях `Enter new secret pass phrase:` или `Enter secret password:`, введите пароль или фразу. Запомните, это не тот пароль, с которым вы будете входить, он используется для генерации одноразовых паролей. Строка ''ID'' содержит информацию для вашего конкретного случая: имя пользователя, счетчик цикла и ключ. При входе система запомнит эти параметры и отправит их вам, поэтому их не надо запоминать. В последней строке находится одноразовый пароль, соответствующий этим параметрам и секретному паролю; если вы войдете в систему сразу, используйте этот одноразовый пароль.

## 14.5.2. Незащищенная установка соединения

Для инициализации или изменения защищенного пароля через незащищенное соединение, вам потребуется существующее защищенное соединение куда-то, где вы сможете запустить `key` или `opiekey`; это может быть средство доступа Macintosh® или shell на компьютере, которому вы доверяете. Вам потребуется также установить значение счетчика цикла (100 возможно подойдет), и задать ключ или использовать сгенерированный. Через незащищенное соединение (к компьютеру, на котором производится настройка), используйте команду `keyinit -s`:

    % keyinit -s
    Updating unfurl:
    Old key: to17758
    Reminder you need the 6 English words from the key command.
    Enter sequence count from 1 to 9999: 100
    Enter new key [default to17759]:
    s/key 100 to 17759
    s/key access password:
    s/key access password:CURE MIKE BANE HIM RACY GORE

Для OPIE, используйте `opiepasswd`:

    % opiepasswd

    Updating unfurl:
    You need the response from an OTP generator.
    Old secret pass phrase:
            otp-md5 498 to4268 ext
            Response: GAME GAG WELT OUT DOWN CHAT
    New secret pass phrase:
            otp-md5 499 to4269
            Response: LINE PAP MILK NELL BUOY TROY

    ID mark OTP key is 499 gr4269
    LINE PAP MILK NELL BUOY TROY

Чтобы принять ключ по умолчанию нажмите Enter. Затем, перед вводом пароля доступа введите те же параметры в вашем защищенном соединении или средстве доступа S/Key:

    % key 100 to17759
    Reminder - Do not use this program while logged in via telnet or rlogin.
    Enter secret password: <secret password>
    CURE MIKE BANE HIM RACY GORE

Или для OPIE:

    % opiekey 498 to4268
    Using the MD5 algorithm to compute response.
    Reminder: Don't use opiekey from telnet or dial-in sessions.
    Enter secret pass phrase:
    GAME GAG WELT OUT DOWN CHAT

Теперь переключитесь на незащищенное соединение и скопируйте одноразовый пароль, сгенерированный соответствующей программой.

## 14.5.3. Создание одного одноразового пароля

Как только вы настроите S/Key или OPIE, во время входа появится приглашение вроде этого:

    % telnet example.com
    Trying 10.0.0.1...
    Connected to example.com
    Escape character is '^]'.

    FreeBSD/i386 (example.com) (ttypa)

    login: <username>
    s/key 97 fw13894
    Password:

Или для OPIE:

    % telnet example.com
    Trying 10.0.0.1...
    Connected to example.com
    Escape character is '^]'.

    FreeBSD/i386 (example.com) (ttypa)

    login: <username>
    otp-md5 498 gr4269 ext
    Password:

Кроме того, у S/Key и OPIE есть полезная особенность (не показанная здесь): если вы нажмете Enter в приглашении на ввод пароля, включится эхо, и вы сможете увидеть то, что вводите. Это может быть очень полезно, если вы пытаетесь ввести пароль вручную, например с распечатки.

В этот момент вам потребуется сгенерировать одноразовый пароль, чтобы ввести его в приглашение. Это должно быть выполнено на защищенной системе, в которой вы можете запустить `key` или `opiekey` (есть версии для DOS, Windows® и Mac OS®). Им требуются значения счетчика цикла и ключ в качестве параметров командной строки. Вы можете скопировать и вставить их прямо из приглашения login компьютера, на который входите.

В защищенной системе:

    % key 97 fw13894
    Reminder - Do not use this program while logged in via telnet or rlogin.
    Enter secret password:
    WELD LIP ACTS ENDS ME HAAG

Для OPIE:

    % opiekey 498 to4268
    Using the MD5 algorithm to compute response.
    Reminder: Don't use opiekey from telnet or dial-in sessions.
    Enter secret pass phrase:
    GAME GAG WELT OUT DOWN CHAT

Теперь, когда у вас есть одноразовый пароль, можете продолжить вход в систему:

    login: <username>
    s/key 97 fw13894
    Password: <return to enable echo>
    s/key 97 fw13894
    Password [echo on]: WELD LIP ACTS ENDS ME HAAG
    Last login: Tue Mar 21 11:56:41 from 10.0.0.2 ...

## 14.5.4. Создание нескольких одноразовых паролей

Иногда вы отправляетесь туда, где нет доступа к защищенному компьютеру или защищенному соединению. В этом случае, можно использовать команды `key` и `opiekey` для создания нескольких одноразовых паролей, которые вы сможете распечатать и забрать с собой. Например:

    % key -n 5 30 zz99999
    Reminder - Do not use this program while logged in via telnet or rlogin.
    Enter secret password: <secret password>
    26: SODA RUDE LEA LIND BUDD SILT
    27: JILT SPY DUTY GLOW COWL ROT
    28: THEM OW COLA RUNT BONG SCOT
    29: COT MASH BARR BRIM NAN FLAG
    30: CAN KNEE CAST NAME FOLK BILK

Или для OPIE:

    % opiekey -n 5 30 zz99999
    Using the MD5 algorithm to compute response.
    Reminder: Don't use opiekey from telnet or dial-in sessions.
    Enter secret pass phrase: <secret password>
    26: JOAN BORE FOSS DES NAY QUIT
    27: LATE BIAS SLAY FOLK MUCH TRIG
    28: SALT TIN ANTI LOON NEAL USE
    29: RIO ODIN GO BYE FURY TIC
    30: GREW JIVE SAN GIRD BOIL PHI

Параметр -n 5 запрашивает пять паролей, 30 указывает значение последнего счетчика цикла. Обратите внимание, что пароли печатаются в обратном по сравнению с обычным использованием порядке. Если вы действительно параноик, перепишите результат вручную; иначе скопируйте и передайте его `lpr`. Обратите внимание, что каждая линия содержит как счетчик цикла, так и одноразовый пароль; вам может показаться удобным отрывать пароль после использования.

## 14.5.5. Ограничение использования UNIX® паролей

S/Key может наложить ограничения на использование UNIX паролей на основе имени хоста, имени пользователя, порта терминала или IP адреса сессии. Эти ограничения можно найти в файле настройки `/etc/skey.access`. Страница справочника skey.access(5) содержит дополнительную информацию о полном формате файла а также детали о некоторых предосторожностях, которые должны быть предприняты перед тем, как положиться в вопросах безопасности на этот файл.

Если файла `/etc/skey.access` нет (это ситуация по умолчанию в системах FreeBSD 4.X), всем пользователям будет разрешено входить с паролями UNIX. Если файл существует, использование S/Key станет обязательно для всех, если только параметры настройки в файле `skey.access` не указывают иначе. В любом случае, пароли UNIX разрешены при входе с консоли.

Вот пример файла настройки `skey.access`, иллюстрирующий три наиболее распространенных вида параметров настройки:

    permit internet 192.168.0.0 255.255.0.0
    permit user fnord
    permit port ttyd0

Первая строка (permit internet) разрешает пользователям, чей IP адрес (который подвержен подделке) соответствует заданному значению и маске, входить с использованием паролей UNIX. Это должно рассматриваться не как механизм безопасности, а как напоминание пользователям, что они работают через небезопасное соединение и должны использовать для аутентификации S/Key.

Вторая строка (permit user) позволяет определенным пользователям, в данном случае `fnord`, всегда использовать пароли UNIX. Вообще говоря, это должно использоваться только для тех, кто не может использовать программу `key`, например если они работают с простых терминалов или необучаемы.

Третья строка (permit port) позволяет всем пользователям, вошедшим с определенного терминала использовать пароли UNIX; этот параметр должен использоваться для подключений по dial-up.

OPIE может ограничивать использование паролей UNIX на основе IP адреса как и S/Key. Соответствующий файл называется `/etc/opieaccess`, он существует по умолчанию в FreeBSD 5.0 и более современных системах. Обратитесь к opieaccess(5) за более подробной информацией об этом файле и о предосторожностях, которые вы должны предпринять при использовании этого файла.

Вот пример файла `opieaccess`:

    permit 192.168.0.0 255.255.0.0

Эта строка позволяет пользователям, чей IP адрес (который подвержен подделке) соответствует указанному значению и маске, входить с паролем UNIX.

Если ни одно из правил в `opieaccess` не сработало, поведением по умолчанию является запрет всех не-OPIE входов.

### Примечания

[1] | В FreeBSD стандартный пароль может быть до 128 символов длиной.

Пред. | Начало | След.
DES, MD5, и шифрование | Уровень выше | TCP Wrappers

Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам связанными с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам связанным с этой документацией, пишите <doc@FreeBSD.org>.
По вопросам связанным с русским переводом документации, пишите в рассылку <frdp@FreeBSD.org.ua>.
Информация по подписке на эту рассылку находится на сайте проекта перевода.