Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2010.09.05;
Скачать: [xml.tar.bz2];

Вниз

Противодействие активному перехвату открытых ключей   Найти похожие ветки 

 
xayam ©   (2010-06-11 17:47) [0]

http://ru.wikipedia.org/wiki/Файл:Криптосистема_с_открытым_ключом_и_активным_перехватчиком.png

В этой модели Ева перехватывает открытый ключ e, посланный Бобом Алисе. Затем создает пару ключей e" и d", «маскируется» под Боба, посылая Алисе открытый ключ e", который, как думает Алиса, открытый ключ, посланный ей Бобом. Ева перехватывает зашифрованные сообщения от Алисы к Бобу, расшифровывает их с помощью секретного ключа d", заново зашифровывает открытым ключом e Боба и отправляет сообщение Бобу. Таким образом, никто из участников не догадывается, что есть третье лицо, которое может как просто перехватить сообщение m, так и подменить его на ложное сообщение m". Это подчеркивает необходимость аутентификации открытых ключей. Для этого обычно используют сертификаты.

Можно ли обойтись без третьей стороны, подписывающей сертификат?
В примерно таком протоколе обмена между сервером и клиентом на основе xml, где открытые сеансовые ключи уязвимы:

<message>

<key>Передача открытого ключа от клиента к серверу (сразу после подключения, иначе от сервера вернется ошибка type=1) и от сервера клиенту (сразу после получения сервером ключа игрока);
         После такого обмена ключами взаимодействие должен осуществляться через тег crypt(body, signature), остальные теги нужно игнорировать.
         Содержимое тега body всегда подписывается цифровой подписью, которая создается с помощью закрытого ключа Отправителя и помещается в тег signature.
         После этой операции содержимое тега crypt шифруется открытым ключом Сервера при передаче данных на Сервер от Клиента и открытым ключом Клиента при передаче с Сервера.
         После этого Получатель должен:
          1) расшифровать содержимое тега crypt с помощью своего закрытого ключа.
          2) выполнить проверку соответствия содержимого тега body и его цифровой подписи в теге signature
              TRUE. Если проверка прошла успешно, то Получатель должен обработать все запросы query от Оправителя, описанные в теге body, и отослать Отправителю ответы в теге answer,
                                                                           то Клиент должен дополнительно обработать все события, описанные в теге event.
              FALSE. Если проверка не удалась, то Сервер должен отослать Клиенту ошибку type=2
</key>
<error type="1">Нужно указать Ваш открытый ключ!</error>
<error type="2">Содержимое тега body не соответствует цифровой подписи! Возможно сообщение было искажено при передачи по сети.</error>

<crypt>

 <body>
            <answer id="ID запроса" type="getrooms | ">
    <error type="0 - ОК (запрос успешно выполнен);
                       1 - нужен тег key (при передаче открытого ключа);
                       2 - cодержимое тега body не соответствует цифровой подписи! Возможно сообщение было искажено при передачи по сети.
                       3 - Неправильная структура тега query;
                       4 - в теге login допускается использование только латинских букв, тире, подчеркивания и цифр;
                       5 - обнаружен пустой тег (login и/или password и/или email, если он должен быть указан);
                       ...">
              Описание ошибки
          </error>
          <rooms>Ответ на запрос getrooms
             <room id="ID комнаты1">Название комнаты1</room>
             <room id="ID комнаты2">Название комнаты2</room>
             <room id="ID комнаты..">Название комнаты..</room>
             <room id="ID комнатыN">Название комнатыN</room>
          </rooms>
   </answer>
   <query id="ID запроса, формируется отправителем" type="newplayer | remindpassword | logon | getrooms">
   <newplayer>
    <login>Логин (латинские буквы, тире, подчеркивание, цифры)</login>
    <password>Пароль</password>
    <name>Фамилия Имя Отчество</name>
    <email>Электронная почта (необязательный тег, необходимо указать, если хотите иметь возможность восстанавливать пароль и/или получать уведомления от администрации сервера)</email>
    <birthday>ГГГГ.ММ.ДД (необязательный тег)</birthday>
    <description>Дополнительная информация о пользователе</description>
   </newplayer>
   <remindpassword>Восстановление утерянного пароля на email
       <login>Логин (латинские буквы, тире, подчеркивание, цифры)</login>
    <email>Электронная почта</email>
   </remindpassword>
   <logon>Вход на сервер
       <login>Логин (латинские буквы, тире, подчеркивание, цифры)</login>
    <password>Пароль</password>
   </logon>
   
   </query>
   <event type="">События, передаваемые от сервера клиенту при игре или входе/выходе в/из комнату/ы игрока
            </event>
 </body>
 
 <signature>Цифровая подпись тела сообщения (содержимое тега body), создается с помощью закрытого ключа Отправителя</signature>
 
