Алгоритмы криптографической защиты информации

 

Оглавление


Введение

. Информационная безопасность и модели защиты информации

.1 Категории информационной безопасности

.2 Абстрактные модели защиты информации

.3 Обзор наиболее распространенных методов "взлома"

. Криптографические методы защиты информации

.1 Классификация криптоалгоритмов

.2 Симметричные криптоалгоритмы

.3 Блочный шифр DES

.4 Разработка программы для алгоритма DES

. Криптосистема

.1 Функции криптосистем

.2 Алгоритмы создания цепочек

.3 Обзор методик рандомизации сообщений

.4 Общие сведения об асимметричных криптоалгоритмах

.5 Алгоритм RSA

Заключение

Список использованной литературы

Приложение


Введение


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

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

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

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

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

·Раскрытие коммерческой информации может привести к серьезным прямым убыткам на рынке;

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

·Фирмы-конкуренты могут воспользоваться кражей информации, если та осталась незамеченной, для того чтобы полностью разорить фирму, навязывая ей фиктивные либо заведомо убыточные сделки;

·Подмена информации как на этапе передачи, так и на этапе хранения в фирме может привести к огромным убыткам;

·Многократные успешные атаки на фирму, предоставляющую какой-либо вид информационных услуг, снижают доверие к фирме у клиентов, что сказывается на объеме доходов;

·Естественно, компьютерные атаки могут принести и огромный моральный ущерб.

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

Желательно, чтобы методы шифрования обладали минимум двумя свойствами:

законный получатель сможет выполнить обратное преобразование и расшифровать сообщение;

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

Цель данной работы: исследование методов и алгоритмов криптографической защиты информации.

Для достижения данной цели в работе рассмотрены:

1.основы криптографии, в которую включены классификация криптографии, основные задачи криптографии и др. вопросы;

2.основные понятия криптографии (конфиденциальность, целостность, аутентификация, цифровая подпись);

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


1. Информационная безопасность и модели защиты информации


1.1 Категории информационной безопасности


Информация с точки зрения информационной безопасности обладает следующими категориями:

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

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

аутентичность - гарантия того, что источником информации является именно то лицо, которое заявлено как ее автор; нарушение этой категории также называется фальсификацией, но уже автора сообщения

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

В отношении информационных систем применяются иные категории:

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

точность - гарантия точного и полного выполнения всех команд

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

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

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

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


1.2 Абстрактные модели защиты информации


Одной из первых моделей была опубликованная в 1977 модель Биба (Biba). Согласно ей все субъекты и объекты предварительно разделяются по нескольким уровням доступа, а затем на их взаимодействия накладываются следующие ограничения: 1) субъект не может вызывать на исполнение субъекты с более низким уровнем доступа; 2) субъект не может модифицировать объекты с более высоким уровнем доступа. Как видим, эта модель очень напоминает ограничения, введенные в защищенном режиме микропроцессоров Intel 80386+ относительно уровней привилегий.

Модель Гогена-Мезигера (Goguen-Meseguer), представленная ими в 1982 году, основана на теории автоматов. Согласно ей система может при каждом действии переходить из одного разрешенного состояния только в несколько других. Субъекты и объекты в данной модели защиты разбиваются на группы - домены, и переход системы из одного состояния в другое выполняется только в соответствии с так называемой таблицей разрешений, в которой указано какие операции может выполнять субъект, скажем, из домена C над объектом из домена D. В данной модели при переходе системы из одного разрешенного состояния в другое используются транзакции, что обеспечивает общую целостность системы.

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

Важную роль в теории защиты информации играет модель защиты Кларка-Вильсона (Clark-Wilson), опубликованная в 1987 году и модифицированная в 1989. Основана данная модель на повсеместном использовании транзакций и тщательном оформлении прав доступа субъектов к объектам. Но в данной модели впервые исследована защищенность третьей стороны в данной проблеме - стороны, поддерживающей всю систему безопасности. Эту роль в информационных системах обычно играет программа-супервизор. Кроме того, в модели Кларка-Вильсона транзакции впервые были построены по методу верификации, то есть идентификация субъекта производилась не только перед выполнением команды от него, но и повторно после выполнения. Это позволило снять проблему подмены автора в момент между его идентификацией и собственно командой. Модель Кларка-Вильсона считается одной из самых совершенных в отношении поддержания целостности информационных систем.


1.3 Обзор наиболее распространенных методов "взлома"


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

Терминалы защищенной информационной системы

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

Получение пароля на основе ошибок администратора и пользователей

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

Социальная психология и иные способы получения ключа

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

Терминалы защищенной информационной системы

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

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

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

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

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

;При использовании удаленных терминалов необходимо соблюдать следующие правила:

Любой удаленный терминал должен запрашивать имя регистрации и пароль. Того, что якобы никто не знает шестизначного номера вашего служебного модема, отнюдь не достаточно для конфиденциальности вашей системы. Все дело в том, что при наличии программного обеспечения, которое не составит труда найти в сети Интернет, и тонового набора для одного звонка достаточно 4 секунд. Это означает, что за 1 минуту можно перебрать около 15 номеров телефонной станции с тем, чтобы узнать существует ли на этом телефонном номере модем. За час таким образом можно перебрать 1000 номеров, а за рабочий день с повтором в ночное время (это стандартная методика) - всю АТС (10.000 номеров).

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

По возможности рекомендуется использовать схему возвратного звонка от модема, поскольку она гарантирует с уровнем надежности АТС то, что удаленный клиент получил доступ с определенного телефонного номера.

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

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

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

Получение пароля на основе ошибок администратора и пользователей

Перебор паролей по словарю являлся некоторое время одной из самых распространенных техник подбора паролей. В настоящее время, как хоть самый малый результат пропаганды информационной безопасности, он стал сдавать свои позиции. Хотя развитие быстродействия вычислительной техники и все более сложные алгоритмы составления слов-паролей не дают "погибнуть" этому методу. Технология перебора паролей родилась в то время, когда самым сложным паролем было скажем слово "brilliant", а в русифицированных ЭВМ оно же, но для "хитрости" набранное в латинском режиме, но глядя на русские буквы (эта тактика к сожалению до сих пор чрезвычайно распространена, хотя и увеличивает информационную насыщенность пароля всего на 1 бит). В то время простенькая программа со словарем в 5000 существительных давала положительный результат в 60% случаев[4]. Огромное число инцидентов со взломами систем заставило пользователей добавлять к словам 1-2 цифры с конца, записывать первую и/или последнюю букву в верхнем регистре, но это увеличило время на перебор вариантов с учетом роста быстродействия ЭВМ всего в несколько раз.

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

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

·Вход всех пользователей в систему должен подтверждаться вводом уникального для клиента пароля.

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

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

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

Если в системе предусмотрена возможность блокирования клиента либо всей системы после определенного количества неудачных попыток входа, этой возможностью необходимо воспользоваться. Если же Вы являетесь разработчиком системы безопасности, данную возможность несомненно необходимо предусмотреть, так как она является основным барьером к подбору паролей полным перебором. Разумно блокировать клиента после 3-ей подряд неправильной попытки набора пароля, и, соответственно, блокировать систему после K=max( int(N*0.1*3)+1 , 3 ) неудачных попыток входа за некоторый период (час, смену, сутки). В данной формуле N - среднее количество подключающихся за этот период к системе клиентов, 0.1 - 10%-ный предел "забывчивости пароля", 3 - те же самые три попытки на вспоминание пароля. Естественно, информация о блокировании клиента или системы должна автоматически поступать на пульт контроля за системой. В момент отправки пакета подтверждения или отвержения пароля в системе должна быть установлена разумная задержка (2-5 секунд). Это не позволит злоумышленнику, попав на линию с хорошей связью до объекта атаки перебирать по сотне тысяч паролей за секунду.

Все действительные в системе пароли желательно проверять современными программами подбора паролей, либо оценивать лично администратору системы[14,25].

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

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

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

Получение пароля на основе ошибок в реализации

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

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

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

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

Работа программы-перехватчика паролей (так называемого "троянского коня") на рабочей станции незаметна.

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

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

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

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

Следующий метод получения паролей относится только к сетевому программному обеспечению. Проблема заключается в том, что во многих программах не учитывается возможность перехвата любой информации, идущей по сети - так называемого сетевого трафика. Первоначально, с внедрением локальных компьютерных сетей так оно и было. Сеть располагалась в пределах 2-3 кабинетов, либо здания с ограниченным физическим доступом к кабелям. Однако, стремительное развитие глобальных сетей затребовало на общий рынок те же версии программного обеспечения без какого-либо промедления для усиления безопасности. Теперь мы пожинаем плоды этой тенденции. Более половины протоколов сети Интернет передают пароли в нешифрованном виде - открытым текстом. К ним относятся протоколы передачи электронной почты SMTP и POP3, протокол передачи файлов FTP, одна из схем авторизации на WWW-серверах.

