Материал: Поточное шифрование файла

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Поточное шифрование файла













КУРСОВАЯ РАБОТА

Дисциплина: «Технологии программирования»

Тема: «Поточное шифрование файла»


РЕФЕРАТ

Пояснительная записка к курсовой работе: 22c., 5 рис., 2 разделов, 2 приложение, 2 источника

Объект исследования - Регистр сдвига с линейной обратной связью.

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

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

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

В результате выполнения курсовой работы была разработана программа, которая зашифровует-расшифровует файл. Программа была написана языком программирования C++, в среде программирования Microsoft Visual Studio.

КРИПТОГРАФИЯ, РЕГИСТР, КЛЮЧ, БЕЗОПАСНОСТЬ.

СОДЕРЖАНИЕ

ВВЕДЕНИЕ

. ШИФРЫ И ГЕНЕРАТОР ЛРР. ИХ ВИДЫ И СВОЙСТВА

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

.1.1   История

.1.2   Синхронные потоковые шифры

.1.3   Самосинхронизирующиеся поточные шифры

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

.2      Линейный рекуррентный регистр

.2.1   Регистр сдвига с линейной обратной связью

.2.2   Программная реализация LFSR

.2.3   Линейная сложность

.2.4   Корреляционная независимость

.2.5   Потоковые шифры на базе LFSR

. ОПИСАНИЕ ПРОГРАММЫ

.1 Общие сведения

.2 Функциональное назначение

.3 Техничные средства, что используются

.4 Входные данные

.5 Выходные данные

ВЫВОДЫ

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

ПРИЛОЖЕНИЯ

ВВЕДЕНИЕ

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

1. ШИФРЫ И ГЕНЕРАТОР ЛРР. ИХ ВИДЫ И СВОЙСТВА

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

Потоковые шифры преобразуют открытый текст в шифротекст по одному биту за операцию. Простейшая реализация потокового шифра показана на рисунке 1.1.1. Генератор потока ключей (иногда называемый генератором с бегущим ключом) выдаёт поток битов: k1, k2, k3,..., ki. Этот поток ключей (иногда называемый бегущим ключом) и поток битов открытого текста, p1, p2, p3,..., pi, подвергаются операции "исключающее или", и в результата получается поток битов шифротекста.

i =pi Å ki

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

i = ci Å ki

Так как

i Å ki Å ki= pi

это работает правильно.

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

Рис. -1.1.1. Потоковый шифр

.1.1   История

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

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

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

.1.2   Синхронные потоковые шифры

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

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

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

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

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

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

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

.1.3   Самосинхронизирующиеся поточные шифры

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

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

Рис. 1.1.1. Самосинхронизирующийся генератор потока ключей.

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

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

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

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

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

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

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

1.2    Линейный рекуррентный регистр

.2.1   Регистр сдвига с линейной обратной связью

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

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

Рис. 1.2.1. Сдвиговый регистр с обратной связью

Криптографам нравились потоковые шифры на базе сдвиговых регистров: они легко реализовывались с помощью цифровой аппаратуры. Я лишь слегка затрону математическую теорию. В 1965 году Эрнст Селмер (Ernst Selmer), главный криптограф норвежского правительства, разработал теорию последовательности сдвиговых регистров. Соломон Голомб (Solomon Golomb), математик NSA, написал книгу, излагающие некоторые свои результаты и результаты Селмера.

Простейшим видом сдвигового регистра с обратной связью является линейный сдвиговый регистр с обратной связью (linear feedback shift register, или LFSR) (рисунок 1.2.2). Обратная связь представляет собой просто XOR некоторых битов регистра, перечень этих битов называется отводной последовательностью (tap sequence). Иногда такой регистр называется конфигурацией Фиббоначи. Из-за простоты последовательности обратной связи для анализа LFSR можно использовать довольно развитую математическую теорию. Криптографы любят анализировать последовательности, убеждая себя, что эти последовательности достаточно случайны, чтобы быть безопасными. LFSR чаще других сдвиговых регистров используются в криптографии.

Рис. 1.2.2. Сдвиговый регистр с линейной обратной связью

На Рис. 1.2.3 показан 4-битовый LFSR с отводом от первого и четвертого битов. Если его проинициализировать значением 1111, то до повторения регистр будет принимать следующие внутренние состояния:

1 1 1

1 1 1

0 1 1

1 0 1

0 1 0

1 0 1

1 1 0

0 1 1

0 0 1

1 0 0

0 1 0

0 0 1

0 0 0

1 0 0

1 1 0

Рис. 1.2.3. 4-битовый LFSR

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

1 1 1 0 1 0 1 1 0 0 1 0 0 0....

битовый LFSR может находиться в одном из 2n-1 внутренних состояний. Это означает, что теоретически такой регистр может генерировать псевдослучайную последовательность с периодом 2n-1 битов. (Число внутренних состояний и период равны 2n-1, потому что заполнение LFSR нулями, приведет к тому, что сдвиговый регистр будет выдавать бесконечную последовательность нулей, что абсолютно бесполезно.) Только при определенных отводных последовательностях LFSR циклически пройдет через все 2n-1 внутренних состояний, такие LFSR являются LFSR с максимальным периодом. Получившийся результат называется М-последовательностью.

Для того, чтобы конкретный LFSR имел максимальный период, многочлен, образованный из отводной последовательности и константы 1, должен быть примитивным по модулю 2. Степень многочлена является длиной сдвигового регистра. Примитивный многочлен степени n - это неприводимый многочлен, который является делителем, но не является делителем xd+1 для всех d, являющихся делителями 2n-1.

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