</crypt>

</message>

Клиент и Сервер имеют открытый исходный код.


 
Empleado ©   (2010-06-11 18:05) [1]

Аппараты Watchuard давно позволяют читать https траффик, активно работая с сертификатами.
Принцип немного другой, зато кайф :)

А в чем вопрос-то?


 
Kerk ©   (2010-06-11 18:09) [2]


> Empleado ©   (11.06.10 18:05) [1]
>
> Аппараты Watchuard давно позволяют читать https траффик,
>  активно работая с сертификатами.

А как?


 
xayam ©   (2010-06-11 18:13) [3]


> Empleado ©   (11.06.10 18:05) [1]
>  активно работая с сертификатами.
> А в чем вопрос-то?

как обойтись без сертификатов?


 
xayam ©   (2010-06-11 18:16) [4]

т.е. как проверить, что открытый ключ пришел именно от того пользователя, который знает пару login/password для доступа к серверу, без использования сертификатов.


 
xayam ©   (2010-06-11 18:32) [5]

скорей даже не так, у меня немного неправильно xml написан. Тут проблема в проверке того, принадлежит ли открытый ключ к подключаемому серверу (если сначала отсылается открытый ключ с сервера на клиент, потом ответ от клиента - его открытый ключ, который можно зашифровать серверным). Но серверный ключ уязвим по ходу дела.


 
Медвежонок Пятачок ©   (2010-06-11 20:15) [6]

Можно ли обойтись без третьей стороны, подписывающей сертификат?

Можно обойтись, если система закрытая.
Например серверным сертификатом подписывем клиентские.
Сервер принимает только тех клиентов, у кого  ишьюером сертификата является сервер.

Третья сторона в этом случае не нужна.

Сервер верит только тем клиентам, в которых уверен.
А клиент либо доверяет серверу, либо не работает с ним.


 
xayam ©   (2010-06-11 22:30) [7]

а исходники нельзя подписать серверным сертификатом?


 
Медвежонок Пятачок ©   (2010-06-11 22:42) [8]

в каком смысле подписать исходники?


 
Медвежонок Пятачок ©   (2010-06-11 22:51) [9]

по приведенной цитате из педивикии описано нечто иное. там описан не сам сеанс а момент когда издателю сертификата приходит запрос на выпуск сертификата как бы от Алисы, но на самом деле от третьего лица.

то есть у алисы пока нет вообще никакого сертифиата.
она самостоятельно генерирует себе приватный контейнер, затем генерирует запрос на сертификат, подписывает его своим приватным ключем и засылает бобу.

третье лицо перехватывает запрос посередине и заменяет его своим.
в новом запросе на сертификат (сделанным третим лицом) написано, что сертификат запрашивает как бы алиса. Но паблик кей там не алисы, а третьего лица.

Если боб повелся на этот запрос и выпустит сертификат на основе поддельного запроса, то получится следующее:

у третьего лица ест его приватный ключ и сертификат в котором написано, что он принадлежит алисе. Причем паблик и приват ключи бьют меж собой.

у алисы нет сертификата. Но даже если она получит его от третьей стороны, то она им все равно не сможет воспользоваться, потому что ее приватный ключ не бьет с пабликом в сертификате.


 
xayam ©   (2010-06-11 23:00) [10]


> Медвежонок Пятачок ©   (11.06.10 22:42) [8]
> в каком смысле подписать исходники?

вот допуcтим такая ситуация. Сервер и Клиент пишет одна организация. Весь код и Сервера, и Клиента выкладывает для всех, не ограничивая его использование/изменение/распространение. НО. Если с помощью клиента пользователь подключается к исходному Серверу этой самой организации (теоретически программу можно установить на любой сервер), то у Сервера организации появляется такая задача-проблема: определить с помощью его исходников идет подключение или нет (исходники изменены/переписаны с нуля)? Вот для этого в принципе и нужно как-то "подписать" исходники (php)

> там описан не сам сеанс а момент когда издателю сертификата
> приходит запрос на выпуск сертификата

