phdru.name / Russian / Admin

Очень краткое введение в криптографию

Криптография - это математическая наука о безопасной передаче информации по небезопасным каналам. Небезопасность связана с тем, что информацию могут подслушать или подменить, могут подделать источник информации. Традиционно участники обмена именуются Алиса и Боб. Алиса и Боб хотят обмениваться секретной информацией по незащищённым каналам (бумажная почта, радио, Интернет и т.п.), Ева (от английского eavesdropping - подслушивание) хочет их подслушать, Мэллори хочет подменить информацию или сделать вид, что информация Бобу пришла от Алисы. Существуют и другие участники, но нам пока достаточно говорить про этих четырёх. По-русски их было бы правильно перевести как Юстас, Алекс и Мюллер. ;)

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

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

При несимметричном шифровании используется 2 ключа. С помощью одного информация зашифровывается, с помощью другого расшифровывается. Ключи обычно взаимозаменяемы - то, что зашифровано одним, можно расшифровать другим. Но то, что зашифровано ключом, нельзя расшифровать этим же ключом. Один из ключей публикуется и доступен для всех - он называется открытым (публичным, public) ключом. Другой, секретный ключ, остаётся в тайне. Секретность обеспечивается тем, что имея открытый ключ, невозможно вычислить секретный. Ну, не невозможно, а очень тяжело. В алгоритмах RSA сложность обеспечивается тем, что если мы знаем произведение двух очень больших простых чисел, то нет (не найдено) способа разложить произведение на множители, кроме полного перебора, а это требует больших вычислительных ресурсов; поэтому, упрощённо говоря, пара простых чисел становится секретным ключом, а их произведение открытым ключом. В алгоритмах DSA, Diffie-Hellman и эллиптических кривых используются другие принципы, но секретность обеспечивается тем же самым принципом - отсутствием математического аппарата решения обратной задачи. Достоинством несимметричной криптографии является возможность передачи открытого ключа по незащищённому каналу; недостатками - шифровать можно лишь небольшие блоки (не длиннее секретного ключа) и низкая скорость. Поэтому симметричную и несимметричную криптографию обычно объединяют - генерируют временный сеансовый ключ шифрования, и передают его с помощью несимметричного шифрования, а длинные сообщения шифруют уже этим ключом симметричными алгоритмами.

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

Рассмотрим эти процессы подробнее. Пусть есть функции шифрования и расшифровки encrypt и decrypt, для простоты назовём их E и D. Функции принимают параметры - ключ и сообщение, и выдают один результат. При этом выполняются условия


шифр = E(откр.ключ, исходное_сообщение)
исходное_сообщение = D(секр.ключ, шифр)

и наоборот


шифр = E(секр.ключ, исходное_сообщение)
исходное_сообщение = D(откр.ключ, шифр)

Есть 4 ключа - пара ключей Алисы и пара ключей Боба, назовём их pkA, skA (public Key Alice, secret key Alice), pkB, skB. Алиса шифрует исходное сообщение открытым ключом Боба:


шифр1 = E(pkB, исходное_сообщение)

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


шифр2 = D(skA, шифр1)

Боб получает шифр2, и шифрует его открытым ключом Алисы: E(pkA, шифр2) - это даёт ему шифр1, после чего применяет D(skB, шифр1) и получает исходное сообщение. Теперь Боб твёрдо уверен, что исходное сообщение было расшифровано секретным ключом Алисы; у Мэллори нет никаких шансов подделать сообщение от Алисы.

Электронная цифровая подпись - это ещё один способ удостовериться, что текст написан отправителем, и только отправителем. Для создания ЭЦП текста вычисляется хеш-функция этого текста (обычно SHA-1) и шифруется секретным ключом отправителя. Любой, кто желает проверить подпись, вычисляет хеш текста и расшифровывает подпись открытым ключом отправителя - результаты должны совпасть. Надёжность здесь обеспечивают алгоритмы несимметричной криптографии плюс алгоритмы хеширования - невозможно (точнее, не найдено способа) создать второй осмысленный текст, имеющий в точности тот же хеш, что и заданный текст.

