Обновить

Как двое договариваются о секрете, крича на всю площадь: алгоритм Диффи-Хеллмана без формул

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели25K
Всего голосов 119: ↑117 и ↓2+146
Комментарии50

Комментарии 50

Если уж Алиса, тогда, наверное, Вова, а не Коля? А в русскоязычной традиции, вроде, агентов именуют Петей и Васей...

Тоже залип на секунду, но потом вспомнил про Булычёва)

Ох, спасибо, этого я не вспомнил :)

Возможно, скопипащено с других статей, где Алиса была: https://habr.com/ru/articles/726324/

Alice and Bob - это стандартные имена для двух агентов в теории протоколов. Я просто удивился, что Боба перевели Колей, а не Вовой :)

Вова прислал Еву слушать ;)

Если сохранять оригинальную логику имен и локализовать с учетом алфавита - тогда "Bob" скорее "Борис", а "Вова" уже идет третим, вместо "Carol"

Петя и Вася, используемые в русскоязычной литературе, сохраняют эту логику чуть видоизменённой ("первый/второй").

А я считаю, что имена сильно усложняют восприятие. Пусть будет муж-жена, мама-дочь, босс-зам, что угодно, чьи роли легко визуализируются. А третий путь будет шпион, ркн-овец, майор, диверсант.

А вот обратная задача: я говорю вам «стрелка стоит на 19», скажите, сколько шагов я сделал

Тумана напустили. Непонятно каких шагов, от какой точки отсчёта.

Да ладно, вы же не нейросеть, чтобы так контекст терять?! Или?

(к сожалению для этой красивой аналогии) краски его не передают.

Мне кажется, как-то можно передать: набор монохроматических линий спектра, в сумме дающих те же интегральные воздействия на два рецептора цвета человека. Для нас он оранжевый, но реальный спектр по нему не восстановить - их много будет соответствовать одному и тому же цвету. Если спектр - ключ, подбирать можно очень долго. Хотя эта аналогия больше подходит для коллизии хэш-функции

Ну только не на два.... примерно так на 2,5 рецептора. Зеленый детектрор силно на синий наползает по спектру - мутант просто. Однако все=таки не 2.

Когда ваш браузер открывал эту страницу, он буквально прокричал несколько чисел через весь интернет