это ты где вычитал такое?


 
Медвежонок Пятачок ©   (2010-06-11 23:08) [11]

это ты где вычитал такое?

я не вычитал, я не теоретик.
я лет 10 как проектирую подобные системы.
и до сих пор ни одной осечки не было.

если сервер и клиент самописный, и серверная сторона занимается выпуском клиентских сертификатов, то проблемы вообще нет.

главное для вас - это принять запрос на выпуск клиентского сертификата от того, кто действительно является тем, на кого выпускается сертификат.

когда дойдет дело до информационного обмена, то на сервер придет посылка зашифрованная в адрес сервера и подписанная клиентом.

из этой посылки тебе будет доступно:
- имя издателя клиентского сертификата
- отпечаток (хеш) сертификата издателя.
- имя владельца и отпечаток клиентского сертификата.

этого достаточно чтобы убедится, что автор посылки обладает сертификатом, который был выпущен сервером.


 
xayam ©   (2010-06-11 23:19) [12]


> Медвежонок Пятачок ©   (11.06.10 23:08) [11]
> я не вычитал, я не теоретик.
> я лет 10 как проектирую подобные системы.
> и до сих пор ни одной осечки не было.
> Медвежонок Пятачок ©   (11.06.10 22:51) [9]
> по приведенной цитате из педивикии описано нечто иное. там
> описан не сам сеанс а момент когда издателю сертификата
> приходит запрос на выпуск сертификата

????

> если сервер и клиент самописный, и серверная сторона занимается
> выпуском клиентских сертификатов, то проблемы вообще нет.

вот по поводу сертификатов можно подробнее (или где хорошо описано) описать весь процесс от подачи заявки на сертификат до проверки подлинности клиента сервером, я пока в это не очень хорошо въехал.


 
Медвежонок Пятачок ©   (2010-06-11 23:31) [13]

ну фик знает как объяснить.

стоит допустим сервер.
если я не легитимный участник системы, но у меня есть сертификат сервера, то я смогу зашифровать данные в адрес его, и сервер благополучно их примет и расшифрует.

если данные при этом не подписаны, то сервер без понятия кто именно является автором этих данных.

если же данные подписаны, то :
сервер проверяет эцп и делает вывод о их целостности.

Если я (нелегитимный участник) подпишу данные, то сервер все равно сможет проверить эцп и проверка ему скажет, что все ок. (данные после их подписания мной никем не изменялись)

Но этого тоже мало.

Допустим я еще спер логин и пароль у легального участника системы.
Формирую посылку серверу, указываю логин и пароль.

Сервер расшифрует посылку, проверит эцп, получит логин и пароль.
И все будет в норме как и у любого другого участника системы.

Но если сервер посмотрит данные сертификата которым все это было подписано, то он увидит что:

1. отпечаток моего сертификата не тот, что прописан в свойствах юзера с переданным мной краденым логином

2. издатель моего левого сертификата - не сам сервер. (у меня не может быть сертификата, изданного твоим сервером, если только я не спер еще и приватный ключ сервера)

вот типа и все.


 
Медвежонок Пятачок ©   (2010-06-12 00:00) [14]

если точнее, то все еще проще.

я - злоумышленник.
у меня допустим есть :

имя владельца сертификата легитимного участника.
имя владельца серверного сертификата.

я делаю поддельный сертификат, подставляя эти имена в его поля subject и issuer, затем подписываю сертификат своим левым приватным ключом.

сертификат получается формально валидным и очень похожим на подделываемый сертификат, но его отпечаток (поле которое при просмотре сертификата видно на вкладке "состав" и так и называется "отпечаток") совсем другой и отличается от отпечатка настоящего сертификата.

вот по этому-то атрибуту сервер и в состоянии отличить настоящего участника от поддельного.



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2010.09.05;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.003 c
2-1276157798
novichek
2010-06-10 12:16
2010.09.05
работа с БД


15-1271944492
JohnKorsh
2010-04-22 17:54
2010.09.05
Все ли IP адреса равноправны ?


2-1275975584
программер
2010-06-08 09:39
2010.09.05
500 пикселей размесить в формате 4:3


15-1276159597
George
2010-06-10 12:46
2010.09.05
Iptables


15-1276185441
da4
2010-06-10 19:57
2010.09.05
Кто сильнее, Тигр Лев или Медведь?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский