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

Бытовая техника 02.05.2019
Бытовая техника

Симметричные криптосистемы

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

В настоящее время симметричные шифры - это:

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

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

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

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

Рис. 7.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Мало кто знает как именно работает асимметричное шифрование. К примеру есть люди которые не считают протокол 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 , который в дальнейшем могут использовать для шифрования своих сообщений. По сути в статье я описывал не само ассиметричное шифрование как таковое, а протокол обмена ключами, который дал толчок к развитию ассиметричного шифрования.
      Алгоритм генерации пары приватный/публичный ключ на самом деле немного сложнее, хотя и похож на выше изложенный алгоритм, но все таки наверное стоит отдельной статьи. В комментарии я не распишу тут сходу, ибо могу много чего напутать.

  • Григорий
  • В этой части рассмотрены следующие вопросы:

    • Типы шифров
    • Шифры подстановки
    • Шифры перестановки
    • Методы шифрования
    • Симметричные и асимметричные алгоритмы
    • Симметричная криптография
    • Асимметричная криптография
    • Блочные и поточные шифры
    • Векторы инициализации
    • Гибридные методы шифрования
    Симметричные шифры делятся на два основных типа: подстановки (substitution) и перестановки (transposition, permutation). Шифры подстановки заменяют биты, символы или блоки на другие биты, символы или блоки. Шифры перестановки не меняют исходный текст, вместо этого они перемещают исходные значения внутри исходного текста – они переставляют биты, символы или блоки символов для скрытия первоначального смысла.

    Шифры подстановки используют ключ, который указывает, как следует выполнять подстановку. В шифре Цезаря каждый символ заменялся символом, расположенным на три позиции дальше него в алфавите. Алгоритмом был алфавит, а ключом – инструкция «сдвигать на три символа».

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

    В шифре перестановки значение перемешивается (scrambled) или ставится в другом порядке. Ключ определяет позицию, на которую следует переместить значение, как показано на Рисунке 6-6.

    Рисунок 6-6. Шифр перестановки


    Это простейший пример шифра перестановки, он показывает только способ выполнения перестановки. Если применяются сложные математические функции, перестановка может стать достаточно сложной для взлома. Современные симметричные алгоритмы используют одновременно и длинные последовательности сложных подстановок и перестановок символов шифруемого сообщения. Алгоритм содержит возможные способы для процессов подстановки и перестановки (представленные в математических формулах). Ключ является инструкциями для алгоритма, точно указывая, как должна происходить обработка и в какой последовательности. Чтобы понять связь между алгоритмом и ключом, взгляните на Рисунок 6-7. Образно говоря, алгоритм создает различные ящики, каждый из которых имеет свой (отличный от других) набор математических формул, указывающих шаги подстановки и перестановки, которые должны быть совершены над попадающими в этот ящик битами. Для шифрования сообщения, значение каждого бита должно пройти через различные ящики. Однако если каждое наше сообщение будет проходить через один и тот же набор ящиков в одинаковой последовательности, злоумышленник легко сможет провести обратный инжиниринг этого процесса, взломать шифр и получить открытый текст нашего сообщения.

    Рисунок 6-7. Связь ключа и алгоритма


    Чтобы помешать злоумышленнику, используется ключ, представляющий из себя набор значений, которые указывают, какие ящики должны использоваться, в какой последовательности и с какими значениями. Так, если сообщение А шифруется ключом 1, ключ требует, чтобы сообщение прошло через ящики 1, 6, 4 и 5. Когда нам нужно зашифровать сообщение В, мы используем ключ 2, который требует, чтобы сообщение прошло через ящики 8, 3, 2 и 9. Ключ добавляет случайность и секретность в процесс шифрования.

    Простые шифры подстановки и перестановки уязвимы к атакам, выполняющим частотный анализ (frequency analysis). В каждом языке некоторые слова и шаблоны используются чаще, чем другие. Например, в тексте на английском языке обычно чаще используется буква «е». При выполнении частотного анализа сообщения, взломщик ищет самые часто повторяющиеся шабоны из 8 бит (составляющих символ). Если в коротком сообщении он нашел, например, 12 восьмибитных шаблонов, он может сделать вывод, что это вероятнее всего буква «е» - самая часто используемая буква в языке. Теперь взломщик может заменить эти биты на букву «е». Это даст ему опору в процессе, который позволит ему провести обратный инжиниринг и восстановить исходное сообщение.

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

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

    Функции генерации ключей (KDF – key derivation function) используется для генерации ключей, состоящих из случайных значений. Различные значения могут использоваться независимо или совместно в качестве случайного ключевого материала. Созданы алгоритмы, использующие определенные хэши, пароли и/или «соль», которые много раз проходят через математические функции, указанные алгоритмом. Чем больше раз этот ключевой материал пройдет через указанные функции, тем больший уровень уверенности и безопасности сможет обеспечить криптосистема в целом.


    ПРИМЕЧАНИЕ . Помните, что алгоритм остается статичным. Случайность процессов криптографии обеспечивается в основном за счет ключевого материала.


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

    Криптографические алгоритмы делятся на симметричные алгоритмы , которые используют симметричные ключи (также называемые секретными ключами (secret key)), и асимметричные алгоритмы , которые используют асимметричные ключи (называемые также открытыми (public key) и закрытыми ключами (private key)).

    В криптосистеме, в которой применяется симметричная криптография, отправитель и получатель используют два экземпляра одного и того же ключа для зашифрования и расшифрования информации, как показано на Рисунке 6-8. Таким образом, ключ имеет двойную функциональность и применяется как в процессе зашифрования, так и в процессе расшифрования. Симметричные ключи также называют секретными ключами , т.к. этот тип шифрования предполагает, что каждый из пользователей хранит ключ в секрете и надлежащим образом защищает его. Если атакующий получит этот ключ, он сможет расшифровать с его помощью любое перехваченное зашифрованное на нем сообщение.

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


    Каждой паре пользователей, для защищенного с помощью симметричной криптографии обмена данными, требуется два экземпляра одного и того же ключа. Например, если Дену и Ирине нужно обмениваться данными, им обоим нужно получить копию одного ключа. Если Ден хочет также с использованием симметричной криптографии взаимодействовать с Нормом и Дейвом, ему нужно иметь три отдельных ключа – по одному на каждого друга. Это не является большой проблемой, пока Дену не потребуется взаимодействовать с сотней других людей за несколько месяцев и сохранять историю переписки. Ведь это потребует использования соответствующего ключа для переписки с каждым конкретным получателем. В таком случае это может стать сложнейшей задачей. Если десяти людям необходимо безопасно обмениваться данными друг с другом с использованием симметричной криптографии, им потребуется 45 ключей. Если же взаимодействовать нужно ста людям, им потребуется 4950 ключей. Формула для расчета необходимого количества симметричных ключей выглядит следующим образом:

    Число ключей = N(N – 1)/2, где N – число абонентов


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

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

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

    Следующий список описывает сильные и слабые стороны криптосистем с симметричными ключами:

    Сильные стороны:

    • Гораздо быстрее асимметричных систем
    • При использовании длинного ключа сложно взломать
    Слабые стороны:
    • Требует безопасного механизма передачи ключей
    • Каждой паре пользователей нужен уникальный ключ; по мере увеличении количества пользователей, возрастающее число ключей может сделать управление ими просто нереальной задачей
    • Обеспечивает конфиденциальность, но не обеспечивает аутентификацию или неотказуемость
    Ниже приведены некоторые примеры симметричных алгоритмов, которые будут подробно рассмотрены позднее в разделе «Блочные и поточные шифры».
    • RC4 , RC5 и RC6
    Ссылки по теме:
    • Security in Open Systems, Node 208, “Symmetric Key Cryptography,” by Paul Markovitz, NIST Special Publication 800-7 (July 1994)
    В криптографии с симметричными ключами для зашифрования и расшифрования используется один и тот же секретный ключ, тогда как в системах с открытыми ключами для этих целей используются различные (асимметричные ) ключи. При этом два отличающихся асимметричных ключа связаны между собой математически. Если сообщение зашифровано одним ключом, для его расшифрования требуется другой ключ.

    В системах с открытыми ключами, создается пара ключей, один из которых является закрытым, другой – открытым. Открытый ключ (public key) может быть известен всем, а закрытый ключ (private key) должен знать только его владелец. Часто открытые ключи хранятся в каталогах и базах данных адресов электронной почты, общедоступных всем желающим использовать эти ключи для зашифрования и расшифрования данных при взаимодействии с отдельными людьми. Рисунок 6-9 иллюстрирует использование отличающихся асимметричных ключей.
    Открытый и закрытый ключи асимметричной криптосистемы математически связаны, однако наличие у кого-то открытого ключа другого человека не позволяет узнать соответствующий ему закрытый ключ. Таким образом, если злоумышленник получит копию открытого ключа Боба, это вовсе не значит, что он с помощью какого-то математического волшебства сможет получить соответствующий ему закрытый ключ Боба. Однако, если кто-то получит закрытый ключ Боба, возникнет большая проблема. Поэтому никто кроме владельца не должен иметь доступа к закрытому ключу.

    Рисунок 6-9. Асимметричная криптосистема


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

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

    Если отправителю в большей степени важна конфиденциальность передаваемой информации, ему следует зашифровать свое сообщение на открытом ключе получателя. Это называют безопасным форматом сообщения (secure message format), поскольку только человек, имеющий соответствующий закрытый ключ, сможет расшифровать это сообщение.

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

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

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

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

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

    ПРИМЕЧАНИЕ. Криптография с открытым ключом – это асимметричная криптография. Эти термины взаимозаменяемы.

    Ниже указаны сильные и слабые стороны алгоритмов с асимметричными ключами:

    Сильные стороны

    • Лучше процесс распространения ключей, чем в симметричных системах
    • Лучше масштабируемость, чем в симметричных системах
    • Могут обеспечить аутентификацию и неотказуемость
    Слабые стороны
    • Работают гораздо медленнее симметричных систем
    • Выполняют сложные математические преобразования
    Ниже приведены примеры алгоритмов с асимметричными ключами.
    • Криптосистема на основе эллиптических кривых (ECC – Elliptic curve cryptosystem)
    • Алгоритм Диффи-Хеллмана Diffie-Hellman
    • Эль Гамаль (El Gamal)
    • Алгоритм цифровой подписи (DSA – Digital Signature Algorithm)
    • Knapsack
    Эти алгоритмы мы рассмотрим далее в этом Домене, в разделе «Типы асимметричных систем».

    В Таблице 6-1 приведено краткое резюме основных отличий между симметричными и асимметричными системами.

    Таблица 6-1. Различия между симметричными и асимметричными системами


    ПРИМЕЧАНИЕ . Цифровые подписи будут рассмотрены позднее в разделе «Цифровые подписи».
    Ссылки по теме:
    • Security in Open Systems, Node 210, “Asymmetric Key Cryptography,” by Paul Markovitz, NIST Special Publication 800-7 (July 1994)
    • Frequently Asked Questions About Today’s Cryptography, Version 4.1, Section 2.1.4.5, “What Is Output Feedback Mode?” by RSA Laboratories
    Существует два основных типа симметричных алгоритмов: блочные шифры, которые работают с блоками битов, и потоковые шифры, которые обрабатывают по одному биту за раз.

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


    Для обеспечения стойкости шифра, в нем должны в достаточной степени использоваться два основных метода: перемешивание (confusion) и рассеивание (diffusion). Перемешивание обычно выполняется с помощью подстановки, тогда как рассеивание – с помощью перестановки. Чтобы шифр был действительно стойким, он должен использовать оба эти метода, чтобы сделать процесс обратного инжиниринга практически невозможным. На уровень перемешивания и рассеивания указывают случайность значения ключа и сложность применяемых математических функций.

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

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

    Рассеивание, с другой стороны, означает, что один бит открытого текста оказывает влияние на несколько бит шифротекста. Замена значения в открытом тексте должна приводить к замене нескольких значений в шифротексте, а не одного. Фактически, в действительно стойком блочном шифре, при замене одного бита в открытом тексте, должны изменяться около 50% битов в шифротексте. Т.е. при изменении всего одного бита в открытом тексте, изменится около половины шифротекста.

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

    Рисунок 6-10. Сообщение разделяется на блоки битов, над которыми выполняются функции замещения и рассеивание


    Ключ указывает (см. Рисунок 6-10), какие должны использоваться S-боксы в процесе перемешивания исходного сообщения из читаемого открытого текста в нечитаемый шифротекст. Каждый S-бокс содержит различные методы подстановки и перестановки, которые могут быть выполнены над каждым блоком. Это очень простой пример. В реальности большинство блочных шифров работает с блоками размером по 32, 64 или 128 бит и может использовать гораздо больше S-боксов.

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

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

    Рисунок 6-11. В поточном шифре биты, сгенерированные генератором ключевого потока, объединяются посредством XOR с битами открытого текста сообщения

    ПРИМЕЧАНИЕ . Этот процесс очень похож на использование одноразовых шифровальных блокнотов, описанных ранее. Отдельные биты в одноразовом блокноте используются для шифрования отдельных битов сообщения с помощью операции XOR, а в поточном алгоритме отдельные биты создаются генератором ключевого потока, также используемым для шифрования битов сообщения с использованием операции XOR.

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

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

    Рисунок 6-12. Отправитель и получатель должны иметь один и тот же ключ для генерации одинакового ключевого потока



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

    Стойкие и эффективные поточные шифры имеют следующие характеристики:

    • Длинные периоды неповторяющихся шаблонов в значениях ключевого потока . Биты, генерируемые ключевым потоком должны быть случайны.
    • Статистически непредсказуемый ключевой поток . Биты, получаемые на выходе генератора ключевого потока, не должны быть предсказуемы.
    • Ключевой поток не имеет линейной связи с ключом . Если кто-то получил значения ключевого потока, это не должно привести к получению им значения ключа.
    • Статистически равномерный ключевой поток (примерно равное количество нулей и единиц) . В ключевом потоке не должны преобладать нули или единицы.
    Поточные шифры требуют обеспечения случайности и шифруют по одному биту за раз. Это требует больше ресурсов процессора, чем при использовании блочного шифра, поэтому поточные шифры больше подходят для реализации на аппаратном уровне. А блочные шифры, поскольку они не требуют столько ресурсов процессора, проще реализовывать на программном уровне.
    ПРИМЕЧАНИЕ . Конечно, существуют и блочные шифры, реализованные на аппаратном уровне, и поточные шифры, работающие на программном уровне. Указанное выше утверждение просто является «лучшей практикой», рекомендациями по разработке и внедрению.


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


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

    Совместное использование асимметричных и симметричных алгоритмов


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

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

    Симметричный ключ используется для шифрования отправляемых вами сообщений. Когда ваш друг получает зашифрованное вами сообщение, ему нужно расшифровать его, для чего ему требуется симметричный ключ, на котором зашифровано ваше сообщение. Но вы не хотите отправлять этот ключ незащищенным образом, т.к. сообщение может быть перехвачено и незащищенный ключ может быть извлечен из него злоумышленником для последующего использования в целях расшифрования и ознакомления с вашими сообщениями. Не следует использовать для шифрования сообщений симметричный ключ, если для него не обеспечена надлежащая защита. Для обеспечения защиты симметричного ключа можно использовать асимметричный алгоритм, с помощью которого он может быть зашифрован (см. Рисунок 6-13). Но зачем нам использовать симметричный ключ для шифрования сообщений, а асимметричный ключ для шифрования симметричного ключа? Как было сказано ранее, асимметричный алгоритм работает медленно, т.к. он использует более сложную математику. А поскольку ваше сообщение, скорее всего, будет длиннее ключа, для его шифрования разумнее использовать более быстрый алгоритм (симметричный), а для шифрования ключа подойдет медленный (асимметричный), но обеспечивающий дополнительные сервисы безопасности.

    Рисунок 6-13. В гибридной системе асимметричный ключ используется для шифрования симметричного ключа, а симметричный ключ используется для шифрования сообщений


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

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

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

    Здесь все достаточно просто, вам нужно запомнить следующие аспекты:

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

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

    Если у Тани есть симметричный ключ, который она постоянно использует для шифрования сообщений между ней и Лансом, этот симметричный ключ не нужно перегенерировать или изменять. Они просто используют один и тот же ключ каждый раз при взаимодействии с использованием шифрования. Однако длительное повторное использование одного и того же ключа повышает вероятность его перехвата и компрометации безопаных коммуникаций. Чтобы избежать этого, следует генерировать новый симметричный ключ каждый раз, когда Тане и Лансу нужно взаимодействовать, и использовать его лишь на протяжении одного сеанса связи, а затем уничтожать (см. Рисунок 6-14). Даже если им потребуется снова взаимодействовать всего через час, будет сгенерирован новый сеансовый ключ.

    Рисунок 6-14. Сеансовый ключ генерируется для каждого сеанса взаимодействия пользователей и действует только в рамках этого сеанса


    Цифровые конверты. При первом знакомстве людей с вопросами криптографии, совместное использование симметричных и асимметричных алгоритмов может вызвать непонимание. Однако эти концепции очень важно понять, поскольку они действительно являются ядром, фундаментальными концепциями криптографии. Этот процесс используется не только в почтовом клиенте или в нескольких продуктах, он определяет весть порядок обработки данных и симметричных ключей при их передаче.
    Совместное использование этих двух технологий называется гибридным подходом, но у него есть и более общее название – цифровой конверт (digital envelope).




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

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


    ПРИМЕЧАНИЕ. Закрытые и симметричные ключи не должны храниться и/или передаваться в виде открытого текста. Хотя это кажется очевидным, уже множество программных продуктов было скомпрометировано именно по этой причине.

    Проблемы беспроводной безопасности. Мы рассматривали различные стандарты 802.11 и протокол WEP в Домене 05 . Среди обширного списка проблем WEP, есть проблема, связанная с шифрованием данных. Если для шифрования беспроводного трафика используется только WEP, в таком случае в большинстве реализаций используется только один статистический симметричный ключ для шифрования пакетов. Одним из изменений и преимуществ стандарта 802.11i является то, что он обеспечивает шифрование каждого пакета уникальным сеансовым ключом.
    Защити свой компьютер на 100% от вирусов и хакеров Бойцев Олег Михайлович

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

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

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

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

    DES (значительно устарел) и TripleDES (3DES);

    AES (Rijndael);

    ГОСТ 28147-89;

    Основными параметрами алгоритмов симметричного шифрования можно считать:

    Стойкость;

    Длину ключа;

    Количество раундов;

    Длину обрабатываемого блока;

    Сложность аппаратной/программной реализации.

    Итак, начнем.

    Data Encryption Standard (DES). Алгоритм Data Encryption Standard (DES) был разработан компанией IBM в начале 1970-х гг. Национальный институт стандартов и технологий США (NIST) принял на вооружение алгоритм (публикация FIPS 46) для DES в 1977 году. Дальнейшей модификации алгоритм подвергался в 1983, 1988, 1993 и 1999 годах.

    До недавнего времени DES был "стандартом США", поскольку правительство этой страны рекомендовало применять его для реализации различных систем шифрования данных. Однако несмотря на то что изначально DES планировалось использовать не более 10-15 лет, попытки его замены начались только в 1997 году.

    DES использует ключ длиной 56 бит. По сегодняшним меркам, такая длина ключа неприемлема. DES является блочным алгоритмом шифрования, обрабатывающим единовременно один 64-битный блок открытого текста. В алгоритме DES выполняются 16 циклов шифрования с различным подключом в каждом из циклов. Ключ подвергается действию своего собственного алгоритма для образования 16 подключей (рис. 2.1).

    Рис. 2.1. Схема работы DES

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

    Вводится функция F, которая работает с 32-разрядными словами исходного текста ® и использует в качестве параметра 48-разрядный ключ (J). Схема работы функции F показана на рис. 2.1. Сначала 32 входных разряда расширяются до 48, при этом некоторые разряды повторяются.

    Для полученного 48-разрядного кода и ключа выполняется операция сложения по модулю 2. Результирующий 48-разрядный код преобразуется в 32-разрядный с помощью S-матриц.

    Исходный 48-разрядный код делится на восемь групп по шесть разрядов. Первый и последний разряды в группе используются в качестве адреса строки, а средние четыре разряда – в качестве адреса столбца. В результате каждые шесть бит кода преобразуются в четыре бита, а весь 48-разрядный код – в 32-разрядный (для этого нужно восемь S-матриц). Существуют разработки, позволяющие выполнять шифрование в рамках стандарта DES аппаратным образом, что обеспечивает довольно высокое быстродействие.

    Чтобы все-таки разобраться во всех тонкостях алгоритма DES, будет вполне уместно привести описание так называемой сети Фейштеля (иногда называют сетью Файстеля), которая и стоит в основе DES.

    В 1973 году Хорст Фейштель (Horst Feistel) в журнале Scientific American опубликовал статью "Cryptography and Computer Privacy", в которой раскрыл некоторые важные аспекты шифрования, а также ввел конструкцию, названную впоследствии сетью Фейштеля. Эта схема была использована в проекте Lucifer фирмы IBM, над которым работали Фейштель и Дон Копперсмит (Don Coppersmith). Данный проект был скорее экспериментальным, но стал базисом для Data Encryption Standard (DES). Итеративная структура алгоритма позволяла упростить его реализацию в аппаратных средах.

    Уместно заметить, что следующие блочные шифры как раз таки используют классическую или модифицированную сеть Фейштеля в своей основе: Blowfish, Camellia, CAST, DES, FEAL, ГОСТ 28147-89, KASUMI, LOKI97, Lucifer, MacGuffin, MARS, MAGENTA, MISTY1, RC2, RC5, RC6, Skipjack, TEA, Triple DES, Twofish, XTEA.

    TripleDES (3DES). Очевидная нестойкость DES стала причиной поисков некой альтернативы. В 1992 году исследования показали, что DES можно использовать трижды для обеспечения более мощного шифрования. Так появился тройной DES (3DES). Тройной DES используется либо с двумя, либо с тремя ключами. Используемый при этом ключ обеспечивает большую мощность в сравнении с обычным DES.

    Advanced Encrypt Standard (AES). Вскоре после выхода DES обнаружилась очевидная слабость алгоритма. Необходимость в принятии нового стандарта была более чем явной: небольшая длина ключа DES (56 бит) позволяла применить метод грубой силы против этого алгоритма. Кроме того, архитектура DES была ориентирована на аппаратную реализацию, и программная реализация алгоритма на платформах с ограниченными ресурсами не давала необходимого быстродействия. Модификация TDES обладала достаточной длиной ключа, но при этом была еще медленнее. TDES не просуществовал столь долго, чтобы можно было говорить о том, что алгоритм стоек и надежен. Ему на смену, как и следовало ожидать, пришел более стойкий и надежный алгоритм – AES, который, между прочим, был выбран в результате конкурса и принят в качестве американского стандарта шифрования правительством США. Немного о самом конкурсе.

    2 января 1997 года NIST (Национальный Институт Стандартов и Технологий) объявляет о намерении найти замену DES, являвшемуся американским стандартом с 1977 года. NIST принял достаточное количество предложений от заинтересованных сторон о том, каким образом следует выбирать алгоритм. Активный отклик со стороны открытого криптографического сообщества привел к объявлению конкурса 12 сентября 1997 года. Алгоритм могла предложить практически любая организация или группа исследователей. Минимальные требования к новому стандарту были следующими:

    Это должен быть блочный шифр;

    Длина блока должна составлять 128 бит;

    Алгоритм должен работать с ключами длиной 128, 192 и 256 бит;

    Использовать операции, легко реализуемые как аппаратно (в микрочипах), так и программно (на персональных компьютерах и серверах);

    Ориентироваться на 32-разрядные процессоры;

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

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

    20 августа 1998 года на первой конференции AES был объявлен список из 15 кандидатов, а именно: CAST-256, CRYPTON, DEAL, DFC, E2, FROG, HPC, LOKI97, MAGENTA, MARS, RC6, Rijndael, SAFER+, Serpent и Twofish.

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

    В марте 1999 года прошла вторая конференция AES, а в августе 1999 года были объявлены пять финалистов, среди которых оказались: MARS, RC6, Rijndael, Serpent и Twofish. Все они были разработаны авторитетными криптографами, имеющими мировое признание. На 3-й конференции AES в апреле 2000 года все авторы представили свои алгоритмы.

    В Нью-Йорке 13 и 14 апреля 2000 года, незадолго до завершения второго этапа, прошла третья конференция AES. Двухдневная конференция была разделена на восемь сессий по четыре в день. На сессиях первого дня обсуждались вопросы, связанные с программируемыми матрицами (FGPA), проводилась оценка реализации алгоритмов на различных платформах, в том числе PA-RISC, IA-64, Alpha, высокоуровневых смарт-картах и сигнальных процессорах, сравнивалась производительность претендентов на стандарт, анализировалось количество раундов в алгоритмах-кандидатах. На второй день был проанализирован Rijndael с сокращенным количеством раундов и показана его слабость в этом случае, обсуждался вопрос об интегрировании в окончательный стандарт всех пяти алгоритмов-претендентов, еще раз тестировались все алгоритмы. В конце второго дня была проведена презентация, на которой претенденты рассказывали о своих алгоритмах, их достоинствах и недостатках. О Rijndael как о лидере рассказал Винсент Риджмен (Vincent Rijmen), заявивший о надежности защиты, высокой общей производительности и простоте архитектуры своего кандидата.

    2 октября 2000 года было объявлено, что победителем конкурса стал алгоритм Rijndael, и началась процедура стандартизации. 28 февраля 2001 года был опубликован проект, а 26 ноября 2001 года AES был принят как FIPS 197.

    Строго говоря, AES и Rijndael не одно и то же, так как Rijndael поддерживает широкий диапазон длин ключей и блоков.

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

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

    Алгоритм Rijndael предусматривает выполнение четырех последовательных преобразований.

    1. BS (ByteSub) – табличная замена каждого байта массива (рис. 2.2).

    Рис. 2.2. Табличная замена каждого байта массива

    2. SR (ShiftRow) – сдвиг строк массива. При этой операции первая строка остается без изменений, а остальные циклически побайтно сдвигаются влево на фиксированное количество байт, зависящее от размера массива. Например, для массива размером 4 х 4 строки 2, 3 и 4 сдвигаются на 1, 2 и 3 байта соответственно (рис. 2.3).

    3. Следующим идет MC (MixColumn) – операция над независимыми столбцами массива, когда каждый столбец по определенному правилу умножается на фиксированную матрицу C(X) (рис. 2.4).

    4. Заключительный этап – AK (AddRoundKey) – добавление ключа. Каждый бит массива складывается по модулю 2 с соответствующим битом ключа раунда, который, в свою очередь, определенным образом вычисляется из ключа шифрования (рис. 2.5).

    Рис. 2.3. Сдвиг строк массива

    Рис. 2.4. Операция MixColumn

    Рис. 2.5. Операция добавления ключа

    Вышеперечисленные преобразования шифруемых данных поочередно выполняются в каждом раунде (рис. 2.6).

    Рис. 2.6. Последовательность раундов Rijndael

    В алгоритме Rijndael количество раундов шифрования ® переменное (10, 12 или 14 раундов) и зависит от размеров блока и ключа шифрования (для ключа также предусмотрено несколько фиксированных размеров).

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

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

    26 мая 2006 года на конференции Quo Vadis IV Николя Тадеуш Куртуа (польский криптограф, проживающий во Франции) представил практическое доказательство существования алгебраических атак, оптимизированных против шифра AES-Rijndael. За полтора часа на своем ноутбуке он осуществил демо-взлом всего лишь по нескольким шифртекстам близкого аналога Rijndael. Хотя это был только модельный шифр, он являлся таким же стойким, в него не было добавлено существенных слабостей, он имел такие же хорошие диффузионные характеристики и устойчивость ко всем известным до этого видам криптоанализа. Единственным отличием были лишь измененные в рамках модели алгебраических атак параметры S-блоков и уменьшенное для наглядности количество раундов. Однако этого было достаточно, чтобы убедить скептиков в реальности алгебраических атак и несовершенстве даже такого, казалось бы, совершенного метода шифрования.

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

    Алгоритм был разработан в бывшем Главном Управлении КГБ СССР или в одном из секретных НИИ в его системе. Первоначально имел гриф (ОВ или СС – точно неизвестно), затем гриф последовательно снижался и к моменту официального проведения алгоритма через Госстандарт СССР в 1989 году был снят. Алгоритм остался ДСП (как известно, ДСП не считается грифом). В 1989 году стал официальным стандартом СССР, а позже, после распада СССР, федеральным стандартом Российской Федерации.

    С момента опубликования ГОСТа на нем стоял ограничительный гриф "Для служебного пользования", и формально шифр был объявлен "полностью открытым" только в мае 1994 года. По известным причинам, история создания шифра и критерии его проектирования до сих пор неизвестны.

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

    При работе ГОСТ 28147-89 информация шифруется блоками по 64 бита (такие алгоритмы называются блочными), которые затем разбиваются на два субблока по 32 бита (N1 и N2). После завершения обработки субблока N1 его значение складывается со значением субблока N2 (сложение выполняется по модулю 2, то есть применяется логическая операция XOR – исключающее ИЛИ), а затем субблоки меняются местами. Данное преобразование выполняется определенное количество раз (раундов): 16 или 32 в зависимости от режима работы алгоритма. В каждом раунде выполняются две операции (рис. 2.7).

    Рис. 2.7. Преобразование выполняется определенное количество раз

    Первая операция подразумевает наложение ключа. Содержимое субблока N1 складывается по модулю 2 с 32-битной частью ключа Kx. Полный ключ шифрования представляется в виде конкатенации 32-битных подключей: K0, K1, K2, K3, K4, K5, K6, K7. В процессе шифрования используется один из этих подключей, в зависимости от номера раунда и режима работы алгоритма.

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

    Алгоритм, определяемый ГОСТ 28147-89, может работать в четырех режимах:

    Простой замены;

    Гаммирования;

    Гаммирования с обратной связью;

    Генерации имитоприставок.

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

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

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

    1. В регистры N1 и N2 записывается их начальное заполнение – 64-битная величина, называемая синхропосылкой.

    2. Выполняется зашифровка содержимого регистров N1 и N2 (в данном случае синхропосылки) в режиме простой замены.

    3. Содержимое регистра N1 складывается по модулю (2 32 – 1) с константой C1, равной 2 24 + 2 16 + 2 8 + 2 4 , а результат сложения записывается в регистр N1.

    4. Содержимое регистра N2 складывается по модулю 2 32 с константой C2, равной 2 24 + 2 16 + 2 8 + 1, а результат сложения записывается в регистр N2.

    5. Содержимое регистров N1 и N2 подается на выход в качестве 64-битного блока гаммы шифра (в данном случае N1 и N2 образуют первый блок гаммы).

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

    Для расшифровки гамма вырабатывается аналогичным образом, а затем к битам зашифрованного текста и гаммы снова применяется операция XOR.

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

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

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

    Рассматривая режим генерации имитоприставок, следует определить понятие предмета генерации. Имитоприставка – это криптографическая контрольная сумма, вычисляемая с использованием ключа шифрования и предназначенная для проверки целостности сообщений. При генерации имитоприставки выполняются следующие операции: первый 64-битный блок массива информации, для которого вычисляется имитоприставка, записывается в регистры N1 и N2 и зашифровывается в сокращенном режиме простой замены (выполняются первые 16 раундов из 32). Полученный результат суммируется по модулю 2 со следующим блоком информации с сохранением результата в N1 и N2.

    Цикл повторяется до последнего блока информации. Получившееся в результате этих преобразований 64-битное содержимое регистров N1 и N2 или его часть и называется имитоприставкой. Размер имитоприставки выбирается исходя из требуемой достоверности сообщений: при длине имитоприставки r бит вероятность, что изменение сообщения останется незамеченным, равна 2^.Чаще всего используется 32-битная имитоприставка, то есть половина содержимого регистров. Этого достаточно, поскольку, как любая контрольная сумма, имитоприставка предназначена прежде всего для защиты от случайных искажений информации. Для защиты же от преднамеренной модификации данных применяются другие криптографические методы – в первую очередь электронная цифровая подпись.

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

    Алгоритм ГОСТ 28147-89 считается достаточно сильным – в настоящее время для его раскрытия не существует более эффективных методов, чем упомянутый выше Brute Force. Высокая стойкость алгоритма достигается в первую очередь за счет большой длины ключа, равной 256 бит. К тому же при использовании секретной синхропосылки эффективная длина ключа увеличивается до 320 бит, а засекречивание таблицы замен прибавляет дополнительные биты. Кроме того, криптостойкость ГОСТ 28147-89 уже при 32 раундах можно считать более чем достаточной, и это притом, что полный эффект рассеивания входных данных достигается уже после восьми раундов.

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

    Эффективность реализации и, соответственно, высокое быстродействие на современных компьютерах;

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

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

    Кратко рассмотрим некоторые другие алгоритмы симметричного шифрования.

    Blowfish. Blowfish представляет собой 64-битный блочный шифр, разработанный Шнайером (Schneier) в 1993 году. Этот шифр, как и многие другие, основан на алгоритме сети Фейштеля. Отдельный раунд шифрования данного алгоритма состоит из зависимой от ключа перестановки и зависимой от ключа с данными замены. Все операции основаны на операциях XOR и прибавлениях к 32-битным словам (XORs and additions on 32-bit words). Ключ имеет переменную длину (максимальная длина 448 бит) и используется для генерации нескольких подключевых массивов (subkey arrays). Шифр был создан специально для 32-битных машин и существенно быстрее ранее рассмотренного нами алгоритма DES.

    IDEA (International Data Encryption Algorithm) был разработан К. Лейем (Lai) и Д. Месси (Massey) в конце 1980-х годов. Это шифр, состоящий из 64-битных повторяющихся блоков со 128-битным ключом и восемью раундами. Следует отметить, что, в отличие от ранее нами рассмотренных алгоритмов шифрования, IDEA не основан на сети Фейштеля, хотя процесс дешифрования аналогичен процессу шифрования. IDEA был сконструирован с учетом его легкого воплощения как программно, так и аппаратно. Ко всему прочему безопасность IDEA основывается на использовании трех несовместимых типов арифметических операций над 16-битными словами.

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

    RC5 представляет собой довольно быстрый блочный шифр, разработанный Ривестом (Ronald Linn Rivest) специально для «RSA Data Security». Этот алгоритм параметричен, то есть его блок, длинна ключа и количество проходов (раундов) переменны.

    Размер блока может равняться 32, 64 или 128 бит. Количество проходов может варьироваться от 0 до 2048 бит. Параметричность подобного рода делает RC5 необычайно гибким и эффективным алгоритмом в своем классе.

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

    Из книги Защити свой компьютер на 100% от вирусов и хакеров автора Бойцев Олег Михайлович

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

    Из книги Основы AS/400 автора Солтис Фрэнк

    Симметричное мультипроцессирование Ранее мы видели, что система симметричного мультипроцессирования (SMP) дает возможность ОС обрабатывать задачи на любом свободном процессоре или на всех процессорах сразу, при этом память остается общей для всех процессоров. Именно

    Из книги Windows Script Host для Windows 2000/XP автора Попов Андрей Владимирович

    Из книги TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) автора Фейт Сидни М

    3.8.6 Комбинированное шифрование Комбинированное шифрование реализуется следующим образом:? Выбирается случайный симметричный ключ.? По этому ключу шифруются данные.? Случайный ключ шифруется с помощью общедоступного ключа шифрования получателя и включается в

    Из книги 500 лучших программ для Windows автора Уваров Сергей Сергеевич

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

    Из книги Программирование на языке Ruby [Идеология языка, теория и практика применения] автора Фултон Хэл

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

    Из книги PGP: Кодирование и шифрование информации с открытым ключом. автора Левин Максим

    Подписание и шифрование. Для подписания текстового файла вашим секретным ключом и последующей его зашифровки открытым ключом адресата, наберите:pgp –es textfile her_userid [-u your_userid]Обратите внимание, что скобки просто обозначают необязательное поле, не вводите сами скобки.В

    Из книги Delphi. Трюки и эффекты автора Чиртик Александр Анатольевич

    Глава 12 Шифрование Основы криптографии Шифр простой подстановки Транспозиция Шифр Виженера и его варианты Шифр с автоключом ВзломПо той или иной причине часто бывает необходимо сообщить определенную информацию конкретному кругу людей так, чтобы она

    Из книги Windows Vista. Для профессионалов автора Клименко Роман Александрович

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

    Из книги Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ автора Борри Хелен

    Шифрование пароля Интерфейс gsec шифрует пароли, используя скромный метод, основанный на алгоритме хэширования DES (Data Encryption Standard, стандарт шифрования данных). По причине восьмисимвольного ограничения идентификация пользователя в Firebird на сегодняшний день не может

    Из книги Введение в криптографию автора Циммерманн Филипп

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

    Из книги Linux глазами хакера автора Флёнов Михаил Евгеньевич

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

    Из книги IT-безопасность: стоит ли рисковать корпорацией? автора Маккарти Линда

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

    Из книги Анонимность и безопасность в Интернете. От «чайника» к пользователю автора Колисниченко Денис Николаевич

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

    Из книги автора

    10.4. Шифрование в Windows 7 Самые дорогие выпуски Windows 7: Профессиональная (Professional), Корпоративная (Enterprise) и Максимальная (Ultimate) – поддерживают функцию шифрования файлов и каталогов (система EFS). Зашифрованные файлы нельзя просмотреть на другом компьютере – в случае, если,

    Под симметричными криптосистемами понимаются такие системы, в которых для шифрования и расшифровки сообщений используется один и тот же ключ (рис. 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 с идентичной ключевой последовательностью для получения исходного текста:

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

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



    Рекомендуем почитать

    Наверх