Современное аппаратное и программное обеспечение позволяет получать всю информацию, проходящую по сегменту сети, к которому подключен конкретный компьютер, и анализировать ее в реальном масштабе времени. Возможны несколько вариантов прослушивания трафика: 1) это может сделать служащий компании со своего рабочего компьютера, 2) злоумышленник, подключившийся к сегменту с помощью портативной ЭВМ или более мобильного устройства. Наконец, трафик, идущий от Вас к Вашему партнеру или в другой офис по сети Интернет, технически может прослушиваться со стороны Вашего непосредственного провайдера, со стороны любой организации, предоставляющей транспортные услуги для сети Интернет (переписка внутри страны в среднем идет через 3-4 компании, за пределы страны - через 5-8). Кроме того, если в должной мере будет реализовываться план СОРМ (система оперативно-розыскных мероприятий в компьютерных сетях), то возможно прослушивание и со стороны силовых ведомств страны.

Для комплексной защиты от подобной возможности кражи паролей необходимо выполнять следующие меры:

·Физический доступ к сетевым кабелям должен соответствовать уровню доступа к информации.

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

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

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


2. Криптографические методы защиты информации


2.1 Классификация криптоалгоритмов


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

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

Основной схемой классификации всех криптоалгоритмов является следующая:

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

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

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

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

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

В зависимости от характера воздействий, производимых над данными, алгоритмы подразделяются на:

§Перестановочные.

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

§Подстановочные.

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

В зависимости от размера блока информации криптоалгоритмы делятся на:

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

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

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

Единицей кодирования является блок из нескольких байтов (в настоящее время 4-32). Результат кодирования зависит от всех исходных байтов этого блока. Схема применяется при пакетной передаче информации и кодировании файлов[8,27].


2.2 Симметричные криптоалгоритмы


2.2.1 Скремблеры

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

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

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

Генерация кодирующей последовательности бит производится циклически из небольшого начального объема информации - ключа по следующему алгоритму. Из текущего набора бит выбираются значения определенных разрядов и складываются по XOR между собой. Все разряды сдвигаются на 1 бит, а только что полученное значение ("0" или "1") помещается в освободившийся самый младший разряд. Значение, находившееся в самом старшем разряде до сдвига, добавляется в кодирующую последовательность, становясь очередным ее битом.


Рис.2.1.схема скремблирования


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

Рассмотрим пример кодирования информационной последовательности 0101112 скремблером 1012 с начальным ключом 1102.

скремблер код.бит инф.бит рез-т


1 1 0 _

\ \ \_

1 1 _ \_

\ \ \_ 0 XOR 0 = 0

1 1 _ \_

\ \ \_ 1 XOR 1 = 0

0 1 \_

\ \ 1 XOR 0 = 1

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

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

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

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

Возможны различные типы графов состояния скремблера. На рисунке 2.2. приведены примерные варианты для 3-разрядного скремблера. В случае "А" кроме всегда присутствующего цикла "000">>"000" мы видим еще два цикла - с 3-мя состояниями и 4-мя. В случае "Б" мы видим цепочку, которая сходится к циклу из 3-х состояний и уже никогда оттуда не выходит. И наконец, в случае "В" все возможные состояния кроме нулевого, объединены в один замкнутый цикл. Очевидно, что именно в этом случае, когда все 2N-1 состояний системы образуют цикл, период повторения выходных комбинаций максимален, а корреляция между длиной цикла и начальным состоянием скремблера (ключом), которая привела бы к появлению более слабых ключей, отсутствует.

Например, в 8-битном скремблере, при охвате 0-го, 1-го, 6-го и 7-го разрядов действительно за время генерации 255 бит последовательно проходят все числа от 1 до 255, не повторяясь ни разу.

Схемы с выбранными по данному закону обратными связями называются генераторами последовательностей наибольшей длины (ПНД), и именно они используются в скремблирующей аппаратуре. Из множества генераторов ПНД заданной разрядности во времена, когда они реализовывались на электрической или минимальной электронной базе выбирались те, у которых число разрядов, участвующих в создании очередного бита, было минимальным. Обычно генератора ПНД удавалось достичь за 3 или 4 связи. Сама же разрядность скремблеров превышала 30 бит, что давало возможность передавать до 240 бит = 100 Мбайт информации без опасения начала повторения кодирующей последовательности.


Рис.2.2. Графы состояния скремблера 3 разряда


ПНД неразрывно связаны с математической теорией неприводимых полиномов. Оказывается, достаточно чтобы полином степени N не был представим по модулю 2 в виде произведения никаких других полиномов, для того, чтобы скремблер, построенный на его основе, создавал ПНД. Например, единственным неприводимым полиномом степени 3 является x3+x+1, в двоичном виде он записывается как 10112 (единицы соответствуют присутствующим разрядам). Скремблеры на основе неприводимых полиномов образуются отбрасыванием самого старшего разряда (он всегда присутствует, а следовательно, несет информацию только о степени полинома), так на основе указанного полинома, мы можем создать скремблер 0112 с периодом зацикливания 7(=23-1). Естественно, что на практике применяются полиномы значительно более высоких порядков. А таблицы неприводимых полиномов любых порядков можно всегда найти в специализированных математических справочниках.

Существенным недостатком скремблирующих алгоритмов является их нестойкость к фальсификации[20,30].

Пример Криптоалгоритма на Паскале приведен в приложений 1. Схему криптоалгоритма смотрите в приложений 2.


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

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

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

Блочный алгоритм TEA приведен как пример одного из самых простых в реализации стойких криптоалгоритмов.

В 1998 году был объявлен открытый конкурс на криптостандарт США на несколько первых десятилетий XXI века. Победителем конкурса был признан бельгийский блочный шифр Rijndael. Он претендует на стандарт де-факто блочного шифрования во всем мире.

Характерной особенностью блочных криптоалгоритмов является тот факт, что в ходе своей работы они производят преобразование блока входной информации фиксированной длины и получают результирующий блок того же объема, но недоступный для прочтения сторонним лицам, не владеющим ключом. Таким образом, схему работы блочного шифра можно описать функциями Z=EnCrypt(X,Key) и X=DeCrypt(Z,Key)

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

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

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

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

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

Таким образом, на функцию стойкого блочного шифра Z=EnCrypt(X,Key) накладываются следующие условия:

üФункция EnCrypt должна быть обратимой.

üНе должно существовать иных методов прочтения сообщения X по известному блоку Z, кроме как полным перебором ключей Key.

üНе должно существовать иных методов определения каким ключом Key было произведено преобразование известного сообщения X в сообщение Z, кроме как полным перебором ключей.

Все действия, производимые над данными блочным криптоалгоритмом, основаны на том факте, что преобразуемый блок может быть представлен в виде целого неотрицательного числа из диапазона, соответствующего его разрядности. Так, например, 32-битный блок данных можно интерпретировать как число из диапазона 0..4'294'967'295. Кроме того, блок, разрядность которого обычно является "степенью двойки", можно трактовать как несколько независимых неотрицательных чисел из меньшего диапазона (рассмотренный выше 32-битный блок можно также представить в виде 2 независимых чисел из диапазона 0..65535 или в виде 4 независимых чисел из диапазона 0..255).

Над этими числами блочным криптоалгоритмом и производятся по определенной схеме следующие действия (см. таблицу 2.1. слева даны условные обозначения этих операций на графических схемах алгоритмов) :


Биективные математические функцииСложениеX'=X+VИсключающее ИЛИX'=X XOR V Умножение по модулю 2N+1X'=(X*V) mod (2N+1)Умножение по модулю 2NX'=(X*V) mod (2N)Битовые сдвигиАрифметический сдвиг влевоX'=X SHL VАрифметический сдвиг вправоX'=X SHR VЦиклический сдвиг влевоX'=X ROL VЦиклический сдвиг вправоX'=X ROR VТабличные подстановкиS-box (англ. substitute)X'=Table[X,V]Таблица 2.1. Схема блочного криптоалгоритма


В качестве параметра V для любого из этих преобразований может использоваться:

·фиксированное число (например, X'=X+125);

·число, получаемое из ключа (например, X'=X+F(Key));

·число, получаемое из независимой части блока (например, X2'=X2+F(X1)) .

Последний вариант используется в схеме, названной по имени ее создателя сетью Фейштеля (нем. Feistel).

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

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

Поскольку операция зашифровки или расшифровки отдельного блока в процессе кодирования пакета информации выполняется многократно (иногда до сотен тысяч раз), а значение ключа и, следовательно, функций Vi(Key) остается неизменным, то иногда становится целесообразно заранее однократно вычислить данные значения и хранить их в оперативной памяти совместно с ключом. Поскольку эти значения зависят только от ключа, то они в криптографии называются материалом ключа. Необходимо отметить, что данная операция никак не изменяет ни длину ключа, ни криптостойкость алгоритма в целом. Здесь происходит лишь оптимизация скорости вычислений путем кеширования (англ. caching) промежуточных результатов. Описанные действия встречаются практически во многих блочных криптоалгоритмах и носят название расширение ключа (англ. key scheduling)[]7,33].

Сеть Фейштеля

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

Независимые потоки информации, порожденные из исходного блока, называются ветвями сети. В классической схеме их две. Величины Vi именуются параметрами сети, обычно это функции от материала ключа. Функция F называется образующей. Действие, состоящее из однократного вычисления образующей функции и последующего наложения ее результата на другую ветвь с обменом их местами, называется циклом или раундом (англ. round) сети Фейштеля. Оптимальное число раундов K - от 8 до 32. Важно то, что увеличение количества раундов значительно увеличивает криптоскойстость любого блочного шифра к криптоанализу. Возможно, эта особенность и повлияла на столь активное распространение сети Фейштеля - ведь при обнаружении, скажем, какого-либо слабого места в алгоритме, почти всегда достаточно увеличить количество раундов на 4-8, не переписывая сам алгоритм. Часто количество раундов не фиксируется разработчиками алгоритма, а лишь указываются разумные пределы (обязательно нижний, и не всегда - верхний) этого параметра.

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


Рис.2.3. Сеть Фейштеля


Более того, как нетрудно заметить, сеть Фейштеля симметрична. Использование операции XOR, обратимой своим же повтором, и инверсия последнего обмена ветвей делают возможным раскодирование блока той же сетью Фейштеля, но с инверсным порядком параметров Vi. Заметим, что для обратимости сети Фейштеля не имеет значение является ли число раундов четным или нечетным числом. В большинстве реализаций схемы, в которых оба вышеперечисленные


Рисунок 2.4. Модификация сети Фейштеля.


условия (операция XOR и уничтожение последнего обмена) сохранены, прямое и обратное преобразования производятся одной и той же процедурой, которой в качестве параметра передается вектор величин Vi либо в исходном, либо в инверсном порядке.

С незначительными доработками сеть Фейштеля можно сделать и абсолютно симметричной, то есть выполняющей функции шифрования и дешифрования одним и тем же набором операций. Математическим языком это записывается как "Функция EnCrypt тождественно равна функции DeCrypt". Если мы рассмотрим граф состояний криптоалгоритма, на котором точками отмечены блоки входной и выходной информации, то при каком-то фиксированном ключе для классической сети Фейштеля мы будем иметь картину, изображенную на рис.2.4а, а во втором случае каждая пара точек получит уникальную связь, как изображено на рис. 2.4б. Модификация сети Фейштеля, обладающая подобными свойствами приведена на рисунке 2.4. Как видим, основная ее хитрость в повторном использовании данных ключа в обратном порядке во второй половине цикла. Необходимо заметить, однако, что именно из-за этой недостаточно исследованной специфики такой схемы (то есть потенциальной возможности ослабления зашифрованного текста обратными преобразованиями) ее используют в криптоалгоритмах с большой осторожностью.

Модификацию сети Фейштеля для большего числа ветвей применяют гораздо чаще. Это в первую очередь связано с тем, что при больших размерах кодируемых блоков (128 и более бит) становится неудобно работать с математическими функциями по модулю 64 и выше. Как известно, основные единицы информации обрабатываемые процессорами на сегодняшний день - это байт и двойное машинное слово 32 бита. Поэтому все чаще и чаще в блочных криптоалгоритмах встречается сеть Фейштеля с 4-мя ветвями. Самый простой принцип ее модификации изображен на рисунке 2.5а. Для более быстрого перемешивания информации между ветвями (а это основная проблема сети Фейштеля с большим количеством ветвей) применяются две модифицированные схемы, называемые "type-2" и "type-3". Они изображены на рисунках 2.5б и 2.5в.


Рис.2.5. модифицированные схемы, называемые "type-2" и "type-3


Сеть Фейштеля надежно зарекомендовала себя как криптостойкая схема произведения преобразований, и ее можно найти практически в любом современном блочном шифре. Незначительные модификации касаются обычно дополнительных начальных и оконечных преобразований (англоязычный термин - whitening) над шифруемым блоком. Подобные преобразования, выполняемые обычно также либо "исключающим ИЛИ" или сложением имеют целью повысить начальную рандомизацию входного текста. Таким образом, криптостойкость блочного шифра, использующего сеть Фейштеля, определяется на 95% функцией F и правилом вычисления Vi из ключа. Эти функции и являются объектом все новых и новых исследований специалистов в области криптографии.

Блочный шифр TEA

Рассмотрим один из самых простых в реализации, но признанно стойких криптоалгоритмов - TEA (Tiny Encryption Algorithm).

Параметры алгоритма :

Размер блока - 64 бита.

Длина ключа - 128 бит.

В алгоритме использована сеть Фейштеля с двумя ветвями в 32 бита каждая. Образующая функция F обратима.

Сеть Фейштеля несимметрична из-за использования в качестве операции наложения не исключающего "ИЛИ", а арифметического сложения.

Отличительной чертой криптоалгоритма TEA является его размер. Простота операций, отсутствие табличных подстановок и оптимизация под 32-разрядную архитектуру процессоров позволяет реализовать его на языке ASSEMBLER в предельно малом объеме кода. Недостатком алгоритма является некоторая медлительность, вызванная необходимостью повторять цикл Фейштеля 32 раза (это необходимо для тщательного "перемешивания данных" из-за отсутствия табличных подстановок).-RC6 : cтандарт блочных шифров США c 2000 года

Алгоритм является продолжением криптоалгоритма RC5, разработанного Рональдом Ривестом (англ. Ron Rivest) - очень известной личностью в мире криптографии. RC5 был незначительно изменен для того, чтобы соответствовать требованиям AES по длине ключа и размеру блока. При этом алгоритм стал еще быстрее, а его ядро, унаследованное от RC5.

Преобразование T(x) очень просто : T(X)=(X*(X+1)) mod 2N. Оно используется в качестве нелинейного преобразования с хорошими показателями перемешивания битового значения входной величины.

Шифр Rijndael

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

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

Алгоритм состоит из некоторого количества раундов (от 10 до 14 - это зависит от размера блока и длины ключа), в которых последовательно выполняются следующие операции:- табличная подстановка 8х8 бит (рис.2.6),


Рис.2.6. ByteSub


ShiftRow - сдвиг строк в двумерном массиве на различные смещения (рис.2),


Рис.2.7. ShiftRow


MixColumn - математическое преобразование, перемешивающее данные внутри столбца (рис.7),


Рис.2.8. MixColumn


AddRoundKey - добавление материала ключа операцией XOR (рис.8).


Рис.2.9. AddRoundKey


В последнем раунде операция перемешивания столбцов отсутствует, что делает всю последовательность операций симметричной.


2.3 Блочный шифр DES


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

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

На простейшем уровне алгоритм не представляет ничего большего, чем комбинация двух основных методов шифрования: смещения и диффузии. Фундаментальным строительным блоком DES является применение к тексту единичной комбинации этих методов(подстановка, а за ней перестановка), зависящей от ключа. Такой блок называется этапом. DES состоит из 16 этапов, одинаковая комбинация методов применяется к открытому тексту 16 раз. Процесс шифрования данных поясняется рисунком 1. Сначала 64 бита входной последовательности перестанавливаются в соответствии с таблицей 1. Таким образом, бит 58 входной последовательности становится битом 1, бит 50 - 2 и т.д.


Таблица 1. "Начальная перестановка"

58504234261810260524436282012462544638302214664564840322416857494133251791595143352719113615345372921135635547393123157

Полученная последовательность бит разделяется на две последовательности: L(0) (биты 58, 50, 42, ..., 8) и R(0) (биты 57, 49, 41, ..., 7), каждая из которых содержит 32 бита. Затем выполняется итеративный процесс шифрования, который описывается следующими формулами:


L(i)=R(i-1), i=1,2,...,16.

R(i)=L(i-1) + F(R(i-1),K(i)), i=1,2,...,16.


Функция F называется функцией шифрования. Ее аргументами являются последовательность R, полученная на предыдущем шаге, и 48-битовый ключ K(i), который является результатом функции преобразования 64-битового ключа шифра. Подробно функция шифрования и алгоритм получения ключей K(i) описаны ниже.

На последнем шаге итерации будут получены последовательности L(16) и R(16), которые конкатенируются в 64-х битовую последовательность R(16)L(16). Видно, что в полученной последовательности 64 бита, перестанавливаются в соответствии с таблицей 2. Как легко видеть данная перестановка является обратной по отношению к начальной (см. таблицу 1).

Таблица 2. "Конечная перестановка"

40848165624643239747155523633138646145422623037545135321612936444125220602835343115119592734242105018582633141949175725

Полученная последовательность из 64 бит и будет являться зашифрованной последовательностью.


Рисунок 2.10


Процесс расшифрования данных является инверсным по отношению к процессу шифрования. Все действия должны быть выполнены в обратном порядке. Это означает, что расшифровываемые данные сначала переставляются в соответствии с таблицей 1, а затем над последовательностью бит R(16)L(16) выполняется те же действия, что и в процессе зашифрования, но в обратном порядке. Итеративный процесс расшифрования описан следующими формулами:


R(i-1)=L(i), i =16, 15, ..., 1

L(i-1)=R(i)+F(L(i),K(i)), i=16, 15, ..., 1.


На последнем шаге итерации будут получены последовательности L(0) и R(0), которые конкатенируются в 64 битовую последовательность L(0)R(0). В полученной последовательности 64 бита перестанавливаются в соответствии с таблицей 2. Результат преобразования - исходная последовательность бит (расшифрованное 64-битовое значение).

Функция шифрования

Функция шифрования F(R,K) схематически показана на рисунке 2. Для вычисления значения функции F используется функция E (расширение 32 бит до 48), функции S(1), S(2),...,S(8) преобразование 6-битового числа в 4-битовое) и функция P (перестановка бит в 32-битовой последовательности). Приведем определения этих функций. Аргументами функции шифрования являются R (32 бита) и K (48 бит). Результат функции E(R) есть 48-битовое число, которое складывается по модулю 2 с числом K. Таким образом, получается 48-битовая последовательность, которая рассматривается, как конкатенация 8 строк длиной по 6 бит (т.е. B(1)B(2)B(3)B(4)B(5)B(6)B(7)B(8)). Результат функции S(i)B(i) - 4 битовая последовательность, которую будем обозначать L(i). В результате конкатенации всех 8 полученных последовательностей L(i) имеем 32-битовую последовательность L=L(1)L(2)L(3)L(4)L(5)L(6)L(7)L(8). Наконец, для получения результат функции шифрования надо переставить биты последовательности L. Для этого применяется функция перестановки P(L).


Рисунок 2.11


Функция расширения Е, выполняющая расширение 32 бит до 48, определяется таблицей. В соответствии с этой таблицей первые три бита Е(R) - это биты 32,1 и 2, а последние - 31,32,1.

Функция расширения Е"(перестановка с расширением)


3212345456789891011121312131415161713171819202120212223242524252627282928293031321

Функция S(i), которая преобразует 6-битовые числа в 4-битовые. Эта операция расширяет правую половину данных, R(i) от 32 до 48 битов. Так как при этом не просто повторяются определённые биты, но и изменяется их порядок, эта операция называется перестановкой с расширением. У неё две задачи: привести размер правой половины в соответствии с ключом для операции XOR и получить более длинный результат, который можно будет сжать в ходе операции подстановки. Однако главный криптографический смысл совсем в другом. За счёт влияния одного бита на две подстановки быстрее возрастает зависимость битов результата от битов исходных данных. Это называется лавинным эффектом. DES спроектирован так, чтобы как можно быстрее добиться зависимости каждого бита шифротекста от каждого бита открытого текста и каждого бита ключа.

"Функции преобразования S(i)"

(1)

1441312151183106125907015741421311061211953841148136211151297310501512824917511314100613


S(2)

1518146113497213120510313471528141201106911501471110413158126932151381013154211671205149

S(3)

1009146315511312711428137093461028514121115113649815301112125101471101306987415143115212

S(4)

7131430691012851112415138115615034721211014910690121171315131452843150610113894511127214

S(5)

2124171011685315130149141121247131501510398642111101378159125630141181271142136150910453(6)

1211015926801334147511101542712956113140113891415528123704101131164321295151011141760813

S(7)

4112141508133129751061130117491101435122158614111312371410156805926111381410795015142312

S(8)

1328461511110931450127115138103741256110149271141912142061013153582114741081315129035611

К таблице 4 требуются дополнительные пояснения. Каждая из функций S(i)B(i) преобразовывает 6-битовый код в 4-битовый выход по следующему алгоритму:

-первый и последний биты входной последовательности B, определяют номер строки k.

-второй, третий, четвертый и пятый биты последовательности B задают номер колонки l

-результат преобразования выбирается из строки k и колонки l.

Предположим, что B=011011. Тогда S(1)(B)=0101. Действительно, k=1, l=13. В колонке 13 строки 1 задано значение 5, которое и является значением функции S(1)(011011).

Функция перестановки бит P(L), также используемая для определения функции шифрования, задается значениями, приведенными в таблице 5. В последовательности L 32 перестанавливается так, чтобы бит 16 стал первым битом, бит 7 - вторым и т.д.


"Функция перестановки P"

1672021291228171152326518311028241432273919133062211425

Чтобы завершить описание алгоритма шифрования данных, осталось привести алгоритм получение ключей K(i), i=1,2,...,16, размерностью в 48 бит. Ключи K(i) определяются по 64-битовому ключу шифра как это показано.

В начале над ключом шифра выполняется операция B, которая сводится к выбору определенных бит и их перестановке, как это показано выше. Причем, первые четыре строки определяют, как выбираются биты последовательности C(0) (первым битом C(0) будет бит 57 бит ключа шифра, затем бит 49 и т.д., а последними битами биты 44 и 36 ключа шифра), а следующие четыре строки - как выбираются биты последовательности D(0) (т.е. последовательность D(0) будем стоять из битов 63,55,...,12, 4 ключа шифра).


Рис.2.12

криптография аутентификация ключ шифрование

"Функция перестановки и выбора последовательности B"(ключа)

57494133251791585042342618102595143352719113605244366355473931231576254463830221466153453729211352820124

Как видно из таблицы, для генерации последовательностей C(0) и D(0) не используются биты 8,16,25,32,40,48,56 и 64 ключа шифра. Эти биты не влияют на шифрование и могут служить для других целей (например, для контроля по четности). Таким образом, в действительности ключ шифра является 56-битовым. После определения C(0) и D(0) рекурсивно определяются C(i) и D(i), i=1,2,...,16. Для этого применяются операции сдвига влево на один или два бита в зависимости от номера шага итерации, как это показано в таблицей 7. Операции сдвига выполняются для последовательностей C(i) и D(i) независимо. Например, последовательность C(3) получается, посредством сдвига влево на две позиции последовательности C(2), а последовательность D(3) - посредством сдвига влево на две позиции последовательности D(2). Следует иметь в виду, что выполняется циклический сдвиг влево. Например, единичный сдвиг влево последовательности C(i) приведет к тому, что первый бит C(i) станет последним и последовательность бит будет следующая: 2,3,..., 28,1.


"Функция сдвига Si"

Этап12345678910111213141516Число1122222212222221

Ключ K(i), определяемый на каждом шаге итерации, есть результат выбора определенных бит из 56-битовой последовательности C(i)D(i) и их перестановки. Другими словами, K(i) = K(C(i)D(i)), где функция K определяется данными, приведенными в таблице.

"Функция перестановки и выбора K"(перестановка со сжатием)

После сдвига выбирается 48 из 56. Так как при этом не только выбирается подмножество битов, но и изменяется их порядок, эта операция называется перестановка со сжатием. Её результатом является набор из 48 битов.


1417112415328156211023191242681672720132415231374755304051453348444939563453464250362932

Как следует из таблицы первый бит K(i) - это бит 14 последовательности C(i)D(i), второй - бит 17, последний - бит 32.


2.4 Разработка программы для алгоритма DES


Для разработки приложения "Шифратор" используется среда визуального программирования Delphi. Проект программы содержит два окна:

. Form1 - Главное окно программы.

. AboutBox - окно справки программы.

Для написания программы я использовал дополнительные компоненты "DynamicSkinForm", которые были разработаны для создания более красочных приложений.

Интерфейс программы состоит из одного, главного окна. В верхней части находится поле в которое необходимо ввести пароль. Пароль обязательно должен состоять из 8 символов (особенность алгоритма DES).

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


Рис.2.13 Главное окно программы.


Компонент Form1

Свойства:

Сaption - "Шифратор";

Border - bsSingle;

BiSystemMenu - false;

- компонент spSkinSpeedButton

Свойства: - Открыть;

События: открывает текстовый документ.

- компонент spSkinSpeedButton

Свойства:

Hint - Сохранить;

События: сохраняет результат в виде текстового файла.

- компонент spSkinSpeedButton

Свойства:

Hint - Очистить;

События: очищает текстовое поле.

- компонент spSkinSpeedButton

Свойства:

Hint - Подтвердить;

События: шифрует и дешифрует сообщение.

- компонент spSkinSpeedButton

Свойства:

Hint - О программе;

События: выводит сообщение о программе.

- spSkinComboBoxEx1

Font - Arial, 12, черный;

-10 - компонент spSkinShadowLabel1

Font - Arial, 12, черный;

- компонент spSkinMemo1

Font - Arial, 12, черный;

- компонент spSkinMemo2

Font - Arial, 12, черный;

- компонент spSkinMemo3

Font - Arial, 12, синий;

- компонент spSkinMemo4

Font - Arial, 12, синий;

15 - компонент spSkinSaveDialog1- Save file;

- компонент spSkinOpenPreviewDialog1- Open file;

- компонент spSkinEdit1- Arial, 12, черный;

- компонент spPNGImageList1- 32;

- компонент spSkinImagesMenu1- spSkinData1;- spCompressedStoredSkin1;

- компонент spSkinData1

- компонент spCompressedStoredSkin1- office2007_Remix.skn;

- компонент spPngImageList2- 64;

- компонент spPNGImageList3- 128;

- компонент spDynamicSkinForm1- spSkinData1;- spSkinHint1;

- компонент spSkinHint1- spSkinData1;


3. Криптосистема


Все исследования, которые проводились в предыдущей главе, касались только криптоалгоритмов, то есть методов преобразования небольшого блока данных (от 4 до 32 байт) в закодированный вид в зависимости от заданного двоичного ключа. Криптоалгоритмы несомненно являются "сердцем" криптографических систем, но их непосредственное применение без каких-либо модификаций для кодирования больших объемов данных на самом деле не очень приемлемо. Все недостатки непосредственного применения криптоалгоритмов устраняются в криптосистемах[24,25].


3.1 Функции криптосистем


Криптосистема работает по определенной методологии (процедуре). Она состоит из :

üодного или более алгоритмов шифрования (математических формул);

üключей, используемых этими алгоритмами шифрования;

üсистемы управления ключами;

üнезашифрованного текста;

üи зашифрованного текста (шифртекста).

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

·усиление защищенности данных,

·облегчение работы с криптоалгоритмом со стороны человека,

·обеспечение совместимости потока данных с другим программным обеспечением.

Конкретная программная реализация криптосистемы называется криптопакетом.


3.2 Алгоритмы создания цепочек


Первая задача при шифровании данных криптоалгоритмом - это данные с длиной, неравной длине 1 блока криптоалгоритма. Эта ситуация будет иметь место практически всегда. Для решения этих проблем и были введены в криптосистемы алгоритмы создания цепочек (англ. chaining modes). Самый простой метод - это метод ECB (Electronic Code Book). Шифруемый файл временно разделяется на блоки, равные блокам алгоритма, каждый из них шифруется независимо, а затем из зашифрованных пакетов данных компонуется в той же последовательности файл, который отныне надежно защищен криптоалгоритмом. Название алгоритм получил из-за того, что в силу своей простоты он широко применялся в простых портативных устройствах для шифрования - электронных шифрокнижках. Схема данного метода приведена на рис.3.1.


Рис.3.1. Схема электронных шифрокнижек


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

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

Все схемы создания цепочек основаны на идее зависимости результирующего зашифровываемого блока от предыдущих, либо от позиции его в исходном файле. Это достигается с помощью блока "памяти" - пакета информации длины, равной длине блока алгоритма. Блок памяти (к нему применяют термин IV - англ. Initial Vector) вычисляется по определенному принципу из всех прошедших шифрование блоков, а затем накладывается с помощью какой-либо обратимой функции (обычно XOR) на обрабатываемый текст на одной из стадий шифрования. В процессе раскодирования на приемной стороне операция создания IV повторяется на основе принятого и расшифрованного текста, вследствие чего алгоритмы создания цепочек полностью обратимы.

Два наиболее распространенных алгоритма создания цепочек - CBC и CFB. Их структура приведена на рис.3.2 и рис.3.3. Метод CBC получил название от английской аббревиатуры Cipher Block Chaining - объединение в цепочку блоков шифра, а метод CFB - от Cipher FeedBack - обратная связь по шифроблоку.


Рис.3.2. схема алгоритма создания цепочек CBC


Рис.3.3. схема алгоритма создания цепочек CFB


Еще один метод OFB (англ. Output FeedBack - обратная связь по выходу) имеет несколько иную структуру (она изображена на рис.3.4.) : в нем значение накладываемое на шифруемый блок не зависит от предыдущих блоков, а только от позиции шифруемого блока (в этом смысле он полностью соответствует скремблерам), и из-за этого он не распространяет помехи на последующие блоки. Очевидно, что все алгоритмы создания цепочек однозначно восстановимы.


Рис.3.4. схема алгоритма создания цепочек OFB


Сравнительные характеристики методов создания цепочек приведены в виде таблицы в приложении 3.


3.3 Обзор методик рандомизации сообщений


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

В этом случае необходимо введение какой-либо случайной величины в процесс шифрования. Это можно сделать несколькими способами:

записью в начало файла данных псевдослучайной последовательности байт заранее оговоренной длины с отбрасыванием ее при дешифровании - этот метод будет работать только при применении алгоритмов создания цепочек с памятью (CBC,CFB,OFB), применением модифицированных алгоритмов создания цепочек, которые при шифровании каждого блока смешивают с ним либо а) фиксированную случайную величину, прикрепленную к началу зашифрованного файла, либо б) значения (значение), вычисляемые с помощью того же шифра и ключа от заранее оговоренной величины, созданием специально для каждого файла совершенно случайного ключа, так называемого ключа сеанса, которым и шифруется весь файл (сам же ключ сеанса шифруется первоначальным ключом, называемым в этом случае мастер-ключом и помещается в начале зашифрованного файла)[18,25].

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

