Домой / Группы / Асимметричное шифрование. Как это работает? Современные алгоритмы шифрования

Асимметричное шифрование. Как это работает? Современные алгоритмы шифрования

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

Думаю, что многие из Вас пользуются такой штукой как , а значит, скорее всего, еще и Wi-Fi на них для Ваших ноутбуков, планшетов и прочих мобильных устройств.

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

Само собой, что помимо пароля есть еще и всякие разные типы шифрования этого самого пароля, точнее говоря, Вашего Wi-Fi протокола, чтобы им не просто не пользовались, но и не могли взломать.

В общем, сегодня хотелось бы немного поговорить с Вами о такой вещи как WiFi шифрование, а точнее этих самых WPE, WPA, WPA2, WPS и иже с ними.

Готовы? Давайте приступим.

WiFi шифрование - общая информация

Для начала сильно упрощенно поговорим о том как выглядит аутентификация с роутером (сервером), т.е как выглядит процесс шифрования и обмена данными. Вот такая вот у нас получается картинка:

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

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

Тип 1 - OPEN

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

Именно по такому принципу работают проводные сети - в них нет встроенной защиты и «врезавшись» в неё или просто подключившись к хабу/свичу/роутеру сетевой адаптер будет получать пакеты всех находящихся в этом сегменте сети устройств в открытом виде.

Однако с беспроводной сетью «врезаться» можно из любого места - 10-20-50 метров и больше, причём расстояние зависит не только от мощности вашего передатчика, но и от длины антенны хакера. Поэтому открытая передача данных по беспроводной сети гораздо более опасна, ибо фактически Ваш канал доступен всем и каждому.

Тип 2 - WEP (Wired Equivalent Privacy)

Один из самых первых типов Wifi шифрования это WEP . Вышел еще в конце 90 -х и является, на данный момент, одним из самых слабых типов шифрования.

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

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

Ситуация усугубляется тем, что пароли в WEP - это либо 40 , либо 104 бита, что есть крайне короткая комбинация и подобрать её можно за секунды (это без учёта ошибок в самом шифровании).

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

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

Тип 3 - WPA и WPA2 (Wi-Fi Protected Access)

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

Собственно, поколение этих типов шифрования пришло на смену многострадальному WEP . Длина пароля - произвольная, от 8 до 63 байт, что сильно затрудняет его подбор (сравните с 3, 6 и 15 байтами в WEP ).

Стандарт поддерживает различные алгоритмы шифрования передаваемых данных после рукопожатия: TKIP и CCMP .

Первый - нечто вроде мостика между WEP и WPA , который был придуман на то время, пока IEEE были заняты созданием полноценного алгоритма CCMP . TKIP так же, как и WEP , страдает от некоторых типов атак, и в целом не сильно безопасен.

Сейчас используется редко (хотя почему вообще ещё применяется - мне не понятно) и в целом использование WPA с TKIP почти то же, что и использование простого WEP .

Кроме разных алгоритмов шифрования, WPA (2) поддерживают два разных режима начальной аутентификации (проверки пароля для доступа клиента к сети) - PSK и Enterprise . PSK (иногда его называют WPA Personal ) - вход по единому паролю, который вводит клиент при подключении.

Это просто и удобно, но в случае больших компаний может быть проблемой - допустим, у вас ушёл сотрудник и чтобы он не мог больше получить доступ к сети приходится менять пароль для всей сети и уведомлять об этом других сотрудников. Enterprise снимает эту проблему благодаря наличию множества ключей, хранящихся на отдельном сервере - RADIUS .

Кроме того, Enterprise стандартизирует сам процесс аутентификации в протоколе EAP (E xtensible A uthentication P rotocol), что позволяет написать собственный алгоритм.

Тип 4 - WPS/QSS

Wifi шифрование WPS , он же QSS - интересная технология, которая позволяет нам вообще не думать о пароле, а просто нажать на кнопку и тут же подключиться к сети. По сути это «легальный» метод обхода защиты по паролю вообще, но удивительно то, что он получил широкое распространение при очень серьёзном просчёте в самой системе допуска - это спустя годы после печального опыта с WEP .

WPS позволяет клиенту подключиться к точке доступа по 8-символьному коду, состоящему из цифр (PIN ). Однако из-за ошибки в стандарте нужно угадать лишь 4 из них. Таким образом, достаточно всего-навсего 10000 попыток подбора и вне зависимости от сложности пароля для доступа к беспроводной сети вы автоматически получаете этот доступ, а с ним в придачу - и этот самый пароль как он есть.

Учитывая, что это взаимодействие происходит до любых проверок безопасности, в секунду можно отправлять по 10-50 запросов на вход через WPS , и через 3-15 часов (иногда больше, иногда меньше) вы получите ключи от рая.

Когда данная уязвимость была раскрыта производители стали внедрять ограничение на число попыток входа (rate limit ), после превышения которого точка доступа автоматически на какое-то время отключает WPS - однако до сих пор таких устройств не больше половины от уже выпущенных без этой защиты.

