AVK Selected

Показавшиеся интересными, на мой вкус, посты

Ассиметричная криптография на пальцах

alex_public alex_public
Здравствуйте, Dair, Вы писали:

D>Для меня загадка — современные алгоритмы шифрования (криптографии). Мат.аппарата не хватает


D>На практическом уровне — public key/private key понятно, но чо там внутри — чисто магия.


Да ладно, если говорить о принципах, то там же всё вообще тривиально.

Вот смотри, предположим у нас есть функция y=exp(x); и соответственно обратная ей x=ln(y); Причём (и это ключевой момент) ln вычисляется намного дольше, чем exp. Кстати, это и для обычных exp и ln справедливо, а в асимметричной криптографии используется спец. вариант, в котором ln вычисляется годами... Теперь, при наличие пары таких функций, мы можем тривиально наладить защищённый канал.

Вот предположим у нас есть два человека (1 и 2) с каждый стороны и ещё третий, прослушивающий канал. 1 и 2 генерируют по одному случайному числу k1 и k2. Затем считают от них p1=exp(k1) и p2=exp(k2). И отсылают друг другу. В итоге у первого есть k1 и p2, у второго k2 и p1, а у прослушивающего p1 и p2. Теперь первые два считают число z=p2^k1=p1^k2=exp(k1*k2) — теперь у них есть некий общий секрет z, который они могут использовать например как ключ для обычного блочного шифрования данных и спокойно обмениваться ими. Ну а бедный подслушивающий будет занят вычислениями ln(p1) или ln(p2), для того чтобы получить тот же самый z...

А весь так называемый крутой мат. аппарат там как раз сводится к доказательствам, что все современные методы математики не умеют быстро посчитать ln... )))
Jack128
Jack128 Есть ли вещи, которые вы прницпиально не понимаете...
25.12.2013 08:48
Здравствуйте, alex_public, Вы писали:

_>Здравствуйте, Dair, Вы писали:


D>>Для меня загадка — современные алгоритмы шифрования (криптографии). Мат.аппарата не хватает


D>>На практическом уровне — public key/private key понятно, но чо там внутри — чисто магия.


_>Да ладно, если говорить о принципах, то там же всё вообще тривиально.


_>Вот смотри, предположим у нас есть функция y=exp(x); и соответственно обратная ей x=ln(y); Причём (и это ключевой момент) ln вычисляется намного дольше, чем exp. Кстати, это и для обычных exp и ln справедливо, а в асимметричной криптографии используется спец. вариант, в котором ln вычисляется годами... Теперь, при наличие пары таких функций, мы можем тривиально наладить защищённый канал.


_>Вот предположим у нас есть два человека (1 и 2) с каждый стороны и ещё третий, прослушивающий канал. 1 и 2 генерируют по одному случайному числу k1 и k2. Затем считают от них p1=exp(k1) и p2=exp(k2). И отсылают друг другу. В итоге у первого есть k1 и p2, у второго k2 и p1, а у прослушивающего p1 и p2. Теперь первые два считают число z=p2^k1=p1^k2=exp(k1*k2) — теперь у них есть некий общий секрет z, который они могут использовать например как ключ для обычного блочного шифрования данных и спокойно обмениваться ими. Ну а бедный подслушивающий будет занят вычислениями ln(p1) или ln(p2), для того чтобы получить тот же самый z...


Насколько я понимаю — это все работает только в том случае, если третий человек умеет только читать канал, но не умеет в него писать?? Потому что если он умеет писать, то он банально перехватит от юзера1 его p1 и заменит на p1_fake=exp(k1_fake). для юзера2 тоже самое, его p2 меняется на p2_fake=exp(k2_fake) и отправляется юзеру1.
В результате слушатель может читать сообщения и того и другого юзера. ПРичему например полученное от юзера1 сообщение он может зашифровать используя p2^k1_fake и отправить юзеру2 и оба юзера будут думать, что они друг с другом разговаривают.