Рассмотрим проблему создания случайных и псевдослучайных чисел более детально. Наиболее часто в прикладных задачах результат формируют из счетчика тиков - системных часов. В этом случае данные о текущем часе несут примерно 16 бит информации, значение счетчика тиков - еще 16 бит. Это дает нам 32 бита информации - как вы помните, на сегодняшний день границей стойкой криптографии является значение в 40 бит, при реальных длинах ключей в 128 бит. Естественно, подобного метода крайне недостаточно. Итак к 32 битам можно добавить еще 16 бит из сверхбыстрого таймера, работающего на частоте 1,2 МГц в компьютерах архитектуры IBM PC AT и этого еще недостаточно. Кроме того, даже если мы сможем набрать длину ключа в 128 бит (что очень сомнительно), она будет нести псевдослучайный характер, поскольку основана на состоянии только лишь данной ЭВМ на момент начала шифрования. Источниками по-настоящему случайных величин могут быть только внешние объекты, например, человек.

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

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

По второму методу на введенные символы алгоритм не обращает никакого внимания, зато конспектирует интервалы времени, через которые произошли нажатия. Запись моментов производится по отсчетам быстрого системного таймера (частота 1,2 МГц) или внутреннему счетчику процессора, появившемуся в процессорах, начиная с Intel Pentium (частота соответствует частоте процессора). Так как верхние и младшие биты имеют определенную корреляцию между символами (первые из-за физических характеристик человека, вторые из-за особенностей операционной системы), то они отбрасываются (обычно удаляются 0-8 старших бита и 4-10 младших).

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

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


3.4 Общие сведения об асимметричных криптоалгоритмах


Симметричные криптосистемы, рассмотренные в предыдущих главах, несмотря на множество преимуществ, обладают одним серьезным недостатком. Связан он с ситуацией, когда общение между собой производят не три-четыре человека, а сотни и тысячи людей. В этом случае для каждой пары, переписывающейся между собой, необходимо создавать свой секретный симметричный ключ. Это в итоге приводит к существованию в системе из N пользователей N2/2 ключей. А это уже очень "приличное" число. Кроме того, при нарушении конфиденциальности какой-либо рабочей станции злоумышленник получает доступ ко всем ключам этого пользователя и может отправлять, якобы от его имени, сообщения всем абонентам, с которыми "жертва" вела переписку.

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

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

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

В целом система переписки при использовании асимметричного шифрования выглядит следующим образом. Для каждого из N абонентов, ведущих переписку, выбрана своя пара ключей : "открытый" Ej и "закрытый" Dj, где j - номер абонента. Все открытые ключи известны всем пользователям сети, каждый закрытый ключ, наоборот, хранится только у того абонента, которому он принадлежит. Если абонент, скажем под номером 7, собирается передать информацию абоненту под номером 9, он шифрует данные ключом шифрования E9 и отправляет ее абоненту 9. Несмотря на то, что все пользователи сети знают ключ E9 и, возможно, имеют доступ к каналу, по которому идет зашифрованное послание, они не могут прочесть исходный текст, так как процедура шифрования необратима по открытому ключу. И только абонент №9, получив послание, производит над ним преобразование с помощью известного только ему ключа D9 и восстанавливает текст послания. Если сообщение нужно отправить в противоположном направлении (от абонента 9 к абоненту 7), то нужно будет использовать уже другую пару ключей (для шифрования ключ E7, а для дешифрования - ключ D7).

Во-первых, в асимметричных системах количество существующих ключей связано с количеством абонентов линейно (в системе из N пользователей используются 2*N ключей), а не квадратично, как в симметричных системах. Во-вторых, при нарушении конфиденциальности k-ой рабочей станции злоумышленник узнает только ключ Dk : это позволяет ему читать все сообщения, приходящие абоненту k, но не позволяет вывадавать себя за него при отправке писем. Кроме этого, асимметричные криптосистемы обладают еще несколькими очень интересными возможностями, которые мы рассмотрим через несколько разделов[16,17].


3.5 Алгоритм RSA


Алгоритм RSA стоит у истоков асимметричной криптографии. Он был предложен тремя исседователями-математиками Рональдом Ривестом (R.Rivest) , Ади Шамиром (A.Shamir) и Леонардом Адльманом (L.Adleman) в 1977-78 годах.

Первым этапом любого асимметричного алгоритма является создание пары ключей : открытого и закрытого и распространение открытого ключа "по всему миру". Для алгоритма RSA этап создания ключей состоит из следующих операций :

Выбираются два простых (!) числа p и q

Вычисляется их произведение n(=p*q)

Выбирается произвольное число e (e<n), такое, что НОД(e,(p-1)(q-1))=1, то есть e должно быть взаимно простым с числом (p-1)(q-1).

Методом Евклида решается в целых числах (!) уравнение e*d+(p-1)(q-1)*y=1. Здесь неизвестными являются переменные d и y - метод Евклида как раз и находит множество пар (d,y), каждая из которых является решением уравнения в целых числах.

Два числа (e,n) - публикуются как открытый ключ.

Число d хранится в строжайшем секрете - это и есть закрытый ключ, который позволит читать все послания, зашифрованные с помощью пары чисел (e,n).

Как же производится собственно шифрование с помощью этих чисел :

Отправитель разбивает свое сообщение на блоки, равные k=[log2(n)] бит, где квадратные скобки обозначают взятие целой части от дробного числа.

Подобный блок, как Вы знаете, может быть интерпретирован как число из диапазона (0;2k-1). Для каждого такого числа (назовем его mi) вычисляется выражение ci=((mi)e)mod n. Блоки ci и есть зашифрованное сообщение Их можно спокойно передавать по открытому каналу, поскольку.операция возведения в степень по модулю простого числа, является необратимой математической задачей. Обратная ей задача носит название "логарифмирование в конечном поле" и является на несколько порядков более сложной задачей. То есть даже если злоумышленник знает числа e и n, то по ci прочесть исходные сообщения mi он не может никак, кроме как полным перебором mi.

А вот на приемной стороне процесс дешифрования все же возможен, и поможет нам в этом хранимое в секрете число d. Достаточно давно была доказана теорема Эйлера, частный случай которой утвержает, что если число n представимо в виде двух простых чисел p и q, то для любого x имеет место равенство (x(p-1)(q-1))mod n = 1. Для дешифрования RSA-сообщений воспользуемся этой формулой.

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

Технологии цифровых подписей

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

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

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

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

Представим теперь готовую к передаче хеш-сумму в виде нескольких k-битных блоков hi, где k - это размер сообщений по алгоритму RSA в предыдущем параграфе. Вычислим над каждым блоком значение si=((hi)d)mod n, где d - это тот самый закрытый ключ отправителя. Теперь сообщение, состоящее из блоков si можно "спокойно" передавать по сети. Никакой опасности по известным hi и si найти Ваш секретный ключ нет - это настолько же сложная задача, как и задача "логарифмирования в конечном поле". А вот любой получатель сообщения может легко прочесть исходное значение hi, выполнив операцию ((si)e)mod n = ((hi)d*e)mod n = hi - Ваш открытый ключ (e,n) есть у всех, а то, что возведение любого числа в степень (e*d) по модулю n дает исходное число, мы доказали в прошлом параграфе. При этом никто другой, кроме Вас, не зная Вашего закрытого ключа d не может, изменив текст, а следовательно, и хеш-сумму, вычислить такие s'i, чтобы при их возведении в степень e получилась хеш-сумма h'i, совпадающая с хеш-суммой фальсифицированного текста.

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

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

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

Необходимо отметить, что цепочка распространения ключей в реальных случаях не очень велика. Обычно она состоит из двух-четырех звеньев. С привлечением к процессу распространения ключей крупных фирм-производителей программных продуктов она становится еще короче. Действительно, если на компакт-диске (не пиратском !) с купленным программным обеспечением уже находится открытый ключ этой фирмы, а сама она имеет крупный рынок сбыта, то цепочка будет состоять либо из одного звена (если ПО этой же фирмы стоит и у Вашего потенциального собеседника), либо из двух (вторым станет какой-нибудь другой гигантский концерн, чье ПО установлено у собеседника - уж между собой-то все крупные компании обменялись ключами электронных подписей достаточно давно). Открытый ключ, подписанный какой-либо третьей стороной, называется заверенным с помощью сертификата. Сертификатом называется информационный пакет, содержащий какой-либо объект (обычно ключ) и электронную подпись, подтверждающую этот объект от имени чьего-либо лица[1,4].

Обмен ключами по алгоритму Диффи-Хеллмана

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

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

Предположим, что обоим абонентам известны некоторые два числа v и n. Они, впрочем, известны и всем остальным заинтересованным лицам. Например, они могут быть просто фиксированно "зашиты" в программное обеспечение. Для того, чтобы создать неизвестный более никому секретный ключ, оба абонента генерируют случайные или псевдослучайные простые числа : первый абонент - число x, второй абонент - число y. Затем первый абонент вычисляет значение (vx) mod n и пересылает его второму, а второй вычисляет (vy) mod n и передает первому. Злоумышленник получает оба этих значения, но модифицировать их (вмешаться в процесс передачи) не может. На втором этапе первый абонент на основе имеющегося у него x и полученного по сети (vy) mod n вычисляет значение (((vy) mod n)x)mod n, а второй абонент на основе имеющегося у него y и полученного по сети (vx) mod n вычисляет значение (((vx) mod n)y)mod n. На самом деле операция возведения в степень переносима через операцию взятия модуля по простому числу (то есть коммутативна в конечном поле), то есть у обоих абонентов получилось одно и то же число : ((vx*y) mod n. Его они и могут использовать в качестве секретного ключа, поскольку здесь злоумышленник снова встретится с проблемой RSA при попытке выяснить по перехваченным (vx) mod n и (vy) mod n сами числа x и y - это очень и очень ресурсоемкая операция, если числа v,n,x,y выбраны достаточно большими.

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

Общая схема асимметричной криптосистемы изображена на рисунке 1 приложения 4. По структуре она практически идентична симметричной.


Заключение


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

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

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

Обоснованный выбор той или иной системы защиты в общем-то должен опираться на какие-то критерии эффективности.

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

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

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

На рынке программных средств защиты информации ожидается появление коммерческих квантовых криптосистем.

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

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

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

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


Глоссарий


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

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

Защита информации - использование специальных средств, методов и мероприятий с целью предотвращения утери информации, находящейся в СОД.

Доступность - возможность за приемлемое время получить требуемую информационную услугу.

Целостность - это свойство информации сохранять свою структуру и содержание в процессе передачи и хранения.

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

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

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

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

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

Маскировка - способ защиты информации с СОД путем ее криптографического.

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

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

Аппаратные средства - устройства, встраиваемые непосредственно в вычислительную технику, или устройства, которые сопрягаются с ней по стандартному интерфейсу

Криптография - это наука об обеспечении секретности и/или аутентичности (подлинности) передаваемых сообщений.

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

Оперативность доступа - это способность информации быть доступными для конечного пользователя в соответствии с его оперативными потребностями.

Идентификация объекта - это процедура распознавания объекта по его идентификатору.

Аутентификация - это проверка подлинности объекта с данным идентификатором.

Авторизация - это процедура предоставления законному объекту, успешно прошедшему идентификацию и аутентификацию.

Уязвимость системы(сети) - эта любая характеристика компьютерной системы, использование которой может привести к реализации угрозы.

Атака на компьютерную систему (сеть) - это действие, предпринимаемое злоумышленником с целью поиска и использования той или иной уязвимости системы.

Безопасная или защищенная система - это система со средствами защиты, которые успешно и эффективно противостоят угрозам безопасности.

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

Черви - это вирусы, которые распространяются по глобальным сетям, поражая целые системы, а не отдельные программы.

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

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

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

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

Криптоанализ - наука (и практика ее применения) о методах и способах вскрытия шифров (атака на шифры).

Криптология - наука, состоящая из двух ветвей: криптографии и криптоанализа.

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

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

КК - квантовая криптография.


Список использованной литературы


1.Дж. Л. Месси. Введение в современную криптологию. // ТИИЭР, т.76, №5, Май 88 - М, Мир, 1988, с.24-42.

2.У. Диффи. Первые десять лет криптографии с открытым ключом. // ТИИЭР, т.76, №5, Май 88 - М, Мир, 1988, с.54-74.

.А. В. Спесивцев и др. Защита информации в персональных компьютерах. - М., Радио и связь. 1992, с.140-149.

.В. Жельников. Криптография от папируса до компьютера. - М., ABF, 1996.

5.A.Menezes, P.van Oorshot, S.Vanstone. Handbook of Applied Cryptography - CRC Press Inc., 1997.

.Hal Tipton and Micki Krause. Handbook of Information Security Management - CRC Press LLC, 1998.

7.Галатенко В. А. Информационная безопасность, М.: Высш. шк., 1996 г.

8.Якубайтис Э. Я. Открытые информационные сети. М.: Высш. шк.,, 1997 г.

.Климеко С.В., Уразметов В. Internet. Среда обитания информационного общества. Протвино, ИВФЭ, 1994 г.

.Олифер В. Г. Защита информации при работе в Интернет // Connect. - 2002. - № 11.

11.Журнал "Домашний компьютер", №№ 6, 8, 2005 г.

12.Скляров В. А. Применение ПЭВМ. В 3 кн. Кн. 2. Операционные системы ПЭВМ: Практ. пособие. М.: Высш. шк., 1992 г.

.Скэнлон Л. Персональные ЭВМ IBM PC и XT/ Пер. с англ. - 2-е изд. М., 2001 г.

.Воробьев С. Защита информации в персональных ЭВМ. М., 1993 г.

.Технологии электронных коммуникаций, том 43. Международная компьютерная сеть Internet. Москва, СП "Эко-Трендз", 2003 г.

16.Вихорев С. В., Березин А. С. Новые подходы к проектированию систем защиты информации // Документальная электросвязь. - 2001 г.

17.Петров А. А. Компьютерная безопасность - 2000 г.

.Шеннок К. Э. Теория связи в секретных системах / Работы по теории информации и кибернетике. - М.: ИЛ, 1963. - С. 333-402.

.Хоган Т. Аппаратные и программные средства персональных компьютеров: Справочник. В 2-х кн. Кн.1. М., 1995 г.

.Соколов А. В. Методология анализа рисков в информационных системах // Конфидент. - 2001.

.Мамаев М., Петренко С. Технологии защиты информации в Интернете: Специальный справочник. - СПб.: Питер, 2002.

.Постановление Правительства РК от 4.04.2000г. № 492 "О развитии единого информационного пространства в Республике Казахстан и создании ЗАО "Национальные информационные технологии"".

.Спесивцев А. В., Вегнер В. А., Крутяков А. Ю., Серегин В. В., Сидоров В. А. Защита информации в персональных ЭВМ. М., 1999 г.

.Панасенко С. П., Петренко С. А. Криптографические методы защиты информации для российских корпоративных систем // Конфидент. - 2001. №

.Чмора А. Л. Современная прикладная криптография. - М.: Гелиос АРВ, 2001 г.

.Шаньгин В. Ф. Защита информации в распределенных корпоративных сетях и системах. - М.: ДМК Пресс, 2002.

.Журнал "Компьютерра", №№ 17, 33, 34, 2004 г.; №№ 23, 34, 2005 г.

.Елтаренко Е. А., Симонов С.В Методы решения многокритериальных задач. Москва, МИФИ, 1998 г.

.Прокофьев Н. Антивирусная защита сети // Компьютер-Пресс-2001.

.Галицкий А. В., Рябко С. Д., Шаньгин В. Ф. Защита информации в сети - анализ технологий и синтез решений.

.Вэк Дж., Карнахан Л. Безопасность корпоративной сети при работе с Интернетом // Конфидент. - 2000 г.

.Барановская Т.П., Лойло В.И., Семенов М.И. и др. Архитектура компьютерных систем и сетей.

.Корпоративная архитектура безопасности информации: Каталог профессиональных услуг и технических решений по защите информации / ОАО ЭЛВИС+. - М., 2003 г.


Приложение 1


Код криптоалгоритма на языке программирования PASCAL.


type TLong2=array[0.. 1] of longint;x2=array[0.. 1] of TLong2;Delta=$9E3779B9;key:TLong2x2;EnCryptRouting(var data);y,z,sum:longint; a:byte;:=TLong2(data)[0];z:=TLong2(data)[1];sum:=0;a:=0 to 31 do(sum,Delta);(y,((z shl 4)+key[0,0]) xor (z+sum) xor ((z shr 5)+key[0,1]));(z,((y shl 4)+key[1,0]) xor (y+sum) xor ((y shr 5)+key[1,1]));;(data)[0]:=y;TLong2(data)[1]:=z

end;


Приложение 2


Схема работы криптоалгоритма

Рис.1. Схема работы криптоалгоритма


Приложение 3


Ассиметричный алгоритм криптосистемы

Рис.1.Ассиметричный алгоритм криптосистемы


Приложение 4


Общая схема симметричной криптосистемы

Рис.1. Общая схема симметричной криптосистемы


Приложение 5


Текст программы шифратора

DES;Windows, Classes, SysUtils, Math, Dialogs;= Array of Boolean;= ^TBitString;= record:TBitString;:TBitString;;= Array[0..16]Of TSplitKeyParts;= Array[0..15]Of TBitString;= record:TBitString;:TBitString;;= Array[0..16]OF TIPKeyParts;_PC1:Array[0..55] Of Byte = (57,49,41,33,25,17,9,

,58,50,42,34,26,18,

,2,59,51,43,35,27,

,11,3,60,52,44,36,

,55,47,39,31,23,15,

,62,54,46,38,30,22,

,6,61,53,45,37,29,

,13,5,28,20,12,4);_PC2:Array[0..47] Of Byte = (14,17,11,24,1,5,

,28,15,6,21,10,

,19,12,4,26,8,

,7,27,20,13,2,

,52,31,37,47,55,

,40,51,45,33,48,

,49,39,56,34,53,

,42,50,36,29,32);_IP:Array[0..63] Of Byte = (58,50,42,34,26,18,10,2,

,52,44,36,28,20,12,4,

,54,46,38,30,22,14,6,

,56,48,40,32,24,16,8,

,49,41,33,25,17,9,1,

,51,43,35,27,19,11,3,

,53,45,37,29,21,13,5,

,55,47,39,31,23,15,7);_E:Array[0..47] Of Byte = (32,1,2,3,4,5,

,5,6,7,8,9,

,9,10,11,12,13,

,13,14,15,16,17,

,17,18,19,20,21,

,21,22,23,24,25,

,25,26,27,28,29,

,29,30,31,32,1);_BOXES:Array[0..7,0..3,0..15]Of Byte = (

((14,04,13,01,02,15,11,08,03,10,06,12,05,09,00,07),

(00,15,07,04,14,02,13,01,10,06,12,11,09,05,03,08),

(04,01,14,08,13,06,02,11,15,12,09,07,03,10,05,00),

(15,12,08,02,04,09,01,07,05,11,03,14,10,00,06,13)),

((15,01,08,14,06,11,03,04,09,07,02,13,12,00,05,10),

(03,13,04,07,15,02,08,14,12,00,01,10,06,09,11,05),

(00,14,07,11,10,04,13,01,05,08,12,06,09,03,02,15),

(13,08,10,01,03,15,04,02,11,06,07,12,00,05,14,09)),

((10,00,09,14,06,03,15,05,01,13,12,07,11,04,02,08),

(13,07,00,09,03,04,06,10,02,08,05,14,12,11,15,01),

(13,06,04,09,08,15,03,00,11,01,02,12,05,10,14,07),

(01,10,13,00,06,09,08,07,04,15,14,03,11,05,02,12)),

((07,13,14,03,00,06,09,10,01,02,08,05,11,12,04,15),

(13,08,11,05,06,15,00,03,04,07,02,12,01,10,14,09),

(10,06,09,00,12,11,07,13,15,01,03,14,05,02,08,04),

(13,15,00,06,10,01,13,08,09,04,05,11,12,07,02,14)),

((02,12,04,01,07,10,11,06,08,05,03,15,13,00,14,09),

(14,11,02,12,04,07,13,01,05,00,15,10,03,08,09,06),

(04,02,01,11,10,13,07,08,15,09,12,05,06,03,00,14),

(11,08,12,07,01,14,02,13,06,15,00,09,10,04,05,03)),

((12,01,10,15,09,02,06,08,00,13,03,04,14,07,05,11),

(10,15,04,02,07,12,09,05,06,01,13,14,00,11,03,08),

(09,14,15,05,02,08,12,03,07,00,04,10,01,13,11,06),

(04,03,02,12,09,05,15,10,11,14,01,04,06,00,08,13)),

((04,11,02,14,15,00,08,13,03,12,09,07,05,10,06,01),

(13,00,11,07,04,09,01,10,14,03,05,12,02,15,08,06),

(01,04,11,13,12,03,07,14,10,15,06,08,00,05,09,02),

(06,11,13,08,01,04,10,07,09,05,00,15,14,02,03,12)),

((13,02,08,04,06,15,11,01,10,09,03,14,05,00,12,07),

(01,15,13,08,10,03,07,04,12,05,06,11,00,14,09,02),

(07,11,04,01,09,12,14,02,00,06,10,13,15,03,05,08),

(02,01,14,07,04,10,08,13,15,12,09,00,03,05,06,11))

);_P:Array[0..31] Of Byte = (16,7,20,21,

,12,28,17,

,15,23,26,

,18,31,10,

,8,24,14,

,27,3,9,

,13,30,6,

,11,4,25);_REVERSE_IP:Array[0..63] Of Byte = (40,8,48,16,56,24,64,32,

,7,47,15,55,23,63,31,

,6,46,14,54,22,62,30,

,5,45,13,53,21,61,29,

,4,44,12,52,20,60,28,

,3,43,11,51,19,59,27,

,2,42,10,50,18,58,26,

,1,41,9,49,17,57,25);_LSH:Array[0..15] Of Byte = (1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1);BinToInt(S:TBitString):Integer;IntToBin(N:Integer;Precision:Integer=8):TBitString;BinToStr(Bits:TBitString):String;StrToBin(S:String):TBitString;AnsiStrToBin(S:String; Zeroes:Boolean=True):TBitString;BinToAnsiStr(Bits:TBitString):String;CopyBits(Var Dest:TBitString; Source:TBitString; NBits:Integer);ConcatBits(Bits:Array Of TBitString):TBitString;DESEncode(S,Key:String):TBitString;DESDecode(S,Key:String):TBitString;GetPermutedKey(Key:TBitString):TBitString;GetPermutedKey2(Key:TBitString):TBitString;GetSplitKey(Key:TBitString):TSplitKey;GetConcatKey(Key:TSplitKey):TConcatKey;GetIPKey(M:TBitString; ConcatKey:TConcatKey):TIPKey;GetF(R,K:TBitString):TBitString;GetSBox(Index:Integer; T:TBitString):TBitString;GetReverseIP(RL:TBitString):TBitString;ReverseSubKeys(Var Keys:TConcatKey);Unit1, Unit2;ConcatBits(Bits:Array Of TBitString):TBitString;,C:Integer;(Result,0);C:=0 To Length(Bits)-1 Do(Result,Length(Result)+Length(Bits[C]));I:=0 To Length(Bits[C])-1 Do[Length(Result)-Length(Bits[C])+I]:=Bits[C][I];;;CopyBits(Var Dest:TBitString; Source:TBitString; NBits:Integer);:Integer;(Dest,NBits);I:=0 To NBits-1 Do[I]:=Source[I];;BinToInt(S: TBitString): Integer;,I:Integer;:=0;:=Length(S);L=0 ThenEConvertError.Create('Specified bit string is zero length');I:=L-1 DownTo 0 Do:=Result+Ord(S[I])*Trunc(Power(2,L-I-1));;IntToBin(N:Integer; Precision:Integer):TBitString;:TList;:PBoolean;(Result,0);:=TList.Create;N>0 Do(Bit);^:=Boolean(N mod 2);.Insert(0,Bit);:=N div 2;;BitList.Count<Precision Do(Bit);^:=False;.Insert(0,Bit);;N:=0 To BitList.Count-1 Do(Result,N+1);:=BitList.Items[N];[N]:=Bit^;(Bit);;.Free;;AnsiStrToBin(S: String; Zeroes:Boolean):TBitString;,B:TBitString;,I,J:Integer;:=0;(Result,L);(Temp,L);(B,0);I:=1 To Length(S) Do:=IntToBin(Ord(S[I]));:=L+Length(B);(Temp,L);J:=0 To Length(B)-1 Do[Length(Temp)-Length(B)+J]:=B[J];;:=Temp;;BinToStr(Bits:TBitString):String;,L:Integer;:='';:=Length(Bits);L=0 ThenEConvertError.Create('Specified bit string is zero length');I:=0 To L-1 DoBits[I] Then Result:=Result+'1'Result:=Result+'0';;StrToBin(S:String):TBitString;:Integer;(Result,0);I:=1 To Length(S) Do(S[I]<>'1')And(S[I]<>'0') ThenEConvertError.Create(S+' is invalid binary string');(Result,I);[I-1]:=Boolean(StrToInt(S[I]));;;BinToAnsiStr(Bits:TBitString):String;:Integer;:TBitString;:='';(B,8);:=0;I<=Length(Bits)-8 Do(B,Ptr(Integer(Bits)+I),8);:=Result+Char(BinToInt(B));(I,8);;;GetPermutedKey(Key:TBitString):TBitString;:Integer;(Result,Length(DES_PC1));I:=0 To Length(DES_PC1)-1 Do[I]:=Key[DES_PC1[I]-1];;GetPermutedKey2(Key:TBitString):TBitString;:Integer;(Result,Length(DES_PC2));I:=0 To Length(DES_PC2)-1 Do[I]:=Key[DES_PC2[I]-1];;GetSplitKey(Key:TBitString):TSplitKey;LeftShift(Key:TBitString; N:Integer):TBitString;,J:Integer;:TBitString;(Result,28);(Temp,28);I:=0 To 27 Do[I]:=Key[I];J:=1 To N DoI:=1 To 27 Do[I-1]:=Temp[I];[27]:=Temp[0];I:=0 To 27 Do[I]:=Result[I];;;,J:Integer;J:=1 To 16 Do(Result[J].C,28);(Result[J].D,28);;(Result[0].C,Key,28);(Result[0].D,TBitString(Integer(Key)+28),28);I:=1 To 16 Do[I].C:=LeftShift(Result[I-1].C,DES_LSH[I-1]);[I].D:=LeftShift(Result[I-1].D,DES_LSH[I-1]);;;GetConcatKey(Key:TSplitKey):TConcatKey;:Integer;:TBitString;I:=0 To 15 Do(Result[I],56);:=ConcatBits([Key[I+1].C,Key[I+1].D]);[I]:=GetPermutedKey2(Temp);;;GetIPKey(M:TBitString; ConcatKey:TConcatKey):TIPKey;,J:Integer;, F:TBitString;I:=0 To 16 Do(Result[I].L,32);(Result[I].R,32);;(IP,64);I:=0 To Length(DES_IP)-1 Do[I]:=M[DES_IP[I]-1];I:=0 To 31 Do[0].L[I]:=IP[I];I:=32 To 63 Do[0].R[I-32]:=IP[I];I:=1 To 16 Do[I].L:=Result[I-1].R;:=GetF(Result[I-1].R,ConcatKey[I-1]);J:=0 To 31 Do[I].R[J]:=Result[I-1].L[J] XOR F[J];;;GetF(R,K:TBitString):TBitString;,J:Integer;,E,KE,F,T:TBitString;(E,48);I:=0 To 47 Do[I]:=R[DES_E[I]-1];(KE,48);I:=0 To 47 Do[I]:=K[I] XOR E[I];(T,6);(F,0);(S,4);:=0;I<48 DoJ:=0 To 6 Do[J]:=KE[J+I];:=GetSBox(I div 6,T);:=ConcatBits([F,S]);:=I+6;;(Result,32);I:=0 To 31 Do[I]:=F[DES_P[I]-1];;GetSBox(Index:Integer; T:TBitString):TBitString;,Row,Col:Integer;:TBitString;(Result,4);(Temp,2);[0]:=T[0];[1]:=T[5];:=BinToInt(Temp);(Temp,4);(Temp,TBitString(@T[1]),4);:=BinToInt(Temp);:=S_BOXES[Index,Row,Col];(Result,4);:=IntToBin(Val,4);;GetReverseIP(RL:TBitString):TBitString;:Integer;(Result,64);I:=0 To Length(DES_REVERSE_IP)-1 Do[I]:=RL[DES_REVERSE_IP[I]-1];;ReverseSubKeys(Var Keys:TConcatKey);,L:Integer;:TBitString;(T,48);:=Length(Keys);I:=0 To (L-1)Div 2 Do:=Keys[I];[I]:=Keys[(L-I)-1];[(L-I)-1]:=T;;;DESEncode(S,Key:String):TBitString;:Integer;:TBitString;:TBitString;:TBitString;:TBitString;:TSplitKey;:TConcatKey;:TIPKey;:=AnsiStrToBin(Key);:=GetPermutedKey(K);:=GetSplitKey(Kplus);:=GetConcatKey(SplitKey);:=AnsiStrToBin(S);:=GetIPKey(M,ConcatKey);(RL,64);I:=0 To 31 Do[I]:=IPKey[16].R[I];[I+32]:=IPKey[16].L[I];;:=GetReverseIP(RL);:=RL;;DESDecode(S,Key:String):TBitString;:Integer;:TBitString;:TBitString;:TBitString;:TBitString;:TSplitKey;:TConcatKey;:TIPKey;:=AnsiStrToBin(Key);:=GetPermutedKey(K);:=GetSplitKey(Kplus);:=GetConcatKey(SplitKey);(ConcatKey);:=AnsiStrToBin(S);:=GetIPKey(M,ConcatKey);(RL,64);I:=0 To 31 Do[I]:=IPKey[16].R[I];[I+32]:=IPKey[16].L[I];;:=GetReverseIP(RL);:=RL;

End;.


Оглавление Введение . Информационная безопасность и модели защиты информации .1 Категории информационной безопасности .2 Абстрактные модели защи

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