Даже больше - временное отключение кардинально ничего не меняет, так как при одной попытке входа в минуту нам понадобится всего 10000/60/24 = 6,94 дней. А PIN обычно отыскивается раньше, чем проходится весь цикл.

Хочу ещё раз обратить ваше внимание, что при включенном WPS ваш пароль будет неминуемо раскрыт вне зависимости от своей сложности. Поэтому если вам вообще нужен WPS - включайте его только когда производится подключение к сети, а в остальное время держите выключенным.

Послесловие

Выводы, собственно, можете сделать сами, а вообще, само собой разумеется, что стоит использовать как минимум WPA , а лучше WPA2 .

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

Как и всегда, если есть какие-то вопросы, дополнения и всё такое прочее, то добро пожаловать в комментарии к теме про Wifi шифрование .

PS : За существование этого материала спасибо автору Хабра под ником ProgerXP . По сути вся текстовка взята из его материала , чтобы не изобретать велосипед своими словами.

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

Основная функция

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

Метод хеширования

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

Метод хеширования отличается от других методов кодирования тем, что после кодирования хеш не может быть расшифрован или изменен. Это значит, что если злоумышленник получит хеш код, он не сможет его декодировать и получить исходное сообщение. Распространенные методы хеширования: Message Digest 5 (MD5) и Secure Hashing Algorithm (SHA).

Симметрические методы

Симметрическое шифрование, которое еще называется шифрованием с частным ключом, является одним из старейших и самым безопасным методом шифрования. Термин «частный ключ» возник потому, что при шифровании и расшифровке данных используется ключ, который должен остаться засекреченным, так как любой обладатель данного ключа может прочитать закодированное сообщение. Отправитель кодирует информацию, используя ключ, а получатель использует тот же ключ для расшифровки данных.

Этот метод кодирования используется для кодирования потока данных или блоков данных. В зависимости от объема данных, которые нужно зашифровать или расшифровать за одни раз. В потоковом режиме кодируется каждая отдельная единица информации, тогда как при блочном методе кодируются отдельные блоки информации. Распространенные методы симметрического кодирования: Data Encryption Standard (DES), Advanced Encryption Standard (AES) и International Data Encryption Algorithm (IDEA).

Асимметричные методы

Асимметричный метод шифрования или метод кодирования с открытым ключом, более безопасен, чем симметрический метод шифрования. Это тип кодирования использует два ключа, частный или закрытый ключ, и открытый ключ. Открытый ключ используется для кодирования информации и передается в открытом канале, а частный ключ, используемый для расшифровки данных, имеется только у получателя. Распространенные алгоритмы, использующие асимметричный метод шифрования RSA и Diffie-Hellman.

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

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

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

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

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

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

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

И наконец, последний фрагмент головоломки - это ключи. Они различаются по длине и, следовательно, по силе: ведь чем длиннее ключ, тем больше число возможных комбинаций. Скажем, если программа шифрования использует 128-битовые ключи, то ваш конкретный ключ будет одной из 3,4 триллиона миллиардов миллиардов миллиардов, или 2128 возможных комбинаций нулей и единиц. Хакер с большей вероятностью выиграет в лотерею, чем взломает такой уровень шифрования методом «грубой силы» (т. е. планомерно пробуя ключи, пока не встретится нужный). Для сравнения: чтобы подобрать на стандартном ПК симметричный 40-битовый ключ, специалисту по шифрованию потребуется около 6 часов. Однако даже шифры со 128-битовым ключом до некоторой степени уязвимы; у профессионалов имеются изощренные методы, которые позволяют взламывать даже самые сложные коды.

Незримые защитники

Шифрование применялось в военных целях с 479 г. до н. э.: как сообщает древнегреческий историк Геродот, секретные донесения на деревянных табличках, покрытых воском, предупредили спартанских вождей о надвигающемся вторжении персов. В информационных системах предприятий шифрование также используется уже много лет. А домашние пользователи начинают приобщаться к нему только сейчас, причем иногда они об этом и не знают.

Так, Microsoft Internet Explorer и Netscape Communicator содержат встроенные средства шифрования для операций электронной торговли. Без каких бы то ни было указаний со стороны пользователя номера кредитных карточек передаются с компьютера пользователя на Web-сервер зашифрованными по симметричному протоколу SSL (Secure Sockets Layer). По умолчанию используются 40-битовые ключи, но для обоих браузеров доступна также версия со 128-битовыми ключами.

Можно сыграть в защите своих данных и более активную роль. Популярные почтовые программы, в том числе Microsoft Outlook и Lotus Notes, в настоящее время позволяют шифровать письма. Многие «почтальоны» поддерживают протокол асимметричного шифрования S/MIME (Secure MIME, защищенный MIME), хотя лишь немногие пользователи его применяют. Для работы с S/MIME требуется цифровой идентификатор - «сертификат», который нужно покупать у компаний, таких как VeriSign, за 15 долл. в год.

