Доброго All! Стоит задача разработать шифрованный протокол связи Client-Server. Свойства протокола – максимально минимальные потери защищённости при взломе сервера или клиента. Клиент должен знать, что подключён к ликвидному серверу, сервер должен знать, что подключён к ликвидному клиенту. По возможности не использовать статических ключей. Это для начала. Набросал примерно алгоритм. Выглядит примерно так: Сессия криптуеться симметричным алгоритмом 3DES. Для каждой сессии выбирается random ключ, при чём клиент выбирает свой ключ, сервер свой. У каждого клиента есть свой собственный закрытый ключ RSA и открытый ключ RSA сервера. У каждого клиента есть собственный идентификатор ID и идентификатор сервера ID server, который клиент будет считать ликвидным. У сервера есть таблица клиентов в которой идёт соответствие ID client, ID server, Open key RSA client. Для установки сессии клиент посылает серверу пакет, который состоит из ключа сессии и своего идентификатора. Пакет криптуеться RSA ключом сервера. Сервер получив пакет по ID клиента посылает ID сервера + random ключ сессии и криптует пакет RSA ключом клиента. Клиент проверяет ID сервера на соответствие и если OK то сессия установлена. (опускаю пока всякие там поттверждения) Примерно так. Я не спец в криптографии, поэтому не вижу множества подводных камней. Прошу помощи, советов, обсуждения чего не хватает, что лишнее, а что бессмысленно. Спасибо. P.S. Только не надо кричать: "НЕ ИЗОБРЕТАЙ ВЕЛОСИПЕД С КВАДРАТНЫМИ КОЛЁСАМИ! БЕРИ SSL(TSL) И БУДЕТ ТЕБЕ СЧАСТЬЕ!!!" Буду рад обсудить все аспекты SSL, но смею заметить этот протокол предусматривает третью сторону поттверждающкю сертификат, а в схеме выше третей стороны не предусмотрено. P.P.S. Ах да, архитектура подрузумеваеться статичная – заранее определены все клиенты и сервера.
Вот нашёл несколько предпологаемых уязвимых мест SSL: 1. Клиент (сервер) должен проверять при каждой сессии ликвидность сертификата на сервере проверки сертификатов (если этого не будет сделано, то теряется смысл использования сертификатов). Уязвимое место – если заблокировать работу сертификационного сервера, или он перестанет действовать по техническим причинам – клиент не сможет связаться с сервером. 2. Передовая в открытом виде сертификат клиент выдаёт себя – проснифив трафик, можно определить какие клиенты подключаются к серверу. Жду комментариев.