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 пароли, они могут быть настолько
длинными, насколько вы захотите. Очень часто используются пароли длиной в шесть или семь
символов. По большей части система 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 для генерации набора ключей, которые могут быть записаны или
распечатаны для соединения из места, где защищенное соединение недоступно.
Для первоначальной настройки 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'' содержит информацию для вашего конкретного случая: имя
пользователя, счетчик цикла и ключ. При входе система запомнит эти параметры и отправит
их вам, поэтому их не надо запоминать. В последней строке находится одноразовый пароль,
соответствующий этим параметрам и секретному паролю; если вы войдете в систему сразу,
используйте этот одноразовый пароль.
Для инициализации или изменения защищенного пароля через незащищенное соединение, вам
потребуется существующее защищенное соединение куда-то, где вы сможете запустить 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
Теперь переключитесь на незащищенное соединение и скопируйте одноразовый пароль,
сгенерированный соответствующей программой.
Как только вы настроите 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 ...
Иногда вы отправляетесь туда, где нет доступа к защищенному компьютеру или защищенному
соединению. В этом случае, можно использовать команды 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.
Обратите внимание, что каждая линия содержит как счетчик цикла, так и одноразовый пароль;
вам может показаться удобным отрывать пароль после использования.
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 входов.