?

Log in

 
 
11 October 2014 @ 12:58 pm
 
Ответ на криптозагадочку, заданную здесь.

Сперва пара моментов:

1. Одно из сильных преимуществ ассиметричных ключей над паролями в том, что одну и ту же пару "публичный-секретный ключ" можно использовать для аутентификациии против массы разных серверов, не беспокоясь о том, что владелец сервера сможет злоупотребить знанием публичного ключа клиента, чтобы выдавать себя за него - поскольку из публичного восстановить секретный ключ нельзя, господа Ривест, Шамир и Адлеман гарантируют это.

2. При изучении SSL, SSH и прочих протоколов на ассиметричных ключах, люди обычно сосредотачиваются на классическом сценарии, когда пара хороших честных ребят - Алиса и Боб - хотят пообщаться по секрету, в то время как злая ревнивая Мэллори желает перехватить разговор, выдавая себя то за Алису, а то и за Боба.

Но что если сценарий слегка другой? Допустим, есть у нас пара серверов. Оба снабжены легитимными сертификатами, подлинность которых заверена Verisign. Оба вполне на совесть защищены от атак. И на обоих серверах есть юзер, использующий свой один и тот же юзерский сертификат, чтобы доказывать каждому из серверов, что он - это он. И допустим, что алгоритм проверки, вправду ли юзер владеет парным секретным ключом работает так, как я предположил ранее. Что будет, если один из серверов поведёт себя слегка нечестно?

Скажем, вот так:


Что здесь происходит? Юзер пытается зайти на сервер1. Получает от него сертификат, убеждается, что всё ок. Получает требование предъявить сертификат со своим публичных ключом, предъявляет. После чего, чтобы доказать, что он и вправду знает парный секретный ключ, для чего шифрует им какое-то присланное случайное число и отсылает результат.

Вроде бы всё хорошо. Да вот только число это сервер1 не сам выдумывает - он в это время выполняет ту же последовательность супротив сервера2, на этот раз в качестве клиента. И случайный этот "челлендж" получает от него. После чего выдаёт серверу2 полученный от настоящего юзера результат.

Что получилось? С точки зрения юзера - он залогинен на сервере1. С точки зрения сервера2 - на нём залогинен юзер. Только на самом деле это сервер1. Который получает доступ ко всем данным юзера на сервере2 и может от его имени творить что угодно.

Получается вариант man-in-the-middle, только с целью не перехватывать или подделывать сообщения, а с целью кражи юзерской identity. Да, это довольно ограниченная кража - секретный ключ этим не вызнаешь, всякий раз для такого логина нужно активное участие юзера. Но если, скажем, сервер2 - сайт банка, то и так нефигово получиться может.

Авторы настоящих протоколов - SSL, SSH, SLIC - эту возможность учли. Вот потому способ доказательства знания секрета для сервера и для клиента разный. Серверу достаточно зашифровать случайный челлендж. А от юзера требуется подписать или зашифровать некий хэш, "покрывающий" обязательно и случайное нечто, и какие-то поля, идентифицирующие сервер. Которые в свою очередь проверяются привычными средствами до того, как юзерский ключ идёт в ход.

Впрочем, и опытные криптографы, случается, лажают - создатели SSH-1 о такой возможности вроде бы подумали, но у них всё равно нашли уязвимость, позволяющую ровно такую атаку провести. Что и послужило одной из причин, по которой SSH-1 решили забросить в пользу SSH-2.

У этой басни есть мораль, и смысл её прост. Хороший криптопротокол должен учитывать деятельность не только злокозненных Мэллори и Ев, но и нечестное поведение любого из законных участников.
 
 
Current Music: Lene Marlin - Sitting Down Here
 
 
 
Mithrilianmithrilian on October 11th, 2014 01:37 pm (UTC)
Как все сложно...
Кот Муцийcat_mucius on October 11th, 2014 01:41 pm (UTC)
А кому щас легко!
e2pii1e2pii1 on October 11th, 2014 06:57 pm (UTC)
Да, понятно теперь где дыра. Никому доверять нельзя, только БегинуРивесту, Шамиру и Адлеману :-) а что если и их взломают
Кот Муцийcat_mucius on October 11th, 2014 09:31 pm (UTC)
а что если и их взломают
В принципе, есть альтернатива в виде DSA (только для подписей, не шифрования) ECC (на всякий случай - я в том, как оно работает, не шарю ни черта).

Но всё равно конечно это будет даааа...
tsiryatsirya on October 11th, 2014 09:21 pm (UTC)
А почему Мэллори, а не привычная Ева? :)
Кот Муцийcat_mucius on October 11th, 2014 09:36 pm (UTC)
А оказывается, у них повадки разные: Ева только пассивными атаками промышляет (сиречь, не вмешивается в обмен), а Мэллори - пытается выдавать себя за одну из сторон. То, что называется man-in-the-middle (потому и имя на М), хотя, конечно, в таком случае girl-in-the-middle звучит гораздо логичней.
tsiryatsirya on October 11th, 2014 10:14 pm (UTC)
Черт побери, читаются, как герои сериала! Каждый со своим характером. Вот бы и вправду сериал такой снять, криптографический.
Кот Муцийcat_mucius on October 12th, 2014 08:30 pm (UTC)
Крипто-эротический.
А настоящая драма - вот она где.
tsiryatsirya on October 12th, 2014 08:44 pm (UTC)
Это уже крипто-психический, про раздвоение личности :).