Дополнительную защиту могут обеспечить автономные утилиты, которые шифруют не только почтовые сообщения, но и файлы с изображениями, документы, папки на жестком диске и т. д. Наиболее популярной из них является PGP. Ее бесплатную версию для некоммерческого использования можно получить по адресу web.mit.edu/network/pgp.html.

Аналитики предполагают, что применение систем сильного шифрования расширится благодаря недавним изменениям в регулировании экспорта криптографических систем Министерством торговли США. До 13 января большинство программ шифрования проходили по категории вооружений и подпадали под те же экспортные ограничения, что ручные гранаты или ракеты. Экспорт шифровальных программ с ключами длиннее 40 бит запрещался под страхом высокого штрафа или тюрьмы. Новые правила разрешают вывоз из США некоторых систем шифрования. По словам аналитиков, поначалу это не будет иметь серьезного эффекта, поскольку большинство шифровальных программ созданы за пределами Штатов, а импорт ПО этого типа уже был разрешен. Выгоду из изменений в законодательстве должны извлечь производители ПО, которым больше не нужно будет разрабатывать криптографические средства за границей.

Эндрю Брандт, Александра Красне

Об авторах

Эндрю Брандт - внештатный редактор PC World, Александра Красне - редактор и корреспондент PC World.

Симметричное шифрование

1 Чтобы послать зашифрованное сообщение, отправитель сочиняет его и придумывает шифровальный ключ. 2 Он пересылает ключ получателю по каналу, отличному от того, которым пойдет сообщение. 3 Программа шифрования превращает открытый текст в зашифрованный. 4 Зашифрованный текст пересылается получателю. 5 Получатель прочитывает его, используя имеющийся у него ключ.

Асимметричное шифрование

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

Мало кто знает как именно работает асимметричное шифрование. К примеру есть люди которые не считают протокол https какой-либо адекватной защитой передаваемых данных. И как правило на попытку убедить в обратном, они отвечают что-то в духе «если мы передаем зашифрованные данные, то мы должны сказать как их расшифровывать, а эту информацию можно перехватить и, следовательно, расшифровать данные». А на аргументы, что это не так и в основу положено асимметричное шифрование, поступает ответ «Ну и что?».

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

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

Кстати почему Алиса и Боб? Об этом есть кратенькая статья на википедии: Алиса, Боб и Ева . Чтобы было понятнее, Алиса и Боб хотят обменяться сообщениями, а Ева пытается эти сообщения перехватить и прочесть.

Немного истории

Криптография прошлых веков имела одну огромную проблему — проблема передачи ключей. В те времена существовали только так называемые «симметричные» шифры — шифры при котором данные шифруются и расшифровываются одним и тем же ключом.

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

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

До 70-ых годов, эта проблема настолько стала привычной, что считался аксиомой тот факт, что для передачи сообщения нужно передавать и ключ которым сообщение зашифровано (причем некоторых люди до сих пор считают именно так). Но в 76 году Диффи и Хеллман предложили свой «метод экспоненциального обмена ключей». С этих годов и началось развитие асимметричных криптосистем.

Немножко реальной жизни

Прежде чем изучать какой либо алгоритм, нужно представить как он работает. И самый простой способ — это сравнить его с работой чего-то в реальности.

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

Естественно на почте прочитать это письмо не могут, но его не может прочитать и сам Боб, так как у него нет ключа которым закрыт замок. Алиса, конечно, может взять еще один железный ящик, положить в него ключ от предыдущего, и отправить его Бобу, но его Боб тоже не сможет открыть…

Единственный путь это все же сделать дубликат ключа и дать его Бобу при личной встрече…

И вот начинает казаться что обмен ключами является неизбежной частью шифрования — или все-таки нет?

Представим другую картину. Распишу пошагово:

  1. Алиса кладет свое письмо в железный ящик и, заперев его на замок, отправляет Бобу.
  2. Боб при получении ящика, (внимание!) берет свой замок и, дополнительно заперев им ящик, отправляет обратно.
  3. Алисе ящик приходит уже с двумя замками (напомню с первым замком Алисы от которого у нее есть ключ, и со вторым — Боба, от которого ключ есть есть только у Боба).
  4. Алиса снимает свой замок, и отправляет ящик обратно Бобу
  5. Бобу приходит ящик с уже одним его замком от которого у него есть ключ
  6. Боб отпирает оставшийся его замок своим ключом, и читает сообщение

Значение этой кратенькой истории огромно. Она показывает что два человека могут передавать секретное сообщение без обмена ключами. Вдумайтесь! Эта история фактически рушит все аксиомы на которых была построена тогдашняя криптография. Да мы получаем некоторое усложнение процесса (ящик пришлось пересылать три раза), но результат…

Вернемся к криптографии

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


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


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

Вернемся к математике

Идея с ящиком, о которой я описывал выше, вдохновили Диффи и Хеллмана искать способ передачи сообщения. В конце концов они пришли к использованию односторонних функций.

