Сервер CIFS хранит зашифрованную форму пароля клиента. Чтобы получить аутентифицированный доступ к серверным ресурсам, сервер посылает вызов клиенту, на который клиент отвечает подтверждением, что он знает пароль клиента.
Аутентификация использует шифрование DES в блочном режиме. Функция шифрования DES, обозначенная как Е(К, D), получает семибайтный ключ (К) и восьмибайтный блок данных (D) и создает восьмибайтный зашифрованный блок данных в качестве своего значения. Если данные для шифрования длиннее восьми байтов, функция шифрования применяется к каждому блоку из восьми последующих байтов и результаты соединяются вместе. Если ключ длиннее семи байтов, то данные сначала полностью шифруются с помощью первых семи байтов ключа, затем следующие семь байтов и т.д., соединяя каждый раз результаты. Другими словами, чтобы зашифровать 16-байтовую величину D0D1 с помощью 14-байтового ключа К0К1:
Е(К0К1, D0D1) = Е(К0, D0)E(K0,D1)E(K1, D0)E(K1, Dl)
Поле EnayptionKey (Ключ Шифрования) в ответе SMB_COM_NEGPROT содержит восьмибайтный вызов, обозначенный ниже как "С8", выбираемый уникальным, чтобы предотвратить атаки повторного воспроизведения. Клиент отвечает 24-байтовым ответом, обозначенным "Р24" и вычисляемым, как описано ниже. (Примечание. Имя "EneryptionKef является историческим — оно на самом деле не содержит ключа шифрования.)
Клиент посылает ответ на вызов в запросе SMB_COM_TREE_CONNECT, SMB_COM_TREE_CONNECT_ANDX и/или SMB_COM_SESSION_SETUP_ANDX, который следует за обменом сообщением SMB_COM_NEGPROT. Сервер должен проверить ответ, выполняя те же вычисления, которые делает клиент при его создании, и проверить, что строки совпадают.
Если строки не совпадают, то, возможно, клиентская система неспособна шифровать; если это так, то строка может быть паролем пользователя открытым текстом. Сервер должен попробовать проверить строку, как если бы это был незашифрованный пароль.
Поле SMB, используемое для хранения ответа, зависит от ответа:
Password в SMB_COM_TREE_CONNECT
Password в SMB_COM_TREE_CONNECT_ANDX-
Account Password в SMB_COM_SESSION_SETUP_ANDX
(Примечание. Здесь имена также являются историческими и не отражают это использование.)
Содержимое ответа на вызов зависит от диалекта CIFS, как показано в следующих разделах.