У Мэллори всё же остаётся шанс читать и подделывать сообщения - для этого ему надо подменить открытые ключи Алисы и Боба. Алиса должна думать, что получила открытый ключ Боба, Боб - Алисы, а в действительности это разные открытые ключи Мэллори. Теперь Мэллори может перехватывать все сообщения Алисы и Боба, расшифровывать их своими секретными ключами, подменять их, как ему вздумается, и подписывать. Это показывает, как важно удостовериться, что открытый ключ Алисы действительно принадлежит Алисе. Для этого применяют системы доверия. Существует две системы доверия - иерархическая (Public Key Infrastructure, открытая инфраструктура ключей) и распределённая (круговая, сетевая, web of trust); PKI используется, например, в протоколе SSL, а сетевая - в программах GPG/PGP. В системе доверия PKI существует несколько корневых удостоверяющих центров, которым доверяют все участники обмена сообщениями (необязательно, чтобы каждый участник доверял каждому центру), удостоверяющие центры берут открытые ключи участников и подписывают их своими секретными ключами, в результате получается сертификат; для проверки сертификата надо взять открытый ключ удостоверяющего центра (которому мы доверяем) и проверить подпись на сертификате. Удостоверяющие центры обычно организованы в иерархии - корневые удостоверяющие центры подписывают сертификаты удостоверяющим центрам второго уровня, те - центрам третьего уровня, и т.д. пока мы не доберёмся до последнего сертификата, содержащего открытый ключ; проверив все подписи в иерархии мы можем доверять этому ключу.

Рассмотрим реальный пример в протоколе SSL. Заходим на сайт https://lwn.net/, делаем двойной щелчок на значке замочка в браузере, и в открывшемся диалоге смотрим иерархию сертификатов сайта. Иерархия состоит их двух сертификатов - корневой сертификат Equifax Secure Global eBusiness CA-1, которым подписан (т.е. чьим секретным ключом подписан) сертификат lwn.net. Корневой сертификат Equifax Secure Global eBusiness CA-1 имеется в браузере (т.е. производитель браузера доверяет этой фирме, а пользователи доверяют производителям браузеров), поэтому браузер имеет возможность проверить всю иерархию, начиная от корня.

На сайте https://www.networksolutions.com/ можно увидеть более длинную иерархию - 3 сертификата. Браузер проверяет все поля сертификата, не только подпись. Например, проверяет, что URL, по которому мы зашли, содержит URL сервера, записанный в сертификате. Заходим по адресу https://networksolutions.com/ и видим, что браузер ругается - сертификат выдан для URL www.networksolutions.com.

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

Бывает и более сложный случай - корневой самоподписанный сертификат, а уже им подписаны сертификаты сайтов.

Ссылки для дальнейшего чтения:


http://faqs.org.ru/progr/common/crypt_faq.htm
http://faqs.org.ru/progr/common/crypt_faq2.htm
http://faqs.org.ru/progr/common/crypt_faq3.htm

http://criptograf.narod.ru/index1.html

http://ru.wikipedia.org/wiki/%D0%9A%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D1%81_%D0%BE%D1%82%D0%BA%D1%80%D1%8B%D1%82%D1%8B%D0%BC_%D0%BA%D0%BB%D1%8E%D1%87%D0%BE%D0%BC
http://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D1%80%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82_%D0%BE%D1%82%D0%BA%D1%80%D1%8B%D1%82%D0%BE%D0%B3%D0%BE_%D0%BA%D0%BB%D1%8E%D1%87%D0%B0
http://ru.wikipedia.org/wiki/%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D0%B0%D1%8F_%D0%BF%D0%BE%D0%B4%D0%BF%D0%B8%D1%81%D1%8C

http://ru.wikipedia.org/wiki/RSA

Эта страница https://phdru.name/Russian/Admin/crypto.html была сгенерирована 14.07.2021 в 00:37:37 из шаблона CheetahTemplate crypto.tmpl; Некоторые права зарезервированы. Вы можете узнать о технических аспектах этого сайта.