Основные алгоритмы шифрования




Скачать 207.91 Kb.
НазваниеОсновные алгоритмы шифрования
Дата публикации04.06.2013
Размер207.91 Kb.
ТипРеферат
uchebilka.ru > Информатика > Реферат

Введение в криптографию

Предисловие


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

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

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

Базовая терминология


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

В криптографической терминологии исходное послание именуют открытым текстом (plaintext или cleartext). Изменение исходного текста так, чтобы скрыть от прочих его содержание, называют шифрованием (encryption). Зашифрованное сообщение называют шифротекстом (ciphertext). Процесс, при котором из шифротекста извлекается открытый текст называют дешифровкой (decryption). Обычно в процессе шифровки и дешифровки используется некий ключ (key) и алгоритм обеспечивает, что дешифрование можно сделать лишь зная этот ключ.

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

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

Основные алгоритмы шифрования


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

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

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

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

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

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

Многие качественные криптографические алгоритмы доступны широко - в книжном магазине, библиотеке, патентном бюро или в Интернет. К широко известным симметричным алгоритмам относятся DES и IDEA, Наверное самым лучшим асимметричным алгоритмом является RSA.
^

Цифровые подписи


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

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

Цифровые подписи также можно использовать для удостоверения (сертификации - to certify) того, что документ принадлежит определенному лицу. Это делается так: открытый ключ и информация о том, кому он принадлежит подписываются стороной, которой доверяем. При этом доверять подписывающей стороне мы можем на основании того, что ее ключ был подписан третьей стороной. Таким образом возникает иерархия доверия. Очевидно, что некоторый ключ должен быть корнем иерархии (то есть ему мы доверяем не потому, что он кем-то подписан, а потому, что мы верим apriori, что ему можно доверять). В централизованной инфраструктуре ключей имеется очень небольшое количество корневых ключей сети (например, облеченные полномочиями государственные агентства; их также называют сертификационными агентствами - certification authorities). В распределенной инфраструктуре нет необходимости иметь универсальные для всех корневые ключи, и каждая из сторон может доверять своему набору корневых ключей (скажем своему собственному ключу и ключам, ею подписанным). Эта концепция носит название сети доверия (web of trust) и реализована, например, в PGP.

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

Свободно доступны несколько методов создания и проверки цифровых подписей. Наиболее известным является алгоритм RSA.
^

Криптографические хэш-функции


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

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

Много хороших криптографических хэш-функций доступно бесплатно. Широко известные включают MD5 и SHA.
^

Криптографические генераторы случайных чисел


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

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

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

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

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

Обеспечиваемая шифром степень защиты


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

Теоретически, любой шифровальный алгоритм с использованием ключа может быть вскрыт методом перебора всех значений ключа. Если ключ подбирается методом грубой силы (brute force), требуемая мощность компьютера растет экспоненциально с увеличением длины ключа. Ключ длиной в 32 бита требует 2^32 (около 10^9) шагов. Такая задача под силу любому дилетанту и решается на домашнем компьютере. Системы с 40-битным ключом (например, экспортный американский вариант алгоритма RC4) требуют 2^40 шагов - такие компьютерные мощности имеются в большинстве университетов и даже в небольших компаниях. Системы с 56-битными ключами (DES) требуют для вскрытия заметных усилий, однако могут быть легко вскрыты с помощью специальной аппаратуры. Стоимость такой аппаратуры значительна, но доступна для мафии, крупных компаний и правительств. Ключи длиной 64 бита в настоящий момент, возможно, могут быть вскрыты крупными государствами и уже в ближайшие несколько лет будут доступны для вскрытия преступными организацими, крупными компаниями и небольшими государствами. Ключи длиной 80 бит могут в будущем стать уязвимыми. Ключи длиной 128 бит вероятно останутся недоступными для вскрытия методом грубой силы в обозримом будущем. Можно использовать и более длинные ключи. В пределе нетрудно добиться того, чтобы энергия, требуемая для вскрытия (считая, что на один шаг затрачивается минимальный квантовомеханический квант энергии) превзойдет массу солнца или вселенной.

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

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

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

Чтобы дать представление о степени сложности вскрытия RSA, скажем, что модули длиной 256 бит легко факторизуются обычными программистами. Ключи в 384 бита могут быть вскрыты исследовательской группой университета или компании. 512-битные ключи находятся в пределах досягаемости крупных государств. Ключи длиной в 768 бит вероятно не будут надежны продолжительное время. Ключи длиной в 1024 бит могут считаться безопасными до тех пор, пока не будет существенного прогресса в алгоритме факторизации; ключи длиной в 2048 большинство считает надежными на десятилетия.

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

Криптоанализ и атаки на криптосистемы


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

  • ^ Атака со знанием лишь шифрованного текста (ciphertext-only attack): Это ситуация, когда атакующий не знает ничего о содержании сообщения, и ему приходтся работать лишь с самим шифрованным текстом. На практике, часто можно сделать правдоподобные предположения о структуре текста, поскольку многие сообщения имеют стандартные заголовки. Даже обычные письма и документы начинаются с легко предсказумой информации. Также часто можно предположить, что некоторый блок информации содержит заданное слово.

  • ^ Атака со знанием содержимого шифровки (known-plaintext attack): Атакующий знает или может угадать содержимое всего или части зашифрованного текста. Задача заключается в расшифровке остального сообщения. Это можно сделать либо путем вычисления ключа шифровки, либо минуя это.

  • ^ Атака с заданным текстом (chosen-plaintext attack): Атакующий имеет возможность получить шифрованный документ для любого нужного ему текста, но не знает ключа. Задачей является нахождение ключа. Некоторые методы шифрования и, в частности, RSA, весьма уязвимы для атак этого типа. При использовании таких алгоритмов надо тщательно следить, чтобы атакующий не мог зашифровать заданный им текст.

  • ^ Атака с подставкой (Man-in-the-middle attack): Атака направлена на обмен шифрованными сообщениями и, в особенности, на протокол обмена ключами. Идея заключается в том, что когда две стороны обмениваются ключами для секретной коммуникации (например, используя шифр Диффи-Хелмана, Diffie-Hellman), противник внедряется между ними на линии обмена сообщениями. Далее противник выдает каждой стороне свои ключи. В результате, каждая из сторон будет иметь разные ключи, каждый из которых известен противнику. Теперь противник будет расшифровывать каждое сообщение своим ключом и затем зашифровывать его с помощью другого ключа перед отправкой адресату. Стороны будут иметь иллюзию секретной переписки, в то время как на самом деле противник читает все сообщения.

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

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

Имеется множество других криптографических атак и криптоаналитических подходов. Однако приведенные выше являются, по-видимому, наиболее важными для практической разработки систем. Если кто-либо собирается создавать свой алгоритм шифрования, ему необходимо понимать данные вопросы значительно глубже. Одно из мест, где можно начать систематическое изучение информации - это замечательная книга Брюса Шнейера "Прикладная криптография" (Bruce Schneier, Applied Cryptography).
^

Алгоритмы шифрования

Алгоритмы с открытым ключом


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

  • RSA (Rivest-Shamir-Adelman) является наиболее известным алгоритмом с открытым ключом. Может использоваться как для шифрования, так и для создания подписи. Считается, что алгоритм надежен при использовании достаточно длинных ключей (значение 512 бит считается недостаточным, 768 бит - умеренно надежным, 1024 бит - хорошим). Безопасность RSA основана на проблеме факторизации больших целых чисел. Существенные продвижения в способах факторизации больших чисел могут сделать метод RSA уязвимым. В настоящее время RSA является наиболее важным алгоритмом с открытым ключом. Он запатентован в США (патент оканчивается в 2000 году), и бесплатен в остальной части мира.

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

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

  • Шифр ^ Диффи-Хеллмана (Diffie-Hellman) является известным алгоритмом с открытым ключом, используемый для обмена ключами. Он считается надежным, если используются достаточно длинные ключи и подходящие генераторы. Безопасность шифра Диффи-Хеллмана основана на сложности решения проблемы дискретного логарифма (ее считают равноценной по сложности задаче факторизации больших чисел). Объявлено, что алгоритм Диффи-Хеллмана запатентован в США, однако патент заканчивается 29 апреля 1997 года. Также ходят упорные слухи, что патент на самом деле недействителен (существует свидетельство, что алгоритм был опубликован за год до того, как был выдан патент).

Алгоритм Диффи-Хеллмана чувствителен к выбору надежного простого числа и генератора. Один из возможных выборов пары простое число/генератор предложен в спецификациях системы Фотурис (Photuris). Размер экспоненты секретного числа также важен для надежности алгоритма. Совет здесь может быть таким: надо выбирать экспоненту длиной по крайней мере в два раза больше, чем используемый ключ сессии.

Имеется также новый метод атаки - атака с использованием таймера с помощью которой можно вскрыть многие реализации шифра Диффи-Хеллмана.

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

  • DSS (Digital Signature Standard). Метод, используемый только для генерации подписи. Используется правительством США. Детали его реализации пока не опубликованы, но многие уже нашли в нем потенциальные проблемы (например, утечка скрытых в подписи данных; если же вам посчастливится подписать пару разных сообщений с использованием одного и того же случайного числа, это равносильно открытию секретного ключа). Этот алгоритм недавно запатентован американским правительством, и имеется на него еще один патент, который может быть лицензирован в США и Европе за начальный взнос в 25 000 американских долларов плюс отчисления владельцу патента.

Нет никаких причин использовать DSS для чего бы то ни было (с одним потенциальным исключением - контрактная работа с американским правительством) поскольку более сильные методы доступны бесплатно.

  • Криптосистема с открытым ключом ^ ElGamal. Основана на проблеме дискретного алгоритма.

  • LUC - это система с открытым ключом. Вместо возведения в степень система использует функции Люка (Lucas). Изобретатель системы Питер Смит с тех пор реализовал четыре других алгоритма с использованием функций Люка: LUCDIF - метод обмена ключами наподобие Диффи-Хеллмана; LUCELG PK - эквивалент системы шифрования с открытым ключом El Gamal; LUCELG DS - эквивалент системы цифровых подписей El Gamal; и LUCDSA - эквивалент DSS. Компания LUC Encryption Technology Ltd (LUCENT) получила патенты на криптографическое использование функций Люка в США и Новой Зеландии.
^

Алгоритмы с симметричным ключом (симметричные шифры)


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

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

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

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

  • Blowfish - это алгоритм, разработанный Брюсом Шнейером. Он представляет собой блочный шифр с размером блока в 64 бита и переменной длиной ключа (до 448 бит). Он получил широкое распространение в ряде приложений. Неизвестны успешные атаки на него. (Замечание: Некоторые реализации алгоритма blowfish содержат серьезную ошибку.)

Blowfish используется в популярных программах, включая Nautilus and PGPfone.

  • IDEA (International Data Encryption Algorithm) разработан в ETH, Цюрих, Швейцария. Использует 128-битный ключ и считается очень надежным. В настоящее время этот алгоритм является одним из лучших из известных алгоритмов. Он довольно новый, но уже работает несколько лет и ни одной успешной атаки на него пока не опубликовано, несмотря на то что неоднократно предпринимались попытки его анализа.

IDEA запатентован в США и большинстве европейских стран. Владельцем патента является Ascom-Tech. Использование шифра IDEA в некоммерческих целях бесплатно. Для получения коммерческой лицензии необходимо связаться с idea@ascom.ch.

  • RC4 является шифром, разработанным компанией RSA Data Security, Inc. Он был коммерческой тайной до тех пор пока кто-то не опубликовал в Usenet News исходные тексты алгоритма, который был объявлен эквивалентом RC4. Имеется весьма надежное свидетельство того, что опубликованный алгоритм действительно эквивалентен RC4. Алгоритм очень быстр. Степень его безопасности неизвестна, но вскрытие представляется делом нетривиальным. Благодаря его скорости, он может быть использован в некоторых приложениях. Кроме того, алгоритм работает с ключами произвольной длины. По своей сути RC4 представляет собой генератор псевдослучайных чисел, при этом выходные данные генератора используются для операции xor над потоком данных. Поэтому, чрезвычайно важно, чтобы один и тот же ключ RC4 не использовался для шифровки двух различных сообщений.

Американское правительство обычно разрешает к экспорту шифры RC4 с 40-битными ключами. Такие короткие ключи могут быть легко взломаны правительствами, преступниками и даже дилетантами.

Интересно, что экспортный вариант SSL (Secure Socket Layer корпорации Netscape), где используется шифр RC4-40, был недавно вскрыт по крайней мере двумя независимыми группами. Процесс вскрытия занял порядка восьми дней; в большинстве крупных университетов (или компаний) такой объем вычислительных мощностей доступен любому студенту старших курсов по специальности computer science.

  • SAFER - это алгоритм, разработанный J. L. Massey (одним из авторов IDEA). Как заявляется, алгоритм способен производить надежную шифровку даже на 8-битных процессорах (при эффективной программной реализации). Имеется два варианта. Один - для работы с 64-битными ключами, и другой - для 128-битных ключей.

  • ^ Шифры, основанные на хэш-функциях. Любую криптографически надежную хэш-функцию можно превратить в шифр (см. ниже). Имеется несколько способов; общая идея заключается в том, что хэш-функция используется в качестве генератора случайных чисел, и ее значение используется для осуществления xor-операции с шифруемыми данными. Когда все байты хэш-значения использованы, новое хэш-значение генерируется с помощью некоей модификации ключа (или того, что использовалось для получения хэш-значения) и применения хэш-функции. Используемое на входе хэш-функции значение может содержать ключ, предыдущее хэш-значение, порядковый номер, предыдущий блок текста и др.

Примером шифра, основанного на хэш-функции, является MDC/SHA.

  • Enigma - это шифр, который использовали немцы во Вторую Мировую Войну. Его тривиально можно вскрыть с помощью современного компьютера. Этот шифр используется в программе UNIX crypt(1), которой, следовательно, не следует пользоваться.

  • Vigenere является исторически важным способом шифровки. Он упоминается во многих учебниках. Его легко вскрыть. Необходимое программное обеспечение свободно доступно.

  • Некоторые другие классические шифры описаны в http://rschp2.anu.edu.au:8080/cipher.html. Такие шифры не следует использовать, поскольку они не являются надежными.
^

Методы блочной шифровки


Многие распространенные шифры (например IDEA, DES, BLOWFISH) являются блочными шифрами. Это означает, что они берут блоки данных фиксированного размера (обычно 64 бита), и преобразуют их в другой 64-битный блок с помощью функции, задаваемой ключом. Шифр обычно задает однозначное соответствие между исходным 64-битным числом и результирующим 64-битным числом.

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

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

  • Метод CFB: Блок шифрованного текста получается так: шифруется предыдущий шифрованный блок, результат затем используется для осуществления операции xor над нашим блоком текста.

  • Метод CBC: Сначала делают операцию xor предыдущего шифрованного блока с нашим блоком текста; получившийся результат зашифровывается.

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

Криптографические хэш-функции


  • MD5 (Message Digest Algorithm 5) представляет собой надежный алгоритм хэширования, разработанный компанией RSA Data Security, Inc. Он может использоваться для хэширования строки байт произвольной длины в 128-битное значение. MD5 широко используется и считается достаточно надежным.

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

  • MD2, MD4: Эти алгоритмы являются более ранними версиями алгоритма хэширования от RSA Data Security. Известно, что они имеют слабые стороны и их не рекомендуется использовать. Исходный текст MD2 включен по крайней мере в SSLeay и RSAREF.

  • SHA (Secure Hash Algorithm) (также известен как SHS, Secure Hash Standard): хэширующий криптографический алгоритм, опубликованный американским правительством. Он выдает 160-битное хэш-значение по строке произвольной длины. Многие считают его очень хорошим. Он является довольно новым алгоритмом.

  • Tiger представляет собой новый хэширующий алгоритм, разработанный Anderson and Biham.

  • Наиболее свежий алгоритм хэширования - это RIPEMD-160, который создан на смену MD4 и MD5. Он производит дайджест длиной в 20 байт, и, как объявлено, работает со скоростью в 40 Mb/s на 90 MHz Pentium. Его разработчики поместили его в public domain.
^

Генераторы случайных чисел


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

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




Добавить документ в свой блог или на сайт

Похожие:

Основные алгоритмы шифрования iconПрограмма здесь >>>> система шифрования и встраивания информации...
Программа gost exe для шифрования информации, согласно алгоритму шифрования гост 28147-89

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

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

Основные алгоритмы шифрования iconОбзор шифрования rar/Winrar
Архиватор rar/Winrar версии Х использовал собственный, но достаточно стойкий алгоритм шифрования. По крайней мере, не были известны...

Основные алгоритмы шифрования iconПдс-алгоритмы и труднорешаемые задачи комбинаторной оптимизации
В главах 1–3 приведены эффективные пдс-алгоритмы решения трех задач календарного планирования

Основные алгоритмы шифрования iconКриворожская общеобразовательная школа І-ІІІ степени №90 квн урок- игра
«Алгоритмы», проверить навыки работы с прикладными программами PowerPoint, Excel, Word. Выяснить, где ученики встречаются с алгоритмами...

Основные алгоритмы шифрования icon«Практикум по программированию»
Цель: изучить способы описания алгоритмов; научится записывать словесные алгоритмы и алгоритмы в виде блок-схем; научится создавать...

Основные алгоритмы шифрования iconЗадача “Количество треугольников”
В данном выпуске мы рассмотрим три таких темы: динамическое программирование, алгоритмы на графах и вычислительную геометрию. Задачи...

Основные алгоритмы шифрования iconДомашнее задание 6 Лабораторная работа Рекурсия и ее применение....
Лабораторная работа Простейшие алгоритмы сортировок (сортировка методом пузырька, вставки, выборки) 5

Основные алгоритмы шифрования icon1, Д. В. Ландэ 2 1 Институт проблем регистрации информации нан украины
Обоснована фрактальная природа информационных потоков, описаны основные алгоритмы, применяемые в процессе исследований, а также приведены...

Вы можете разместить ссылку на наш сайт:
Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
uchebilka.ru
Главная страница


<