5.2. User-Password
Этот атрибут показывает пароль идентифицируемого пользователя или данные, введенные пользователем в ответ на пакет Access-Challenge. Пароль может передаваться только в пакетах Access-Request.
При передаче пакетов используется сокрытия паролей. Сначала к паролю добавляются NUL-символы до значения, кратного 16 октетам. Далее вычисляется необратимая хэш-функция MD5 для потока октетов разделяемого ключа и значения Request Authenticator. Полученное значение объединяется (логическая операция XOR) с первыми 16 октетами пароля и помещается в первые 16 октетов поля String в атрибуте User-Password.
Если размер пароля превышает 16, вычисляется вторая необратимая хэш-последовательность MD5 для потока октетов, состоящего из разделяемого ключа и результата шифрования первых 16 октетов пароля. Полученный результат объединяется (операция XOR) со вторым 16-октетным сегментом пароля и помещается в следующие 16 октетов поля String в атрибуте User-Password.
При необходимости эта операция повторяется для каждого 16-октетного сегмента пароля с использованием разделяемого ключа и результата предыдущей операции. Размер пароля не может превышать 128 символов.
Этот метод шифрования взят из книги "Network Security" (Kaufman, Perlman и Speciner) [9], стр.109-110. Ниже приведено более детальное описание метода:
Вызывается функция MD5 с разделяемым ключом S 128-битовым псевдослучайным значением Request Authenticator (RA). Пароль делится на 16-октетные сегменты p1, p2 и т. д. с дополнением последнего сегмента NUL-символами для выравнивания по 16-октетной границе. Используется операция XOR (исключающее или) для хэш-функции и соответствующего сегмента пароля. Для второго и последующих сегментов вместо RA используется хэш-функция, полученная на предыдущем этапе. Зашифрованный пароль сохраняется как конкатенация промежуточных результатов c(1), c(2) и т. д. в поле String атрибута User-Password.
b1 = MD5(S + RA) c(1) = p1 xor b1 b2 = MD5(S + c(1)) c(2) = p2 xor b2 . . . . . . bi = MD5(S + c(i-1)) c(i) = pi xor bi
На приемной стороне процесс выполняется в обратном порядке для получения исходного пароля.
Процесс восстановления пароля является корректным, несмотря на использование при его шифровании необратимых хеш- функций MD5. Прим. перев.
Формат полей атрибута User-Password показан ниже. Поля передаются слева направо.
0 1 2 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- | Type | Length | String ... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Type
2
Length
От 18 до 130.
String
Строка типа String размером от 16 до 128 октетов (кратные 16 значения), содержащая зашифрованный пароль.