AVK Selected
Показавшиеся интересными, на мой вкус, посты
Ассиметричная криптография на пальцах
13.12.2013
|
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... )))
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... )))
13.12.2013 4 комментария |
_>Здравствуйте, 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 и оба юзера будут думать, что они друг с другом разговаривают.
От этого же как то защищаются, вроде всякие сертификаты как раз для это?? Можно на таком же уровне, для дошкольников, объяснить как они работают??
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. Т.е. при условии, что ни один официальных центров сертификации не занимается жульничеством, система даёт гарантию, что никто не влезет посередине подобного соединения.
_>Соответственно дальше действия простые — другая сторона получив p1, m, s и имея у себя r путём простейшей проверки может гарантированно убедиться, что p1 честно соответствует m (а это обычно что-то вроде текста "ООО Рога и Копыта").
А есть способы убедиться, что "ООО" это именно то что нам нужно? Например, я скачиваю программу, а она подписана "Microsoft Corporation". Как понять, что это именно M$? Ведь написать можно и "Microsoft Inc", да и просто "Microsoft"...
P.S. Большое спасибо за объяснения, очень доходчиво. Книжку выпустить не планируете?
B>А есть способы убедиться, что "ООО" это именно то что нам нужно? Например, я скачиваю программу, а она подписана "Microsoft Corporation". Как понять, что это именно M$? Ведь написать можно и "Microsoft Inc", да и просто "Microsoft"...
В общем случае нет такого способа. Хотя, думаю, что центры сертификации не пропустят вот прямо такие копии. Там же требуется предоставлять документы при получение сертификата. Ну и в случае сертификатов для сайтов есть ещё дополнительный нюанс (и он обязательно проверяемый браузером) — в самом сертификате указывается домен и если он будет использован для связи с сайтом с другого домена, то браузер будет громко ругаться.
B>P.S. Большое спасибо за объяснения, очень доходчиво. Книжку выпустить не планируете?
Спасибо отзыв. ) про книжку даже никогда не приходило такое в голову. Я как бы 100% практик и в программирование и в бизнесе, а форум просто для развлечения и разминки ума. ) Хотя образование у меня наоборот максимально академическое — может это и накладывает отпечаток. )))