Защищённый протокол Client-Server

Discussion in 'Безопасность и Анонимность' started by Developer_, 13 Aug 2010.

  1. Developer_

    Developer_ New Member

    Joined:
    11 Aug 2010
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Доброго All!
    Стоит задача разработать шифрованный протокол связи Client-Server. Свойства протокола – максимально минимальные потери защищённости при взломе сервера или клиента. Клиент должен знать, что подключён к ликвидному серверу, сервер должен знать, что подключён к ликвидному клиенту. По возможности не использовать статических ключей. Это для начала. Набросал примерно алгоритм. Выглядит примерно так:
    [​IMG]
    Сессия криптуеться симметричным алгоритмом 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. Ах да, архитектура подрузумеваеться статичная – заранее определены все клиенты и сервера.
     
  2. Developer_

    Developer_ New Member

    Joined:
    11 Aug 2010
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Вот нашёл несколько предпологаемых уязвимых мест SSL:
    1. Клиент (сервер) должен проверять при каждой сессии ликвидность сертификата на сервере проверки сертификатов (если этого не будет сделано, то теряется смысл использования сертификатов).
    Уязвимое место – если заблокировать работу сертификационного сервера, или он перестанет действовать по техническим причинам – клиент не сможет связаться с сервером.
    2. Передовая в открытом виде сертификат клиент выдаёт себя – проснифив трафик, можно определить какие клиенты подключаются к серверу.
    Жду комментариев.