Криптография. Симметричные криптосистемы шифрования

Мало кто знает как именно работает асимметричное шифрование. К примеру есть люди которые не считают протокол 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. Блочные шифры - обрабатывают информацию блоками определенной длины (обычно 64, 128 бит), применяя к блоку ключ в установленном порядке, как правило, несколькими циклами перемешивания и подстановки, называемыми раундами. Результатом повторения раундов является лавинный эффект - нарастающая потеря соответствия битов между блоками открытых и зашифрованных данных.

    2. Поточные шифры - в которых шифрование проводится над каждым битом либо байтом исходного (открытого) текста с использованием гаммирования. Поточный шифр может быть легко создан на основе блочного (например, ГОСТ 28147-89 в режиме гаммирования), запущенного в специальном режиме.

    Криптографическая система с открытым ключом

    Криптографическая система с открытым ключом (или Асимметричное шифрование, Асимметричный шифр) -- система шифрования информации, при которой ключ, которым зашифровывается сообщение и само зашифрованное сообщение передаётся по открытому, (то есть незащищённому, доступному для наблюдения) каналу. Для генерации открытого ключа и для прочтения зашифрованного сообщения получатель использует секретный ключ. Криптографические системы с открытым ключом в настоящее время широко применяются в различных сетевых протоколах, в частности, в протоколе SSL и основанных на нём протоколах прикладного уровня HTTPS, SSH и т. д.

    Рис. 7.

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

    2. Отправитель с помощью открытого ключа шифрует сообщение.

    3. Получатель с помощью закрытого ключа дешифрует сообщение.

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

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

    Особенности системы

    Преимущество асимметричных шифров перед симметричными шифрами состоит в отсутствии необходимости передачи секретного ключа. Сторона, желающая принимать зашифрованные тексты, в соответствии с используемым алгоритмом вырабатывает пару «открытый ключ -- закрытый ключ». Значения ключей связаны между собой, однако вычисление одного значения из другого должно быть невозможным с практической точки зрения. Открытый ключ публикуется в открытых справочниках и используется для шифрования информации контрагентом. Закрытый ключ держится в секрете и используется для расшифровывания сообщения, переданного владельцу пары ключей. Начало асимметричным шифрам было положено в 1976 году в работе Уитфилда Диффи и Мартина Хеллмана «Новые направления в современной криптографии». Они предложили систему обмена общим секретным ключом на основе проблемы дискретного логарифма. Вообще, в основу известных асимметричных криптосистем кладётся одна из сложных математических проблем, которая позволяет строить односторонние функции и функции-ловушки. Например, криптосистема Ривеста-Шамира-Адельмана использует проблему факторизации больших чисел, а криптосистемы Меркля-Хеллмана и Хора-Ривеста опираются на так называемую задачу об укладке рюкзака.

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

    Гибридная (или комбинированная) криптосистема -- это система шифрования, обладающая всеми достоинствами криптосистемы с открытым ключом, но лишенная ее основного недостатка -- низкой скорости шифрования.

    Принцип: Криптографические системы используют преимущества двух основных криптосистем: симметричной и асимметричной криптографии. На этом принципе построены такие программы, как PGP и GnuPG.

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

    Шифрование: Большинство шифровальных систем работают следующим образом. Для симметричного алгоритма (3DES, IDEA, AES или любого другого) генерируется случайный ключ. Такой ключ, как правило, имеет размер от 128 до 512 бит (в зависимости от алгоритма). Затем используется симметричный алгоритм для шифрования сообщения. В случае блочного шифрования необходимо использовать режим шифрования (например, CBC), что позволит шифровать сообщение с длиной, превышающей длину блока. Что касается самого случайного ключа, он должен быть зашифрован с помощью открытого ключа получателя сообщения, и именно на этом этапе применяется криптосистема с открытым ключом (RSA или Алгоритм Диффи -- Хеллмана). Поскольку случайный ключ короткий, его шифрование занимает немного времени. Шифрование набора сообщений с помощью асимметричного алгоритма -- это задача вычислительно более сложная, поэтому здесь предпочтительнее использовать симметричное шифрование. Затем достаточно отправить сообщение, зашифрованное симметричным алгоритмом, а также соответствующий ключ в зашифрованном виде. Получатель сначала расшифровывает ключ с помощью своего секретного ключа, а затем с помощью полученного ключа получает и всё сообщение.

    Цифровая подпись обеспечивает:

    * Удостоверение источника документа. В зависимости от деталей определения документа могут быть подписаны такие поля, как «автор», «внесённые изменения», «метка времени» и т. д.

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

    Возможны следующие угрозы цифровой подписи:

    *Злоумышленник может попытаться подделать подпись для выбранного им документа.

    *Злоумышленник может попытаться подобрать документ к данной подписи, чтобы подпись к нему подходила.

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

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

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

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

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

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

    Моно- и многоалфавитные подстановки;

    Перестановки;

    Блочные шифры;

    Гаммирование.

    Подстановки

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

    c ≡ (a*e +s) mod K , (5.1)

    где a – десятичный коэффициент; s – коэффициент сдвига; e – код буквы исходного текста; c – код зашифрованной буквы; K – длина алфавита; mod – операция вычисления остатка от деления выражения в скобках на модуль К.

    Пример. Шифр Цезаря

    Рассмотрим шифрование на алфавите, состоящим и 26 латинских букв и знака пробела (пробел будем изображать знаком #). Знаку # присвоим код 0, букве A – код 1, B – код 2,… букве Z – код 26.

    Возьмем следующие параметры: a = 1 s = 2 K = 27

    Формула для шифрования примет вид

    c ≡ (e + 2) mod 27 (5.2)

    Входной алфавит:

    # A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

    Выходной алфавит

    B C D E F G H I J K L M N O P Q R S T U V W X Y Z # A

    (Буквы сдвигаются на две позиции: A-C B-D и т.д.)

    Тогда исходное сообщение в зашифрованном виде будет выглядеть так:

    Для расшифровки (для случая, когда a=1) используется следующая формула

    e ≡ (K+ c - s) mod K (5.3)

    Простая многоалфавитная подстановка последовательно и циклически меняет используемые алфавиты (в предыдущем случае для шифрования использовался один алфавит). При m-алфавитной подстановке знак a 1 из исходного сообщения заменяется знаком из алфавита B 1 , знак a 2 - знаком из алфавита B 2 , … знак a m - знаком из алфавита B m , знак a m +1 - знаком из алфавита B 1 и т.д. Эффект использования многоалфавитной подстановки состоит в том, что обеспечивается маскировка частотной статистики исходного языка, так как конкретный знак из алфавита А преобразуется в несколько различных знаков шифровального алфавита В.

    Пример

    Исходное сообщение: WE#NEED#SNOW

    Ключ: SECURITYSECU

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

    Исходный ключ Шифр

    (W + S) mod 27 = (23 + 19) mod 27 = 15→O

    (E + E) mod 27 = (5 + 5) mod 27 = 10 → J

    (# + C) mod 27 = (0 + 3) mod 27 = 3 → C

    Задание

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

    Перестановки

    Знаки исходного текста можно переставлять в соответствии с определенным правилом.

    Пример 1. Линейная перестановка

    Пусть необходимо зашифровать следующий текст:

    ГРУЗИТЕ#АПЕЛЬСИНЫ#БОЧКАХ

    Разобьем текст на группы длиной, например по 4 символа:

    ГРУЗ ИТЕ# АПЕЛ ЬСИН Ы#БО ЧКАХ

    Зададим следующее правило перестановки: “переставить группировки из четырех букв, находящихся в порядке 1-2-3-4 в порядок 3-1-4-2”.

    Получим следующий зашифрованный текст:

    УГРЗ ЕИ#Т ЕАЛП ИЬНС БЫО# АЧХК

    Замечание

    Если длина сообщения не кратна длине группы, то последнюю группу дополняем символами (например, пробелами) до нужной длины.

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

    Пример 2 . Решетка Кардано

    Решетка Кардано – это прямоугольная карточка с отверстиями, чаще квадратная, которая при наложении на лист бумаги оставляет открытыми лишь некоторые его части. Число строк и столбцов четно. Карточка сделана так, что при ее последовательном повороте каждая клетка лежащего под ним листа будет занятой. Если решетка квадратная, то можно последовательно поворачивать ее вокруг центра квадрата на 90°.

    Шифровка:

    ВАВОЧС МУНОТИ МЫЖРОЕ ЬУХСОЙ МДОСТО ЯАСНТВ

    Расшифровать сообщение, вращая решетку по часовой стрелке на 90°. Сообщение впишите в квадрат по строкам.

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

    Блочные шифры

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

    Под N-разрядным блоком будем понимать последовательность из нулей и единиц длины N:

    x = (x 0 , x 1 , …x N -1) . (5.5)

    x в Z 2, N можно интерпретировать как вектор и как двоичное представление целого числа

    (5.6)

    Под блочным шифром будем понимать элемент

    Где x = (x 0 , x 1 , …x N -1), y = (y 0 , y 1 , …y N -1)

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

    Потоковые шифры

    Потоковые шифры представляют собой разновидность гаммирования и преобразуют открытый текст в шифрованный последовательно по одному биту. Генератор ключевой последовательности, иногда называемой генератором бегущего ключа, выдает последовательность бит k 1 , k 2 , … k N . Эта ключевая последовательность складывается по модулю 2 (“исключающее или”) с последовательностью бит исходного текста e 1 , e 2 , …, e N:

    На приемной стороне шифрованный текст складывается по модулю 2 с идентичной ключевой последовательностью для получения исходного текста:

    Стойкость системы целиком зависит от внутренней структуры генератора ключевой последовательности. Если генератор выдает последовательность с небольшим периодом, то стойкость системы невелика. Напротив, если генератор будет выдавать бесконечную последовательность истинно случайных бит, то получим одноразовый блокнот с идеальной стойкостью.

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

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

    При поточном шифровании каждый символ исходного текста может представляться в битовой форме, то есть в двоичном виде. Далее каждый бит полученной последовательности можно преобразовать по определенному правилу. В качестве такого правила преобразования часто используют побитовое сложение исходного текста с некоторой секретной последовательностью битов. Секретная последовательность битов играет роль ключа зашифрования в симметричных потоковых шифрах. Сама по себе операция побитового сложения, называемая также операцией сложения по модулю двойки, операцией “исключающего ИЛИ” или просто XOR, является очень простой. При сложении каждый бит заменятся по правилу:

    0 + 0 = 0

    0 + 1 = 1

    1 + 0 = 1

    1 + 1 = 0

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

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

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

    - обеспечивать производство достаточно длинных неповторяющихся последовательностей;

    - обладать достаточной скоростью для работы в реальном времени.

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

    Операция замены (transmutation), которую еще иногда называют операцией подстановки , состоит в замене одних символов исходного текста на другие символы. Символы исходного текста и символы на которые они заменяются, могут принадлежать одному и тому же алфавиту (например русскому языку), а могут – разным.

    Операция перестановки состоит в перестановки символов исходного текста по определенному правилу.

    Шифры замены и перестановки относятся к самым древним из известных методов шифрования. Подобные методы известны еще с античных времен. С течением времени усложнялись правила перестановки и замены. Теоретическая база для построения стойких шифров была разработана в середине прошлого века известным американским ученым Клодом Элвудом Шенонном (Claude Elwood Shannon ) (1916-2001), знаменитого также своими основополагающими трудами в области теории информации. С появлением его работы “Теория связи в секретных системах” криптография превращается в строгую научную дисциплину. Был предложен математический аппарат для построения стойких шифров, а также сформулированы основные принципы рассеивания и перемешивания .


    Рассеивание – нивелирование влияния статистических свойств открытого текста на криптограмму. Рассеивание распространяет влияние одного символа открытого текста на большое число символов криптограммы. Рассеивание обычно достигается использованием методов перестановки.

    Перемешивание – усложнение восстановления взаимосвязи статистических свойств открытого текста и криптограммы, а также между ключом и криптограммой. Перемешивание соответствует использованию методов замены [Алф2001].

    С использованием этих принципов во второй половине прошлого века была предложена архитектура для построения симметричных блочных шифров. Архитектура получила название сети Фейсталя (Feistal network), по имени Хорста Фейсталя, сотрудника компании IBM. Эта архитектура на долгое время определила основное направление развития стандартов в области шифрования данных.

    В сети Фейсталя происходит преобразование исходного блока данных. На выходе сети получается преобразованный блок данных. Исходный блок разделяется на две части X1 и X2. Выходной блок данных также состоит из двух частей Y1 и Y2. Чаcть Y1 – это непосредственное значение X2. Значение Y2 является результатов сложения части X1 и результата функции шифрования F. Под функцией шифрования в данном понимается функция от двух аргументов: входного блока данных и секретного ключа. Сама функция представляет собой некоторое не специфицированное преобразование над данными. В сети Фейсталя в качестве аргументов функции шифрования F выступают, входной блок данных X2 и секретный ключ шифрования K.

    Аналитические формулы описанных преобразований имеют следующий вид:

    Y1 = X2

    Y2 = X1  F(X2, K)

    Важным свойством сети Фейсталя является то, что осуществляемые с ее помощью преобразования являются обратимыми. Преобразования обратимы даже в том случае, если функция шифрования F не является обратимой. То есть всегда можно получить исходный блок данных X из блока данных Y

    X1 = Y2  F(Y1, K)

    X2 = Y1

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

    DES - старый федеральный стандарт шифрования США;

    ГОСТ 28147-89 - отечественный стандарт шифрования данных;

    AES - новый федеральный стандарт шифрования США.

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

    Стандарт шифрования Digital Encryption Standard (DES) более 20 лет служил в качестве федерального стандарта шифрования в США. Алгоритм был Алгоритм, лежащий в основе стандарта, был разработан еще в 1974 году в компании IBM. В 1977 году стандарт был опубликован Национальным бюро стандартов (НБС) США. Затем в 1980 году он был одобрен Национальным институтом стандартов и технологий (НИСТ) США для защиты коммерческой и несекретной информации. С 1986 года становится международным стандартом, принятым ИСО под наименованием DEA-1.

    Алгоритм лежащий в основе DES относится к группе симметричных блочных шифров. Длина ключа составляет 64 бита. Из которых каждый восьмой бит служит для проверки четности. Соответственно в ключе содержится только 56 секретных бит. Входной блок данных также составляет 64 бита.

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

    Количество раундов шифрования является важной характеристикой подобных итерационных шифров. От этого значения зависит стойкость шифра к современным методам криптоанализа, таким как дифференциальный и линейный криптоанализ. Как отмечается в работе [Вар98], применение этих методов дало наилучшие результаты в области анализа систем блочного шифрования. Наличие шестнадцати раундов шифрования является минимально необходимым для того, чтобы указанные выше методы криптоанализа были не легче полного перебора всех возможных ключей. Следует сказать, что в открытой литературе методы дифференциального и линейного криптоанализа были опубликованы сравнительно недавно. В тоже время DES был разработан и проанализирован еще в 70-х года прошлого века. Это заставляет предположить, что возможности подобных методов взлома шифров были известны специальным службам уже достаточно давно.

    На каждом раунде шифрования в сети Фейсталя используется ключ шифрования для передачи его на вход функции шифрования. Такие ключи называют раундовыми ключами . Всего соответственно используется шестнадцать различных раундовых ключей. Каждый такой раундовый ключ получается из исходного ключа В описании DES опубликован метод генерации таких ключей.

    Сама по себе функция шифрования является не сложной. В ее основе лежит правило преобразования входного блока данных. Это преобразование состоит из сложения входного блока данных с раундовым ключом и последующим преобразованием полученного результата в так называемом S-блоке. S-блок в DES представляет собой матрицу из 4-х строк и 16-и столбцов. В каждой ячейки матрицы содержится число от 0 до 15. Всего в стандарте опубликовано и используются 8 таких матриц.

    За время своего существования DES стал очень распространенным алгоритмом шифрования, реализованным в многочисленных системах и приложениях. Однако на сегодняшний день он уже является устаревшим алгоритмом, неспособным обеспечить требуемую стойкость. В первую очередь это связано с недостаточной длинной ключа шифрования в 56 бит, принятого в стандарте. В конце 90-х годов прошлого века компания RSA Security провела серию открытых конкурсов на его взлом. Задание конкурсов состояло в дешифровании криптограммы, опубликованной на сайте компании. Все варианты были решены с помощью атаки грубой силой, то есть путем успешного полного перебора всех возможных вариантов ключей. Ниже приводится таблица с хронологией взлома DES в рамках открытых конкурсов, проводившихся компанией RSA Security:

    Дата

    Время взлома

    Мощность

    18.06.1997

    96 дней

    7 млрд. ключей/сек.

    23.02.1998

    39 дней

    34 млрд. ключей/сек.

    17.07.1998

    3 дня

    88 млрд. ключей/сек.

    19.01.1999

    22 часа 15 мин.

    245 млрд. ключей/сек.

    Как видно из приведенной таблицы, во время последнего конкурса взлом DES был осуществлен менее чем за один день. После этого компания RSA Security прекратила проведение конкурсов по взлому DES. Последний взлом был осуществлен совместными усилиями двух некоммерческих организаций: Electronic Frontier Foundation (www.eff.org) и Distributed Computing Technologies, Inc. (www.distributed.net) Подбор возможных вариантов ключа осуществлялся с помощью специального компьютера, названного Deep Cracker, стоимостью $250000. Кроме того в процессе обработки ключей использовались мощности компьютеров объединенных в сети Интернет.

    Достигнутые результаты красноречиво свидетельствовали о необходимости принятия нового стандарта в области шифрования данных и смягчение существовавших в то время в США экспортных ограничений на криптографические продукты. Новый стандарт был принят в 2001 году и получил название Advanced Encryption Standard (AES). Этот стандарт и лежащий в его основе алгоритм рассмотрены ниже. С конца 90-х годов прошлого века, в качестве усиления существовавшего стандарта, применяется его модификация, получившая название “Тройной-DES” (Triple-DES).

    Алгоритм ГОСТ 28147-89 является блочным симметричным шифром и основан на архитектуре сети Фейсталя. Длина ключа составляет 256 бит. Входной блок данных составляет 64 бита. В алгоритме используется 32 раунда шифрования. На каждом раунде шифрования используется раундевый ключ, значения которых получаются из первоначального секретного ключа шифрования.

    Функций шифрования алгоритма ГОСТ 28147-89, использующаяся в каждом раунде шифрования имеет несложную структуру и состоит из простых операций замены и циклического сдвига. Замены осуществляются в S-блоке в специальной матрице. Для алгоритма ГОСТ 28147-89 не специфицирован конкретный вид матрицы замены. Каждый разработчик и производитель может сформировать собственную матрицу или сделать запрос в специальные службы, которые могут помочь в подготовке криптостойкой матрицы. При желании можно менять матрицу замены с течением некоторого времени. В силу того, что матрица не специфицирована ее иногда еще называют сменным ключевым элементом . В матрице восемь строк, шестнадцать столбцов и в каждой ячейке хранится четыре бита информации. Размер матрицы составляет 512 бит. Если добавить к этому размер ключа шифрования, то совокупный размер секретной информации составит 768 бит. Это дает гигантское число 2768 возможных вариантов для перебора всех значений секретной информации. Перебор подобного количества вариантов лежит далеко за пределами даже прогнозируемых мощностей вычислительной техники и совершенно недосягаем в сколько-нибудь обозримом будущем. Однако справедливости ради следует сказать, что по настоящему секретной информацией является все-таки только ключ шифрования размеров 256 бит. Структуру даже неопубликованных матриц теоретически можно определить путем анализа работы программного или аппаратного обеспечения. Также возможны попытки несанкционированного доступа к технической документации по реализации алгоритма ГОСТ 28147-89. Но даже в этом случае для полного перебора всех возможных ключей надо будет выполнить 2256 попыток. Это количество вариантов все равно остается гигантским и обеспечивает абсолютную стойкость алгоритма к атаке методом полного перебора ключей.

    В открытых публикациях до сих пор не было рассмотрено ни одного успешного метода взлома отечественного стандарта шифрования данных. Однако в работе [Мол02] приводятся доводы в пользу замены имеющегося стандарта новым алгоритмом. По мнению авторов, имеющийся стандарт из-за своей архитектуры не может отвечать современным требованиям к скорости преобразования данных (более 2Гбит/сек). Кроме того отмечается, что в ряде работ в течении последних нескольких лет были описаны различные потенциальные атаки касающиеся алгоритма ГОСТ 28147-89.

    Для стандарта ГОСТ 28147-89 определены следующие четыре режима работы:

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

    Гаммирование . В этом режиме возможна выработка псевдослучайной гаммы с очень хорошими статистическими свойствами. Фактически использование этого режима позволяет получить потоковый шифр из блочного шифра. Применяется для шифрования данных.

    Гаммирование с обратной связью . Этот режим отличается от предыдущего способом получения гаммы. Очередной элемент гаммы вырабатывается в результате преобразования предыдущего блока зашифрованных данных. Данный режим иногда также называют режимом гаммирования с зацеплением блоков [Дом2000]. Каждый блок криптограммы зависит от всех предыдущих блоков открытого текста. В режимах гаммирования можно обрабатывать входные блоки данных размером меньше 8 байт. Это свойство используется для шифрования массивов данных с произвольным размером.

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

    Стандарт шифрования Advanced Encryption Standard (AES) был выбран в результате открытого международного конкурса, проводимого НИСТ США. О начале конкурса было объявлено 2 января 1997 года. В результате первоначального отбора в августе 1998 года были выбраны пятнадцать алгоритмов – кандидатов. Затем еще через год, в августе 1999 года были определены пять алгоритмов - финалистов конкурса. Конкурс завершился в октябре 2000 года. Победителем в нем стал бельгийский алгоритм RIJNDAEL разработанный Винсентом Рюменом (Vincent Rijmen) и Йон Дэмен (Joan Daemen). Этот алгоритм был выбран в качестве стандарта AES. Окончательная версия стандарта была опубликована в ноябре 2001 года. Алгоритм утвержден в качестве нового федерального стандарта шифрования в США под кодом FIPS-197 и предназначен для обработки коммерческой информации и информации, не содержащей государственную тайну. Стандарт вступил в действие с 26 мая 2002 года [Зен2002].

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

    В стандарте AES предусмотрено три режима работы в зависимости от длины используемого ключа. Возможные длины ключа составляют 128, 192 и 256 бит. Количество раундов шифрования зависит от используемой длины ключа, это соответственно 10, 12 или 14 раундов. Размер входного исходного блока данных и выходного блока шифротекста одинаковый и всегда составляет 128 бит.

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

    К преимуществам стандарта AES относятся:

    - высокая эффективность реализации на любых платформах;

    - высокая стойкость;

    - низкие требования к памяти;

    - возможность реализации на smart-картах;

    - быстрая процедура формирования ключа;

    - возможность параллелизма операций.


    Ниже дается сводная таблица с характеристиками рассмотренных стандартов шифрования данных [Вин2001].

    DES

    ГОСТ 28147-89

    AES

    Размер блока данных (бит)

    Размер ключа
    (бит)

    128, 192, 256

    Архитектура

    Сеть Фейсталя

    Сеть Фейсталя

    “Квадрат”

    Число раундов

    10, 12, 14

    Структура раунда

    Простая

    Простая

    Сложная

    Используемые операции

    Аддитивные операции, замена, перестановки, сдвиги

    Аддитивные операции, замена, сдвиги

    Операции в конечных полях

    Для того, чтобы перебрать все возможные ключи для алгоритма DES нужно выполнить около 7.2x1016 вариантов. Минимальный размер ключа в алгоритме AES составляет 128 бит. Для перебора всех возможных ключей в этом случае придется проверить уже около 3.4x1038 вариантов. Это примерно в 1021 раз больше чем в случае DES. Для перебора же всех ключей длинной в 256 бит потребуется проверить астрономическое число вариантов – около 1.1x1077 ключей. Стойкости нового стандарта шифрования AES по отношению к атакам методом полного перебора ключей, только сейчас сравнялась с отечественным стандартом ГОСТ 28147-89.

    В алгоритме ГОСТ 28147-89 крайне простая выработка раундовых ключей шифрования. Они берутся как составные части начального секретного ключа шифрования. В то же время, в DES и в AES используются значительно более сложные алгоритмы вычисления раундевых ключей.

    По сравнению с DES, алгоритм ГОСТ 28147-89 обладает большим быстродействием. Так, например, на процессорах Intel x86 реализация ГОСТ 28147-89 превосходит по быстродействию реализацию DES более чем в два раза. На процессоре Pention Pro-200 MHz предел быстродействия алгоритма ГОСТ 28147-89 составляет 8 Мбайт/сек. Ниже в таблице приведены сравнительные показатели быстродействия стандартов ГОСТ 28147-89 и AES

    ГОСТ 28147-89

    AES

    Pentium 166 MHz

    2.04 Мбайт/c

    2.46 Мбайт/c

    Pentium III 433 MHz

    8.30 Мбайт/c

    9.36 Мбайт/c

    Алгоритм ГОСТ 28147-89 является более удобным для аппаратной и для программной реализации, чем DES, но менее удобным, чем AES. Стандарты ГОСТ 28147-89 и AES имеют сопоставимые значения основных характеристик.

    Для блочных симметричных алгоритмов шифрования (АШ) определены несколько основных режимов их использования. Первоначально эти режимы относились к использованию алгоритма DES, но фактически могут быть применимы к любому блочному алгоритму. Например, некоторые из этих режимов являются аналогами режимов работы, определенных для алгоритма ГОСТ 28147-89. Выбранный режим определяет область применения блочного алгоритма шифрования. Каждый режим работы имеет свои преимущества и недостатки.

    Режим электронной кодовой книги .

    Electronic Code Book (ECB)

    Исходный текст разбивается на блоки. В этом режиме каждый блок поступает на вход алгоритма шифрования и преобразуется независимо один от другого. Расшифрование каждого блока также происходит независимо.

    Достоинства:

    - простота реализации;

    - возможность шифрования нескольких сообщений одним ключом без снижения стойкости;

    - возможность параллельной.

    Недостатки:

    - однозначное соответствие между блоками открытого текста и криптограммами;

    - возможность повтора блоков и замены блоков в информационном пакете;

    - распространение ошибки шифротекста.


    Область применения:

    - шифрование других ключей и вообще случайной информации;

    - шифрование хранилищ данных с произвольным доступом.

    Режим сцепления блоков шифротекста .

    Cipher Block Chaining (CBC)

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


    Достоинства:

    - сложно манипулировать открытым текстом (подмена и замена);

    - одним ключом можно шифровать несколько сообщений;

    - расшифрование может выполнятся параллельно.

    Недостатки:

    - шифротекст на один блок длиннее открытого текста;

    - ошибка в синхронизации является фатальной;

    - распространение ошибки шифротекста;

    - шифрование не может выполняться параллельно.

    Область применения:

    - шифрование файлов и сообщений.


    Режим обратной связи по шифротексту.

    Cipher Feed Back (CFB)

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


    Достоинства:

    - размер блока данных может отличаться от стандартного размера;

    - сложно манипулировать открытым текстом;

    - возможность шифрования одним ключом нескольких сообщений.

    Недостатки:

    - обязательная уникальность (но не секретность) вектора инициализации;

    - быстрое распространение ошибки шифротекста.

    Область применения:

    - посимвольное шифрование потока данных (передача данных между сервером и клиентом в процессе аутентификации).


    Режим обратной связи по выходу .

    Output Feed Back (OFB)

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


    Достоинства:

    - ошибки шифротекста не распространяются;

    - возможность предварительной подготовки гаммы;

    - размер блока данных может отличаться от стандартного размера.

    Недостатки:

    - ошибка синхронизации является фатальной;

    - легко манипулировать открытым текстом;

    - обязательная уникальность (но не секретность) вектора инициализации.

    Область применения:

    - высокоскоростные синхронные системы (спутниковая связь);

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


    Дополнительные режимы шифрования

    Существует также ряд дополнительных режимов шифрования:

    · Режим сцепления блоков с распространением ошибок (PCBC).

    · Режим сцепления блоков шифротекста с контрольной суммой (CBCC).

    · Режим нелинейной обратной связи по выходу (OFBNLF).

    · Сцепление блоков открытого текста (PBC).

    · Режим обратной связи по открытому тексту (PFB).

    · Сцепления блоков текста по различиям открытого текста (CBCPD).

    Существуют две методологии криптографической обработки информации с использованием ключей – симметричная и асимметричная.

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

    Рис. 2.1

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

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

    Из симметричных алгоритмов шифрования широкое использование получил алгоритм шифрования DES (изобретенный фирмой IBM), который рекомендован в открытых секторах экономики США. Этот алгоритм был изначально обречен на лимитированную продолжительность жизни вследствие ограничения длинны ключа до 56 битов.

    В начале 1997 г. алгоритму DES, имеющему ключ в 56 бит, был брошен вызов. 17 июня 1997 г., через 140 дней ключ был расшифрован. Это означало фактическую смерть DES как стандарта шифрования. И действительно, когда в начале 1998 г., следующее соревнование по нахождению ключа DES привело к успеху всего за 39 дней, национальный институт стандартов США (NIST) объявил конкурс на утверждение нового стандарта AES (Advanced Encryption Standard). AES стал полностью открытым симметричным алгоритмом с ключом размером 128, 192, 256 бит.

    Положение усугубляется тем, что по законодательству США к экспорту в качестве программных продуктов разрешены системы шифрования с ключом не более 128 бит. То есть, покупая шифросистему с ключом 1024 или 2048 и более бит, надо знать, что при смене ключа активной (изменяющейся) частью будет часть ключа в 128 бит. Симметричные системы шифрования имеют один общий недостаток, состоящий в сложности рассылки ключей. При перехвате ключа третьей стороной такая система криптозащиты будет скомпроментирована. Так при замене ключа его надо конфиденциально переправить участникам процедур шифрования. Очевидно, что этот метод не годится в том случае, когда нужно установить защищенные соединения с тысячами и более абонентов Интернет. Основная проблема состоит в том, как сгенерировать и безопасно передать ключи участникам взаимодействия. Как установить безопасный канал передачи информации между участниками взаимодействия для передачи ключей по незащищенным каналам связи? Отсутствие безопасного метода обмена ключами ограничивает распространение симметричной методики шифрования в Интернет.

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

    Открытый ключ передается по открытым каналам связи другому участнику процесса криптозащиты, но секретный ключ хранится в секрете.

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

    Рис. 2.2

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

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

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

    В настоящее время распространение получили системы шифрования, использующие комбинированный алгоритм, позволяющий при высокой скорости шифрования, присущей AES использовать открытую пересылку ключей шифрования (как в RSA).

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

    Рис. 2.3

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

    Рис. 2.4

    Криптографические системы с открытым ключом в настоящее время широко применяются в различных сетевых протоколах, в частности, в протоколах TLS и его предшественнике SSL (лежащих в основе HTTPS), в SSH. Также используется в PGP, S/MIME.