Да что уж там “чисел”… адрес сайта он прокричал открытым текстом в ClientHello, вот такая вот “приватность” :-(

Ну для этого уже придумали ECH. Но с такой идей решительно на согласен товарищ майор

Все, что Алиса крикнет Коле, услышит и Ева

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

Ну да, ну да. “Секюрити сру абскьюрити” - старый, добрый, работающий ТЫСЯЧЕЛЕТИЯМИ способ! А всяких там умников любящих покричать секреты на базаре - закидать … грузно-бурой … краской!

И ведь серьёзные и образованные дяди на должностях и, даже, не в органах - реально так думают! До сих пор помню как объяснял одному горе-безопаснику почему послал по почте простым текстом открытые ssh ключи …

нет ты не так всё понял

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

Отличная статья, аналогия с часами гораздо точнее красок — спасибо что честно обозначили ограничения метафоры.

Хочу добавить про MITM, потому что на практике это самое болезненное место. Когда мы реализовывали E2EE в своём мессенджере, столкнулись ровно с этим: ECDH даёт общий секрет, но сам по себе не отвечает на вопрос "а с кем именно я договорился?". В TLS эту проблему решают сертификаты и CA. Но в P2P мессенджере CA нет — и единственный надёжный способ это fingerprint: SHA-256 хэш публичного ключа, который пользователи сверяют вне системы (показывают экраны друг другу, зачитывают по телефону). Та же концепция что "Safety numbers" в Signal.

Интересный нюанс: если fingerprint не сверили — вся последующая криптография теоретически бессмысленна. Не потому что алгоритм плохой, а потому что ты не знаешь чей ключ держишь. Это фундаментальное ограничение любого E2EE, которое часто замалчивают в маркетинге мессенджеров.

Вот аналогия с красками конечно очень странная

Ева узнала про жёлтый, камон

И в итоге Алиса с колей тоже жёлтый получили, пусть и через смешивание

В итоге то тут никакого секрета нет, это просто неправильная аналогия

Нет, жёлтый был базовым цветом для криптоцветовой операции. Получили они грязнобурый, но одинаковый. А вот Ева запарилась краски подбирать, чтобы получить такой же.

у евы ( если судить по аналогии ) уже есть нужная инфа

она может больше ничего не делать
just logic

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

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

но пример с краской тут не подходит, вот и всё

мне подошел, я краской не шифрую

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

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

которую получили в итоге и алиса и коля

что у евы ? желтая краска...

чисто логически, еве что бы узнать секрет даже ничего делать не пришлось, ей его и так сообщили

еще раз - Логически пример не подходит совсем

У вас логика какая-то не логичная. Читаем глазами:

Дальше каждый у себя дома выбирает секретный цвет. Алиса взяла красный, а Коля синий. Эти баночки никто никому не показывает, они вообще не покидают дом.

Теперь каждый смешивает общую желтую со своим секретом. У Алисы получается оранжевая смесь, у Коли зеленая. И вот этими смесями они обмениваются прямо через площадь, в открытую. Ева видит оранжевую и зеленую банки, может их сфотографировать, может даже отлить себе немного.

Последний ход. Алиса берет зеленую смесь Коли и доливает туда свой секретный красный. Коля берет оранжевую смесь Алисы и доливает свой синий. У обоих в стакане теперь желтый + красный + синий, просто в разном порядке. А краскам на порядок плевать, цвет получается одинаковый. Какой-то бурый, неважно какой именно, важно, что один и тот же.

То есть у Алисы секрет красный - К, у Коли синий - С.

Они смешивают Желтую - Ж - со своими секретами, и обмениваются ими:

Алиса получает и отправляет - КЖ

Коля получает и отправляет - СЖ

У Евы, соответственно, есть смеси - КЖ и СЖ.

Дальше Коля и Алиса смешивают краски:

Алиса берет полученную от Коли СЖ и добавляет к ней свой секрет К.

Алиса получает СЖК.

Коля берет полученную от Алисы КЖ и добавляет к ней свой секрет С.

Коля получает КЖС.

У Алисы и Коли один и тот же результат, состоящий из одной части Ж, одной части К, и одной части С. Порядок не важен!

Ева же имеет на руках КЖ и СЖ, и при смешении получает КСЖЖ - одну лишнюю часть Ж! Все, это другой ключ, другой цвет. Она знает чистую краску, которую совместно выбрали Коля и Алиса - желтую, Ж, но это ей никак не помогает. Даже волшебным образом удалив из КСЖЖ известную краску Ж она получит КС, что не является секретом Коли и Алисы. Вот в чем логика. Поняли теперь?

Да, понял, спасибо

Думал ещё можно ли как то убрать только 1 "ж" , но наверное никак

Зато если убрать две ж а потом добавить одну, Ева получит секретный ключ

Всё же тут пример с красками не работает

Ты не можешь "убрать две Ж, а потом добавить одну Ж" - я ж написал "если каким-то чудом", а чудес тут не бывает. Вообще в аналогии с красками речь идет на обывательском языке и для обывателя, а обыватель разделить мешанину из краски на составляющие не способен вообще никак.

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

С красками неудобная аналогия, плохо понимается.

И что в ней не понятного? Все ж кристально ясно. Если не понятно, то замените названия красок буквами, и рассуждайте как показано тут: https://habr.com/ru/companies/selectel/articles/1050536/#comment_30158208

Неее, это так не работает. Все же знают что если смешать желтую краску с синей - получится белая. /s

На первой картинке вообще в замке Фиолетовый цвет ! Он сбивает с толку, может как то графически ещё изобразить секреты ? С полосками красок ? А то тема действительно сложная.

И ещё я таки уверен, что во многих странах секретов быть не может. У многих государств, не скажу каких есть очень мощный " ректальный криптоанализатор " так называемый паяльник из 90 стых по простому. ))) Очень мощно взламывает любые шифры. Достаточно заполучить в свои руки Алису или Колю. А можно к Еве подсесть с паяльником и тогда 4 ые уши появятся у информации.

Как раз для тех случаев, когда ключи должны быть устойчивыми к разного рода влияниям придуманы такие вещи, как HSM и разные степени защиты от КС-1...3 и до КВ, обмазанные офицерами безопасности для доступа к ним по схеме 2-из-3, или 3-из-3. Так что на любой терморектальный криптоанализатор найдется своя мера противодействия. Банки, если что, так и работают, там приватные ключи из защищенного железа выковырять принципиально невозможно.

Я из этого поста не понял главной сути... Алиса и Коля знают своё кол-во шагов (секрет) и число на циферблате (публичное число). Но если они так легко совершили эти шаги, да ещё и так легко добавят свои шаги к шагам другого, то почему этого не может сделать Ева?
"Сделать N шагов вперед элементарно... А вот обратная задача... не светит никому" - так "обратная задача" и состоит в том, чтобы делать шаги вперёд от начального числа (23), а это, как говорилось, "элементарно".

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

Так она легко узнает секреты, если делать шаги вперёд элементарно.

Ну, давайте на практике из статьи выше - циферблат 23, шаг 5, публичные числа 8 и 19, как вы "элементарно" получите из этого общий секрет 2?