Что такое односторонняя функция? К примеру есть функция удвоение, т.е удвоить(4)=8 , она двухсторонняя, т.к. из результата 8 легко получить исходное значение 4. Односторонняя функция — та функция после применения которой практически невозможно получить исходное значение. К примеру смешивание желтой и синей краски — пример односторонней функции. Смешать их легко , а вот получить обратно исходные компоненты — невозможно . Одна из таких функций в математике — вычисление по модулю .

За основу алгоритма Хеллман предложил функцию Y x (mod P) . Обратное преобразование для такой функции очень сложно, и можно сказать что, по сути, заключается в полном переборе исходных значений.

К примеру вам сказали, что 5 x (mod 7) = 2 , попробуйте найдите x , а? Нашли? А теперь представьте что за Y и P взяты числа порядка 10 300 .

Кстати сказать, для повышения стойкости, число P должно являться простым числом, а Y — являться первообразным корнем по модулю P . Но так как мы все же пытаемся понять теорию, то смысла заморачиваться на этом я не вижу.

Алгоритм Диффи-Хеллмана

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

Алиса Боб
Этап 1 Оба участника договариваются о значениях Y и P для общей односторонней функции. Эта информация не является секретной. Допустим были выбраны значения 7 и 11 . Общая функция будет выглядеть следующим образом: 7 x (mod 11)
Этап 2 Алиса выбирает случайное число, например 3 A Боб выбирает случайное число, например 6 , хранит его в секрете, обозначим его как число B
Этап 3 Алиса подставляет число A 7 3 (mod 11) = 343 (mod 11) = 2 a Боб подставляет число B в общую функцию и вычисляет результат 7 6 (mod 11) = 117649 (mod 11) = 4 , обозначает результат этого вычисления как число b
Этап 4 Алиса передает число a Бобу Боб передает число b Алисе
Этап 5 Алиса получает b от Боба, и вычисляет значение b A (mod 11) = 4 3 (mod 11) = 64 (mod 11) = 9 Боб получает a от Алисы, и вычисляет значение a B (mod 11) = 2 6 (mod 11) = 64 (mod 11) = 9
Этап 6 Оба участника в итоге получили число 9 . Это и будет являться ключом.

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

Причем обратите внимание, что для получения ключа в конечной формуле, любому человеку нужно иметь три значения:

  • Значения a и P , и секретное число Боба B
  • или значения b и P , и секретное число Алисы A

Но секретные числа по каналу не передаются! Еве не получится восстановить ключ, не имея чьего-нибудь секретного числа. Почему — я писал выше, данная функция является односторонней. Попробуйте решите уравнение 4 x (mod 11) = 2 y (mod 11) найдя x и y .

Чтобы было понятнее, как работает схема Хеллмана, представьте шифр, в котором в качестве ключа каким-то образом используется цвет:

Допустим вначале, что у всех, включая Алису, Боба и Еву, имеется трехлитровая банка, в которую налит один литр желтой краски. Если Алиса и Боб хотят договориться о секретном ключе, они добавляют в свои банки по одному литру своей собственной секретной краски.

Алиса может добавить краску фиолетового оттенка, а Боб — малинового. После этого каждый из них посылает свою банку с перемешанным содержимым другому.

И наконец, Алиса берет смесь Боба и подливает в нее один литр своей секретной краски, а Боб берет смесь Алисы и добавляет в нее один литр своей секретной краски. Краска в обеих банках теперь станет одного цвета, поскольку в каждой находится по одному литру желтой, фиолетовой и малиновой краски.

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

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

Все равно непонятно? Тогда смотрим видео:

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

Асимметричное шифрование

асимметричный алгоритм предполагает под собой наличие двух ключей — публичного и приватного. То есть сообщение шифруется публичным ключом, а расшифровывается приватным и ни как иначе. Собственно именно эту концепцию сформулировал Диффи.

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


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

Любой способен запереть замок, просто защелкнув его, чтобы он закрылся, но отпереть его может только тот, у кого есть ключ. Запереть замок (зашифровывание) легко, почти все могут это сделать, но открыть его (расшифровывание) имеет возможность только владелец ключа. Понимание того, как защелкнуть замок, чтобы он закрылся, ничего не скажет вам, как его отпереть.

Можно провести и более глубокую аналогию.

Представьте, что Алиса проектирует замок и ключ. Она бдительно охраняет ключ, но при этом изготавливает тысячи дубликатов замков и рассылает их по почтовым отделениям по всему миру. Если Боб хочет послать сообщение, он кладет его в коробку, идет на местный почтамт, просит «замок Алисы» и запирает им коробку. Теперь уже ему не удастся открыть коробку, но когда коробку получит Алиса, она сможет открыть ее своим единственным ключом.

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

Есть несколько алгоритмов реализующих асимметричное шифрование. Самый известный из них — RSA. Расписывать его я не вижу смысла, так как понять как он работает с ходу все равно не получится, да и лучше чем написано на википедии я написать все равно не смогу.

Заключение

