Добавлено: 10 май 2006, 00:53
В принципе ajkj2em уже все сказал.
Ничего не защищает от M-i-t-M.vg писал(а):Об имплементации кратко. Она чрезвычайно проста и тупа:
1) Клиент посылает: username (как есть); challenge_1 (случайная последовательность байт. Далее клиент будет ждать ответа от сервера на отправленный challenge_1 );
2) Сервер получив данные username; challenge_1 вычисляет:
- выбирает из базы сохранённый hPwd;
- создаёт последовательность bytes = challenge_1 + hPwd;
- вычисляет "ответ" hash_1 = hash( bytes) на challenge_1;
- создаёт для клиента свой challenge_2 (случайная последовательность байт);
3) Сервер посылает клиенту ответ на его challenge в виде hash_1, и при этом посылает свой challenge_2;
4) Клиент сверяет полученный hash_1 с расчитываемым по challenge_1 и userpassword;
Если hash_1 != hash (challenge_1 + hash(userpassword) ), то это не "наш" сервер. Тогда заканчиваем. Иначе выполняем п.5.
5) Клиент вычисляет hash_2 = hash (challenge_2 + hash(userpassword)), и отсылает его серверу в ответ на challenge_2.
6) Сервер сравнивает полученный hash_2 с аналогичным значением, вычисленным с использованием сохранённого в базе hPwd: hash_2_srv = hash( challenge_2 + hPwd )
7) Если hash_2_srv == hash_2, то сервер, считает, что это "наш" клиент...
а это просто сводит на нет весь смысл предыдущих шагов. Надо саму команду шифровать двумя ключами. Но это и есть тот же IKE. Так что, как уже было сказано, как ни крутите,vg писал(а):7) Если hash_2_srv == hash_2, то сервер, считает, что это "наш" клиент, и ждёт получения "полезной" команды от клиента , которую и выполняет. Затем сервер разрывает соединение.
ajkj2em писал(а):в результате все равно получится либо SSL, либо IKE/ESP