Циферблат на 23, шагаем умножением на 5, эти два числа публичные, Ева их знает. Алиса загадывает секрет: 6 шагов. Прошагала, стрелка встала на 8. Кричит через площадь: «восемь»!

Ева просто ставит стрелку на 23 (число публично) и шагает умножением на 5 (число публично) до тех пор, пока не получит 8 (число публично). Шагов получится 6, это и есть секрет. Ведь сказано: "шагать вперёд - элементарно".

И я изначально сказал:
Алиса и Коля знают своё кол-во шагов (секрет) и число на циферблате (публичное число). Но если они так легко совершили эти шаги, да ещё и так легко добавят свои шаги к шагам другого, то почему этого не может сделать Ева?


Т.е. если эти операции произвели Алиса и Коля (каждый у себя), то почему их вдруг не может произвести Ева? Мне кажется, в статье упущено что-то очень важное.

Это так не работает - в первом случае зная секрет Алиса и Коля не вычисляют значение всех шагов, останавливаясь на секрете, а возводят в степень один единственный раз, это моментально. Еве придется брутфорсить перебирая все шаги с начала и до тепловой смерти вселенной, за тем и берутся такие здоровые числа, как показано выше. Возведение в степень работает одинаково быстро для любого числа, хоть маленького, хоть большого, а вот перебор из адских хренолиардов таких возведений в степень - уже накладно.

Upd: ради точности поправлюсь - возведение в степень, конечно, моментально только условно, чем больше число - тем накладнее эта операция. Но, вся фишка в том, что для возведения в степень время растет логарифмически, а для перебора - экспоненциально.

Ничего не понял... А Алисы изначально есть секрет "6" и публичное число "8". Как она их получила? Каким волшебным образом?

Вы издеваетесь, или не пытаетесь читать? Там даже код на питухоне есть.

Алиса берет Охрененно Большое Число (в примере p), и генерирует себе секрет в этом диапазоне - еще одно охрененно большое число. Этот Секрет она никогда никуда не отправляет. Потом она вычисляет публичную часть - возводит в степень по модулю, то есть шаг умножения в степени Секрет по модулю ОхрененноБольшогоЧисла. Или иными словами:

ПубличнаяЧасть = ШагУмножения ^ Секрет mod ОхрененноБольшоеЧисло

где публично все, кроме Секрета. Можете попробовать вычислить из этого Секрет, счастья вам и здоровья.

Upd: Алиса и Коля обмениваются ПубличнымиЧастями. Потом каждый берёт ПубличнуюЧасть другого и возводит её в степень своего Секрета по модулю ОхрененноБольшогоЧисла. Благодаря магии коммутативности умножения, у обоих получается одно и то же ЕщеОдноОхрененноБольшоеЧисло - это уже их общий секрет. Ева видела все части обмена, но чтобы получить общий секрет, ей нужен чей-то Секрет, а Секреты никогда не покидали своих владельцев. поэтому ей остается только брутфорсить, а это займет все время мира.

А, ну так вот с этого и надо было начинать, что статья без понимания петухона просто не имеет смысла. Я разработчик, но петухон мне чужд.

А статья, получается, вводит в заблуждение, потому что слово "степень" там не упоминается ни разу, а говорится о некоем "шагании" с умножением на остаток, т.е. если секрет = 100, то читатель делает вывод: Алиса должна произвести 100 итераций (шагов).

Я разработчик, но петухон мне чужд.

На каком же языке вы программируете, если православное pow, прямо написанное в коде, вам не знакомо? Оно и в Си такое, и в джаве, и в c#, и везде повсеместно...

Мой путь: Basic->ASM->Pascal->C->C++->C# (где-то ещё PHP рядом пробегал). И нигде я не сталкивался с pow с тремя аргументами. Но я и не пытался понять код на петухоне, намеренно.

Но не суть. Я читал о DH с нормальными формулами, и там мне всё было понятно. Но это было давно, всё забылось, и я специально решил ничего не вспоминать, а попробовать понять всё из этой статьи. Посмотреть на эту статью глазами человека, далёкого от этого. И, как видим, это невозможно.

А всего-то нужно было добавить в статью такую фразу:
Чтобы продвинуться по циферблату вперёд сразу на произвольное (пусть даже очень большое) кол-во шагов, нужно затратить столько же времени, сколько и на один шаг.

В этом и есть суть DH. Но это нельзя понять из статьи.

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

Любому идиоту понятно, что суть должна быть в асимметрии, но из статьи непонятно, в чём она. В статье говорится, что "двигаться вперёд - элементарно". Так если это элементарно, и если Алиса уже сделала это миллиард раз, ну так и Ева сделает это миллиард раз. Это же элементарно!

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

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Информация

Сайт
slc.tl
Дата регистрации
Дата основания
Численность
1 001–5 000 человек
Местоположение
Россия
Представитель
Александр Шилов