От этого же как то защищаются, вроде всякие сертификаты как раз для это?? Можно на таком же уровне, для дошкольников, объяснить как они работают??
alex_public
alex_public
27.12.2013 02:39
Здравствуйте, Jack128, Вы писали:

J>Насколько я понимаю — это все работает только в том случае, если третий человек умеет только читать канал, но не умеет в него писать?? Потому что если он умеет писать, то он банально перехватит от юзера1 его p1 и заменит на p1_fake=exp(k1_fake). для юзера2 тоже самое, его p2 меняется на p2_fake=exp(k2_fake) и отправляется юзеру1.

J>В результате слушатель может читать сообщения и того и другого юзера. ПРичему например полученное от юзера1 сообщение он может зашифровать используя p2^k1_fake и отправить юзеру2 и оба юзера будут думать, что они друг с другом разговаривают.

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

J>От этого же как то защищаются, вроде всякие сертификаты как раз для это?? Можно на таком же уровне, для дошкольников, объяснить как они работают??


Да там всё очень просто. С одной стороны (которую требуется идентифицировать) присылается не просто p1=exp(k1), а: он же, плюс информация о ресурсе m и плюс электронная подпись s с помощью некоторого ключа c. Электронная подпись s — это всего лишь некий хэш от m и p1, зашифрованный (что-то типа s=exp(h(m, p1)*c); ) ключoм c. А ключ c — это опять же некое случайное число, хранящееся в главном сейфе (типа мегаценность!) центра сертификации. При этом r=exp(c) (так называемый корневой сертификат этого центра) предустановлен в поставке браузера (если мы например про https говорим). Собственно набор p1, m, s и образуют "сертификат" (хотя там ещё куча всякой служебной информации есть, типа сроков, имени центра и т.п., но это уже не главное). Соответственно дальше действия простые — другая сторона получив p1, m, s и имея у себя r путём простейшей проверки может гарантированно убедиться, что p1 честно соответствует m (а это обычно что-то вроде текста "ООО Рога и Копыта"). Очевидно, что прислать другой p1 для того же m невозможно, без знания какого-то нибудь из c. Т.е. при условии, что ни один официальных центров сертификации не занимается жульничеством, система даёт гарантию, что никто не влезет посередине подобного соединения.
Basil2
Basil2
05.01.2014 07:03
Здравствуйте, alex_public, Вы писали:

_>Соответственно дальше действия простые — другая сторона получив p1, m, s и имея у себя r путём простейшей проверки может гарантированно убедиться, что p1 честно соответствует m (а это обычно что-то вроде текста "ООО Рога и Копыта").


А есть способы убедиться, что "ООО" это именно то что нам нужно? Например, я скачиваю программу, а она подписана "Microsoft Corporation". Как понять, что это именно M$? Ведь написать можно и "Microsoft Inc", да и просто "Microsoft"...


P.S. Большое спасибо за объяснения, очень доходчиво. Книжку выпустить не планируете?
alex_public
alex_public
06.01.2014 01:30
Здравствуйте, Basil2, Вы писали:

B>А есть способы убедиться, что "ООО" это именно то что нам нужно? Например, я скачиваю программу, а она подписана "Microsoft Corporation". Как понять, что это именно M$? Ведь написать можно и "Microsoft Inc", да и просто "Microsoft"...


В общем случае нет такого способа. Хотя, думаю, что центры сертификации не пропустят вот прямо такие копии. Там же требуется предоставлять документы при получение сертификата. Ну и в случае сертификатов для сайтов есть ещё дополнительный нюанс (и он обязательно проверяемый браузером) — в самом сертификате указывается домен и если он будет использован для связи с сайтом с другого домена, то браузер будет громко ругаться.

B>P.S. Большое спасибо за объяснения, очень доходчиво. Книжку выпустить не планируете?


Спасибо отзыв. ) про книжку даже никогда не приходило такое в голову. Я как бы 100% практик и в программирование и в бизнесе, а форум просто для развлечения и разминки ума. ) Хотя образование у меня наоборот максимально академическое — может это и накладывает отпечаток. )))