Что же, надеюсь что, поняв как работает асимметричное шифрование изнутри, вы станете больше ему доверять и соответственно чаще пользоваться SSL =)

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

  1. tv

    Подбор такого ключа у вас займет времени ну оооочень много. Чуть больше чем существует вселенная. Даже на очень мощных компьютерах.

  2. Игорь

    Для чего нужна эта ахинея с открытыми ключами? Симметричные надёжней.
    Добрый день!
    Хороший сайт, понятно изложен материал, огромное спасибо автору. Попал сюда случайно в сентябре, когда искал информацию по практическому шифрованию.
    Пишу потому, что хочу спросить: Есть желающие узнать как найти числа для симметричного шифрования? Могу научить на пальцах как быстро проверить число Р на простоту (без поиска числа g) — но это вряд ли будет интересно. Самое интересное:
    Найти число Р любой длины и число g к нему. Никакие 2 в степени n плюс один (или минус один) при этом не использую. Естественно, это бесплатно. Есть даже сайт, где я выложил свою работу.

  • Уася Петровичъ

    Понимаю что прошло много времени, но все же отвечу для таких же как я новых читателей.

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

  • Евгений

    Огромное спасибо за статью!
    После прочтения почти все легло на свои полочки, обрело структуру, которую легко наращивать.
    Имея такую структуру легко генерировать правильные вопросы (полочка для атак MiTM, отдельное спасибо Михаилу:)).

    С точки зрения педагогики Вы сделали все идеально. Думаю Вы правы, что не добавили в эту статью атаки MiTM иначе был бы перегруз информационный.

    Видео прелестное, особенно учитывая его возраст.

    PS: использование метафор для объяснения «сложных» систем честно говоря трудно переоценить. Еще раз спасибо!

  • dbzix

    Из этой статьи я не уловил момент перехода от алгоритма Диффи-Хеллмана, где два абонента для получения секретного ключа обмениваются публичными данными и промежуточными результатами вычислений (в примере получилось целых 6 этапов) к тому этапу, где для шифрования используется некий публичный ключ, который затем дешифруется при помощи приватного (я здесь насчитываю всего 2 этапа передачи данных — отправка публичного ключа и отправка зашифрованного этим ключом сообщения).
    Т.е. я понимаю, что где-то между двумя этими объяснениями наверняка кроется много математики, и в итоге объяснение сводится к «это работает именно так, просто поверь». Но было бы наверное проще понять этот внезапный переход, если бы аналогию с красками распространили на объяснение сути шифрования публичным ключом с последующим дешифрованием приватным. А пока получается какое-то «Б работает потому-что А», в то время как между А и Б чёткой связи не прослеживается. По крайней мере для меня.
    Уважаемый автор, не будете ли вы так любезны пояснить мне сей мистический прыжок от А к Б? :) Спасибо!

  • Евгений

    Добрый день,

    Дано: есть формула Y^x (mod P).
    пример в статье основывается на формуле 7^x (mod 11)

    я взял для своего примера 4^x (mod 7)
    и у меня не получилось прийти к общему ключу.
    Вопрос: почему алгоритм в примере работает для 7^x (mod 11) и не работает для 4^x (mod 7)?

  • Jessi-jane
  • Андрей

    Спасибо, статья отличная!
    Только вот чуть не разобрался в алгоритме, в том, как высчитывать через модуль.
    Не подскажите, как высчитывать число В, если число А меньше модуля?
    Ну например:
    3(mod 13) = ?

    Я знаю, что если, например, нужно высчитать 625(mod 13), нужно 625/13, а потом наибольший возможный целый делитель (48) умножить на модуль (что здесь будет равняться 624), и наконец 625-624 = 1
    Числа 625 и 1 сравнимы по модулю 13, так как 624 делится на 13.
    Вот это я понимаю. А вот как быть если модуль больше числа а?

  • Yellow Horror

    1. Атака «человек посередине», это серьёзная проблема. Насколько я могу судить, в рамках одной только криптографии она в принципе не решается: если принять, что Ева способна перехватить и незаметно подменить ВСЕ данные, поступающие к Алисе или исходящие от неё по ЛЮБЫМ каналам связи, никакое шифрование не поможет. Как минимум один сертификат должен быть получен Алисой из абсолютно надёжного источника. Но в случае, если злоумышленник может только прослушивать канал связи, а не менять данные в нём, асимметричное шифрование вполне надёжно.
    2. Что касается возможности снимать один «слой шифра» из-под другого, этим свойством обладает банальная функция XOR, широко используемая в криптографии с древнейших времён по сей день. Не думаю, что её можно запатентовать:(

    1. Дмитрий Амиров Автор

      Да вы правы, атака mitm на сегодняшний день не решается никак если быть абсолютным параноиком. Если же им не быть то возня с сертификатами и подписями обеспечивают «необходимую и достаточную» защиту.

      Что касается функиции XOR — ее сложно назвать шифром, т.к. им она по своей сути не является.

      1. Yellow Horror

        Да ладно? Погуглите про «Шифр Вернама». Это система передачи сообщений с абсолютной криптоустойчивостью. И основана она именно на XOR. Если оставить в стороне некоторые организационные сложности (создание истинно случайных ключей с равномерным распределением, сохранение тайны шифроблокнота в недружелюбном окружении и надёжное уничтожение использованных ключей), ничего проще и надёжнее человечество ещё не придумало.

      2. Yellow Horror

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

        1. Разбиваем шифруемую информацию на блоки. Каждый блок представлен числом. Размер блока (кол-во бит) определяет кол-во возможных значений блока и (соответственно?) стойкость шифрования.
        2. Алиса для шифрования сообщения выбирает секретное число (которое никому не отправляет), которое прибавляет к каждому из чисел в блоках и отправляет зашифрованное таким образом сообщение Бобу.

        Пока всё в порядке: Ева не может прочесть сообщение Алисы, т.к. не знает число-ключ. Если блоки достаточно велики, восстановить сообщение Алисы сложно, а если блок длиннее сообщения и ключ не имеет уязвимостей — невозможно. Но Ева может скопировать шифрограмму Алисы и делает это.

        3. Боб принимает зашифрованное сообщение, выбирает своё секретное число (которое также никому не отправляет), прибавляет это число к каждому из чисел в блоках зашифрованного Алисой сообщения и отправляет это двукратно зашифрованное сообщение Алисе.

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

        4. Алиса вычитает своё секретное число из каждого числа в блоках этого двукратно зашифрованного сообщения и отправляет получившееся сообщение Бобу.

        Алиса сняла свой «слой» шифра и теперь пересылает Бобу своё письмо, зашифрованное только ключом Боба. Который у Евы уже есть! Ева расшифровывает письмо и читает его, а также на всякий случай может восстановить ключ Алисы, пользуясь расшифрованным текстом письма и первой перехваченной ею шифрограммой.

  • Dmitriy

    Здравствуйте. Хорошая статья, но я тоже не понял некоторые моменты, которые описали выше.
    Именно переход от алгоритма получения секретного ключа обоими собеседниками (Алиса и Боб) (без их выкладывания в публичный доступ) к асимметричному шифрованию.
    У вас написано, что сообщение кодируется на стороне Алисы публичным ключем, полученным от Боба. Но если мы зашифруем публичным ключём, то Ева сможет легко его получить и сама расшифровать, верно?
    Ещё для меня осталось непонятным, как можно зашифровать публичным ключём и расшифровать только секретным на стороне Боба. То есть зашифровали словом «Дом» , а расшифровали словом «Мир» . Для меня это какая-то несуразица.
    Исходя из этих очевидных пробелов (или у вас, или у меня) , я сделал вывод, что тут схема должна быть посложнее, чем на картинке. Скорее всего под стрелочкой от публичного ключа Боба к Алисе имеется в виду другое, а именно вся последовательность действий по получению «Y» и «P», получению промежуточных результатов и тд. Иными словами, я думаю, что при шифровке исходного сообщения якобы публичным ключем, на самом деле шифруется не публичным, а уже секретным, который вычисляется на каждой стороне по отдельности.

    Ещё у меня возник вопрос о расшифровки дважды зашифрованного сообщения. Если взять,допустим, шифр Цезаря, где каждая буква шифруется другой буквой, стоящей, скажем, на 3 позиции дальше. Если Алиса зашифрует букву А в сообщении буквой Б, а потом Боб зашифрует эту букву Б буквой Г, то получить букву А из Г будет просто, причём в любом порядке. Правда это скорее всего будет работать только в тех случаях, если оба знают тип шифрации собеседника и при достаточно простых типах шифрации (моноалфавитные/полиалфавитные). Я тоже новичок в криптографии, так что это моё имхо;)

    1. Dmitriy

      Забыл ещё спросить.
      В чём разница между симметричным и асимметричным способами?

      1. Dmitriy

        Я почитал, более менее как-то всё сгрупировал в уме.
        Отвечу на вопросы мною написаные, возможно, помогая тем самым другим читателям.
        1. По поводу

        У вас написано, что сообщение кодируется на стороне Алисы публичным ключем, полученным от Боба. Но если мы зашифруем публичным ключём, то Ева сможет легко его получить и сама расшифровать, верно?
        Ещё для меня осталось непонятным, как можно зашифровать публичным ключём и расшифровать только секретным на стороне Боба. То есть зашифровали словом «Дом» , а расшифровали словом «Мир» . Для меня это какая-то несуразица.

        В этой статье упомянут алгоритм RSA. Алгоритм симметричного шифрования. В нём действительно используется следующий алгоритм:
        1) Опираясь на некую одностороннюю функцию шифрования (функция, которую легко посчитать в одну сторону, но очень трудно в другую. А) мы создаём на получателе пару {открытый ключ;закрытый ключ}. Эта пара уникальна, то есть каждому открытому ключу соответствует уникальный закрытый ключ под эту одностороннюю функцию.

        3)Отправитель шифрует сообщение
        4)Передаёт получателю

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

        В чём разница между симметричным и асимметричным способами?
        Если я воспользовался алгоритмом Диффи и Хеллмана для передачи секретного ключа, а потом смог безопасно передать зашифрованное сообщение, то будет ли этот способ симметричным?

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

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

        Симметричный — оба узла знают всю информацию для шифр./дешифр.

        Надеюсь, что кому-то помог;3

        1. Dmitriy

          В этой статье упомянут алгоритм RSA. Алгоритм Асимметричного шифрования Опечатался.

        2. Дмитрий Амиров Автор

          Гм… только сейчас заметил ваши комментарии. Приношу свои извинения.

          Все вроде верно. Есть одно но по вашему последнему абзацу, а конкретно термины:

          • Алгоритм Дэффи-Хелмана — является алгоритмом позволяющим получить один общий секретный ключ и не более того
          • Ассиметричное/симметричное шифрование — в целом у Вас все верно
          • RSA — алгоритм являющий собой совокупность этих вещей. На пальцах: с помощью ассимтричного шифрования по протоколу Деффи-Хелмена устанавливается секретный ключ с помощью которого уже методом симметричного шифрования шифруются сообщения между собеседниками.
        3. Дмитрий

          Я все равно не понял утверждение:
          2)Открытый ключ передаётся отправителю.
          3) Отправитель шифрует сообщение
          4)Передаёт получателю
          5)Получатель дешифрует с помощью закрытого ключа. Это сообщение нельзя дешифровать с помощью открытого ключа.

          Получается то, что Вы и мели ввиду с самого начала. Шифруем словом Дом, а дешифруем словом Мир. Означет ли это, что присутствует еще один алгоритм связующий Мир и Дом между собой?

  • Роберт

    Спасибо огромное!!!

  • Роман

    Спасибо. Решил наконец разобраться, как это работает и понял из этой статьи. Только, я считаю, если сообщники знают друг друга и есть возможность обменяться безопасно открытыми ключами, то так и стоит сделать. Чтобы исключить пагубное воздействие возможного появления человека посередине при обмене ключами, который будет прикидываться А как Б и Б как А подменяя ключи на свои и просматривая в итоге всю информацию.

    А в видео, думаю, зря они используют вот это вот 3^(24*54), т.к. вообще не очевидно откуда оно взялось, или пояснили бы, что это условно.

  • RinswinD

    Спасибо за статью. Всё очень доступно разъясняется.

  • grigory

    Ну раздражает ведь всех эта неграмотность правописания — «одностороняя» , «примененны», «длинна», как будто уж в 5-м классе. А так, неплохо для понимания основ.

  • grigory

    Бывает, что вопрос стоит просто. Вирусы-шифровальщики используют закрытый ключ. Есть оригинальный файл, есть файл зашифрованный. Задача: найти алгоритм, сказать так, который ищет алгоритм преобразования первого файла во второй…

  • Allexys

    Благодарю за понятную и нескучную статью! Наконец-то я врубился в основы:).

  • Ярослав

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

    Это не совсем так. приведу пример:
    — предположим что каждой букве соответствует цифровой код А = 1, Б = 2, В = 3 и т.д.;
    — предположим что Алиса отправляет Бобу письмо, состоящее из единственной буквы А (для упрощения примера);

    Алиса: накладывает свой шифр А + 2 = В

    Боб: накладывает свой шифр В + 3 = Е
    Боб: отправляет письмо Алисе
    Алиса: снимает свой шифр Е — 2 = Г
    Алиса: отправляет письмо Бобу
    Боб: снимает свой шифр Г — 3 = А

    Здесь число 2 — секретный ключ Алисы, 3 — секретный ключ Боба. Причем он может быть и не односимвольным. В принципе его длина ничем не ограничена.

  • Дмитрий

    Я долго обходил стороной теоретические основы ассиметричного шифрования. Знал поверхностно — есть открытый ключ, которым шифруются данные, и есть закрытый, которым эти данные дешифруются. Но меня всегда напрягала мысль о реализации подобного шифрования.
    Ваша статья во многом помогла, за это огромное вам спасибо!
    Только к ее концу я опять увидел эту несуразицу — «шифруется открытым ключом». Ведь, строго говоря, шифруется сообщение не открытым ключом, а ключом, полученным на основе закрытого ключа отправителя и открытого ключа получателя (который, в свою очередь, был сгенерирован на основе закрытого ключа получателя). Ведь в таблице про Алису и Боба — они и только они смогли получить один и тот же ключ «9» — он и используется для шифрации и дешифрации сообщения. А вот получить этот ключ можно только на основе пары ключей — секретного (Алисы/Боба) и публичного(Боба/Алисы).
    Образно — да, сообщение шифруется всегда секретным ключом отправителя (он, грубо говоря, постоянен) и публичным ключом получателя (он зависит от конкретного получателя), поэтому в описании шифрация «секретным» ключом опускается — и это опущение ломает всю стройность рассуждений.

  • кларксон

    прочел статью и не очень всеравно понял, хоть и лучше чем на вики. Но одно мне не понимается только. если ктот может ответить правильно — помогите.

    если я всем посылаю вопрос «сколько будет 2+2?», рассказываю как зашифровать ответ мне (рассказываю всем публичный ключ), и все мне направят ответ на вопрос, как я узнаю того, от кого именно я жду ответа, тобиш того с кем я хотел установить связь на самом деле?

    1. Дмитрий Амиров Автор

      Тут вы немного неправильно ставите вопрос.

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

      UPD: написал статью про , я думаю это будет правильный ответ на ваш вопрос.

      1. кларксон

        с моей тупостью придется повоевать. тема расжевана в коментариях и в вашей статье, кажется все обьяснили.

        все же. зачем мне его публик ключ? скажите если я не правильно понимаю.
        я инициатор (мне нужны ответы, в примере я — принимающая сторона), значит генерирую пару. это ему, отвечающему (отправитель в вашем примере) нужен мой публик

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

  • Beshot

    Несколько раз перечитал эту статью и другие по теме, непонятен алгоритм использования ЭЦП в эл. документах. Если так как здесь: https://ru.wikipedia.org/wiki/Электронная_подпись , то возникают расхождения. Так все таки шифруем с помощью закрытого ключа или открытого?

    1. Дмитрий Амиров Автор

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

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

      1. Beshot

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

        Может быть дело в исходных задачи, например получателю нужно аутентифицировать посланника.
        Тогда не представляю как эта схема может помочь?

        1. Дмитрий Амиров Автор

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

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

          Давайте рассмотрим на примере. Вы хотите мне прислать сообщение, я хочу убедится что прислали его мне именно вы. Поэтапно:
          1) Вы шифруете сообщение закрытым ключом
          2) Присылаете его мне
          3) Я обращаюсь к вам, и получаю от вас Ваш публичный ключ
          4) Полученное сообщение расшифровываю Вашим публичным ключом
          5) Если сообщение расшифровалось — значит послали его именно вы

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

          1. Beshot

            Ок, но как быть если требуется скрыть от любопытных глаз сообщение?

  • Аня

    Добрый день! Статья понравилась, но остались вопросы (даже нашлась пара похожих в комментариях, но без ответов).
    Если во второй части статьи всеже перейти к аналогии с Алисой и Бобом, в частности к числам А, В, а, в, Р и к полученному в примере числу 9, что из них будет закрытым ключом, а что открытым? Заранее спасибо за ответ!

    1. Аня

      Не понятно, отправился мой комментарий или нет:(

    2. Дмитрий Амиров Автор

      Правильнее будет сказать что в процессе обмена данными Алиса и Боб получают общий ключ 9 , который в дальнейшем могут использовать для шифрования своих сообщений. По сути в статье я описывал не само ассиметричное шифрование как таковое, а протокол обмена ключами, который дал толчок к развитию ассиметричного шифрования.
      Алгоритм генерации пары приватный/публичный ключ на самом деле немного сложнее, хотя и похож на выше изложенный алгоритм, но все таки наверное стоит отдельной статьи. В комментарии я не распишу тут сходу, ибо могу много чего напутать.

  • Григорий
    1. Шифрование происходит с обеих сторон. Ведь если шифровать будет только одна сторона (например только сервер), значит трафик от другой стороны (от клиента) будет не зашифрован. Его можно будет подслушать или даже изменить.
    2. Формально никто не передает никому ключ. В протоколе TLS клиент и сервер должны сгенерировать общий секрет (shared secret), набор из 48 байт. Потом клиент и сервер на основании общего секрета вычисляют ключи: ключ шифрования клиента и ключ шифрования сервера. Процедура вычисления ключей из общего секрета стандартная, и задана в описании протокола TLS. Сервер и клиент знают 2 ключа шифрования, одним шифруют, вторым дешифруют. А теперь самое интересное - как клиент и сервер вычисляют общий секрет. Это зависит от выбранного набора шифров:

      • TLS_RSA_WITH_: В данном случае клиент сам создает общий секрет генерируя 48 случайных байт. Затем он шифрует их при помощи публичного RSA ключа, который находится в сертификате сервера. Сервер получает зашифрованные данные, и расшифровывает их при помощи приватного RSA ключа. Данная схема используется редко.
      • TLS_DHE_RSA_/TLS_ECDHE_RSA_/TLS_ECDHE_ECDSA_: Здесь используется криптографическая схема Диффи-Хеллмана (DHE) или ее версия на эллиптических кривих (ECDHE). Суть схемы такая: сервер и клиент генерируют случайные большие числа (приватные ключи), вычисляют на их основе другие числа (публичные ключи), и пересылают друг другу. Имея свой приватный ключ и публичный ключ другой стороны, они вычисляют общий секрет. Третья сторона, которая прослушивает канал, видит только 2 публичных ключа, и она не может вычислить общий секрет. После этого все данные, которыми обменивались клиент и сервер для получение этого ключа подписываются сертификатом сервера (RSA или ECDSA подписи). Если клиент доверяет сертификату сервера, он проверяет эту подпись, и если она правильная, начинается уже обмен данными. Это наиболее часто используемая схема.
      • Есть еще несколько схем, но они используются очень редко или не используются вообще.

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

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

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

    Я упустил/упростил некоторые детали, что бы описать только основные идеи.