ШИФРОВАНИЕ ФАЙЛОВ WAWE-ФОРМАТА - Студенческий научный форум

VIII Международная студенческая научная конференция Студенческий научный форум - 2016

ШИФРОВАНИЕ ФАЙЛОВ WAWE-ФОРМАТА

Алексеев Д.М. 1
1Южный Федеральный Университет
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF
Введение

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

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

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

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

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

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

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

Целью моей работы является создание в среде разработки Microsoft Visual C++ 2010 Express программы, реализующей блочный симметричный алгоритм шифрования данных ГОСТ 28147 – 89, а также его применение для шифрования звукового файла формата WAVE.

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

  1. Шифрование данных на основе алгоритма ГОСТ 28147 - 89

  2. Вывод на экран информации о структуре WAVE - файла

  3. Вывод о результате шифрования на экран

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

  1. Симметричный блочный шифр ГОСТ 28147 – 89

  2. WAVE – файлы и их структура

  3. Руководство пользователя

  4. Тестирование программы

1. Симметричный блочный шифр ГОСТ 28147 - 89 1.1. Основные положения

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

Современная криптография делится на две части:

- симметричная криптография;

- асимметричная криптография.

Симметричные криптосистемы бывают:

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

- поточные криптосистемы: имеют аппаратную реализацию в виде специализированных устройств.

Принцип блочного шифрования: если имеется сообщение М, которое состоит из многих блоков М1,….Мi,….Mn, шифрование представляет некоторую функцию Е над сообщением М и ключом К и реализуется:

Ек(М) = Ек(М1), Ек(М2),….., Ек(Мi),….Ек(Мn), где

Мi,….Mn – блоки конкретной длины (64 бита), т.е. сообщение М разбивается на блоки определенной длины и каждый блок зашифрован одним и тем же алгоритмом, соответствующим шифру Е и на одном и том же ключе К.

1.2. ГОСТ 28147 - 89 1.2.1. Общее описание алгоритма шифрования

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

Над правой частью открытого текста выполняется раундовое преобразование (F), состоящее из трех операций:

- сложение с раундовым ключом по модулю 232 ;

- замена в восьми секретных S-блоках;

- циклический сдвиг влево на 11 позиций.

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

Рис. 1. Схема алгоритма шифрования данных ГОСТ 28147 - 89

1.2.2. Функция F

Над правой частью открытого текста выполняется раундовое преобразование (F), состоящее из трех операций:

- сложение с раундовым ключом по модулю 232 ;

- замена в восьми секретных S-блоках;

- циклический сдвиг влево на 11 позиций.

Схема раундового преобразования алгоритма шифрования ГОСТ 28147-89 приведена на рис. 2.

Рис. 2. Раундовое преобразование алгоритма ГОСТ 28147 – 89

Рассмотрим каждую операцию функции F алгоритма шифрования данных ГОСТ 28147 – 89 подробнее.

Сложение целых чисел по определенному модулю: например, по модулю 232, обозначение операции - . Правило выполнения данной операции:

a b = a + b, если a + b < 232 ,

а b = a + b - 232, если a + b ≥ 232.

Каждый S-блок представляет собой перестановку чисел от 0 до 15 (конкретный вид S-блоков в стандарте не определен). Первая 4-битная подпоследовательность попадает на вход первого S-блока, вторая — на вход второго и т. д.

Если узел S-блока, например, выглядит так:

1, 15, 13, 0, 5, 7, 10, 4, 9, 2, 3, 14, 6, 11, 8, 12

и на входе S-блока будет 0, то на его выходе будет 1, если - 4, то на выходе будет 5, если на входе - 12, то на выходе - 6 и т. д.

Циклический сдвиг влево на определенное число позиций (11) осуществляется путем переноса первых одиннадцати битов двоичной последовательности в ее конец, а на место первых одиннадцати подставляются оставшиеся 21 бит. Смысл операции циклического сдвига приведен на рис. 3.

Рис. 3. Циклический сдвиг

1.2.3. Выработка раундовых подключей

Раундовые ключи шифрования вычисляются из исходного секретного ключа путем разбиения его на восемь 32-битных блоков: K1, К2, К3, К4, К5, К6, К7, К8. С 1 по 24 раунд ключи используются в прямом порядке: K1, К2, К3, К4, К5, К6, К7, К8, K1, К2, К3, К4, К5, К6, К7, К8 и так далее. С 25 по 32 раунды ключи берутся в обратном порядке: К8, К7, К6, К5, К4, К3, К2, К1.

2. WAVE – формат звуковых файлов 2.1. Определение

Waveform Audio File Format (WAVE, WAV, от англ. waveform — «в форме волны») — формат файла-контейнера для хранения записи оцифрованного аудиопотока, подвид RIFF. Этот контейнер, как правило, используется для хранения несжатого звука в импульсно-кодовой модуляции. Однако контейнер не налагает каких-либо ограничений на используемый алгоритм кодирования.

WAV совместим с операционными системами Windows, Macintosh или Linux. Формат также учитывает некоторые отличия процессоров Intel, такие как порядок байтов от младшего к старшему. RIFF формат выполняет роль обертки для различных кодеков аудио сжатия.

Несмотря на то, что WAV файл может содержать сжатое аудио, наиболее обычным его применением является хранение как раз несжатого аудио в формате линейной импульсно-кодовой модуляции (LPCM). Стандартным форматом Audio-CD, например, является аудио в формате LPCM, с 2 каналами, частотой дискретизации 44 100 Гц и 16 бит на сэмпл. Так как формат LPCM хранит несжатое аудио, которое абсолютно идентично оригиналу, это позволяет использовать его профессиональным пользователям и аудио экспертам для получения максимального качества звучания. WAV аудио файл также может быть изменен практически в любом аудио редакторе.

Поскольку формат WAV-файла пришел от операционной системы Windows, в которой традиционно использовались процессоры Intel, все значения данных формата хранятся как Little-Endian, т. е. самый младший значащий байт идет первым.

2.2. Структура WAVE – файлов

Структура WAV файла включает в себя две области:

- заголовок файла;

- область данных .wav файла.

В заголовке файла хранится информация о:

- размере файла;

- количестве каналов;

- частоте дискретизации;

- количестве бит в сэмпле (эту величину еще называют глубиной звучания).

Для большего понимания смысла величин в заголовке следует рассмотреть подробнее область данных и процесс оцифровки звука. Звук состоит из колебаний, которые при оцифровке приобретают ступенчатый вид. Этот вид обусловлен тем, что компьютер может воспроизводить в любой короткий промежуток времени звук определенной амплитуды (громкости) и этот короткий момент далеко не бесконечно короткий. Продолжительность этого промежутка и определяет частота дискретизации. Например, у нас файл с частотой дискретизации 44.1 kHz, это значит, что тот короткий промежуток времени равен 1/44100 секунды (следует из размерности величины Гц = 1/с). Современные звуковые карты поддерживают частоту дискретизации до 192 kHz.

Совокупность амплитуды и короткого промежутка времени носит название сэмпл.

Структура WAV – файла наиболее наглядно приведена в таблице 1.

Местоположение

Поле

Описание

0..3 (4 байта)

chunkId

Содержит символы “RIFF” в ASCII кодировке (0x52494646 в big-endian представлении). Является началом RIFF-цепочки.

4..7 (4 байта)

chunkSize

Это оставшийся размер цепочки, начиная с этой позиции. Иначе говоря, это размер файла – 8, то есть, исключены поля chunkId и chunkSize.

8..11 (4 байта)

format

Содержит символы “WAVE” (0x57415645 в big-endian представлении)

12..15 (4 байта)

subchunk1Id

Содержит символы “fmt “ (0x666d7420 в big-endian представлении)

16..19 (4 байта)

subchunk1Size

16 для формата PCM. Это оставшийся размер подцепочки, начиная с этой позиции.

20..21 (2 байта)

audioFormat

Для PCM = 1 (то есть, Линейное квантование). Значения, отличающиеся от 1, обозначают некоторый формат сжатия.

22..23 (2 байта)

numChannels

Количество каналов. Моно = 1, Стерео = 2 и т.д.

24..27 (4 байта)

sampleRate

Частота дискретизации. 8000 Гц, 44100 Гц и т.д.

28..31 (4 байта)

byteRate

Количество байт, переданных за секунду воспроизведения.

32..33 (2 байта)

blockAlign

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

34..35 (2 байта)

bitsPerSample

Количество бит в сэмпле. Так называемая “глубина” или точность звучания. 8 бит, 16 бит и т.д.

36..39 (4 байта)

subchunk2Id

Содержит символы “data” (0x64617461 в big-endian представлении)

40..43 (4 байта)

subchunk2Size

Количество байт в области данных.

44..

data

Непосредственно WAV-данные.

Таблица 1. Структура WAVE - файла

Идентификатор секции (Chunk ID) и объем данных (Data Size). Идентификатор секции всегда "fmt " (0x666D7420) и объем данных равен размеру стандартного формата WAV (16 байт) плюс размер всех дополнительных байт формата, необходимых для поддержки специфических форматов звука, если он не содержит несжатых данных PCM. Обратите внимание, что идентификатор секции "fmt" оканчивается на символ пробела (0x20).

Количество каналов (Number of Channels). Количество каналов указывает, сколько отдельных аудиосигналов закодировано в секции данных звука (wave data chunk). Значение 1 означает монофонический сигнал, 2 означает стерео, и т. п.

Скорость выборок (Sample Rate). Число выборок аудиосигнала, приходящихся на секунду. На эту величину не влияет количество каналов.

Среднее количество байт в секунду (Average Bytes Per Second). Величина, показывающая, сколько байт за секунду данных должно быть пропущено через цифроаналоговый преобразователь (D/A converter, DAC) во время воспроизведения файла. эта информация полезна, чтобы определить - могут ли данные поступать от источника с нужной скоростью, чтобы не отставать от воспроизведения. Эта величина просто вычисляется по формуле: AvgBytesPerSec = SampleRate * BlockAlign.

Выравнивание блока (Block Align). Количество байт на одну выборку. Эта величина может быть вычислена по формуле: BlockAlign = SignificantBitsPerSample / 8 * NumChannels.

Количество используемых бит на выборку (Significant Bits Per Sample). Величина указывает количество бит, формирующих каждую выборку сигнала. Обычно эта величина 8, 16, 24 или 32. Если число бит не выравнено по байту (не делится нацело на 8), количество используемых байт на выборку округляется вверх к наименьшему количеству байт. Неиспользуемые биты устанавливаются в 0 и игнорируются. Такие форматы (с числом бит на выборку, некратным 8) встречаются редко.

3. Блок-схема работы программы

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

Открыв программу «GOST 28147 - 89» (файл организации проектов Visual Studio с расширением .sln) в среде разработки Visual Studio, пользователь осуществляет запуск окна консольного приложения. Этот процесс реализован в блок-схеме как действие «Открыть файл .sln».

Затем пользователю предлагается ввести адрес файла с расширением .wav непосредственно в код программы. Описание данного действия на языке UML выглядит как блок «Введите адрес .wav файла».

Далее программа осуществляет проверку корректности ввода адреса расположения файла. Описание данного действия на языке UML выглядит как блок условия «Корректно ли введен адрес?», выраженный в вопросной форме.

В зависимости от результата проверки условия («Да» или «Нет») осуществляется выбор одного из альтернативных путей работы алгоритма. Если адрес введен некорректно («Нет»), пользователю необходимо закрыть окно консольного приложения и повторно ввести адрес WAVE – файла непосредственно в код программы. Данное действие на языке UML реализуется как повторное прохождение блока «Введите адрес .wav файла».

Если адрес расположения WAVE - файла введен корректно («Да»), программа предлагает пользователю результаты своей работы. Описание данного действия на языке UML выглядит как блок «Вывод результатов на экран».

Далее программа отображает предложение о дальнейшем использовании приложения. Описание данного действия на языке UML выглядит как блок условия «Продолжить работу с программой?», выраженный в вопросной форме.

В зависимости от результата («Да» или «Нет») осуществляется выбор одного из альтернативных путей работы алгоритма. Если пользователь желает («Да») продолжить работу, пользователю вновь предлагается ввести адрес расположения файла непосредственно в код программы. Данное действие на языке UML реализуется как повторное прохождение блока «Введите адрес .wav файла». Процедура работы алгоритма повторяется и остается аналогичной.

По завершении работы с программой пользователь закрывает консольное приложение (файл организации проектов Visual Studio с расширением .sln). Этот процесс реализован в блок-схеме как действие «Закрыть файл .sln». Работа программы завершена.

Блок-схема работы программы шифрования звуковых файлов формата WAVE алгоритмом шифрования данных ГОСТ 28147 - 89 представлена ниже (рис. 4).

 

Начало

 

 

Открыть файл .sln

 

 

Введите адрес файла .wav

 

 

Корректно ли введен адрес?

 

 

Нет

 

 

Да

 

 

Вывод результатов на экран

 

 

Продолжить работу с программой?

 

 

Да

 

 

Нет

 

 

Закрыть файл .sln

 

 

Конец

 

Рис. 4. Блок-схема.

4. Руководство программиста 4.1. Общая информация

Программа шифрования звуковых файлов формата WAVE алгоритмом шифрования данных ГОСТ 28147 - 89 создана в среде разработки Visual Studio на языке программирования C++. Реализована данная программа в качестве консольного приложения.

4.2. Модули программы

Программный код консольного приложения GOST 28147 - 89 можно условно разделить на несколько логических структур (программных модулей):

  1. подключение используемых в программе стандартных библиотекC++.

  2. объявление структуры WAVE - файла, S – блоков, секретного ключа шифрования.

  3. метод mod_2_32. В данной структуре реализован процесс сложения двух битовых последовательностей по mod232.

  4. метод ROL. В данной структуре реализован процесс осуществления циклического сдвига влево на 11 позиций.

  5. метод S - box. В данной структуре реализован процесс разбиения 32-х битовой последовательности на восемь 4-х битовых и их прохождения через восемь S - блоков.

  6. методnew_right_part_function. В данной структуре реализован процесс нахождения новой правой части для схемы Фейстеля. По сути данный метод представляет собой последовательное выполнение методов mod_2_32, S_box, ROL, а также сложение с левой частью по mod 2.

  7. метод encrypt. В данной структуре реализован процесс 32-х раундов шифрования исходного открытого текста.

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

5. Руководство пользователя 5.1. Общая информация

Программа шифрования звуковых файлов формата WAVE алгоритмом шифрования данных ГОСТ 28147 – 89 создана в среде разработки Visual Studio на языке программирования C++. Реализована данная программа в качестве консольного приложения. Для дальнейшего использования данного приложения необходимо открыть файл организации проектов Visual Studio с расширением .sln. Язык интерфейса программы – английский.

5.2. Руководство пользователя

Открыв программу шифрования звуковых файлов формата WAVE алгоритмом шифрования данных ГОСТ 28147 – 89 «GOST 28147 - 89» (файл организации проектов Visual Studio с расширением .sln) в среде разработки Visual Studio, пользователь осуществляет запуск окна консольного приложения.

В дизайне загруженного окна наблюдается название консольного приложения, отображающее смысл работы программы - «GOST 28147 - 89» («ГОСТ 28147 - 89»), а также автор исходного кода программы - «Аuthor: AlekseevDmitry» («Автор: Алексеев Дмитрий»). Для начала шифрования WAVE – файла пользователю необходимо набрать с клавиатуры 1 и нажать ENTER: «Please, forstartencryptpress «1»» («Пожалуйста, для начала шифрования нажмите «1» ») (рис. 5).

Рис. 5. Начало работы с программой.

Если адрес файла введен некорректно, программа уведомляет пользователя об ошибке (рис. 6).

Рис. 6. Ошибка чтения файла.

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

Рис. 7. Вывод на экран всей необходимой пользователю информации.

По завершении работы с программой пользователь закрывает консольное приложение.

Результаты тестирования работы программы: успешно.

Программный код программы шифрования звуковых файлов формата WAVE алгоритмом шифрования данных ГОСТ 28147 – 89 «GOST 28147 - 89» находится в Приложении.

Заключение

В ходе выполнения работы были изучены основные понятия, принципы, на которых базируется современная блочная криптография, структура симметричного блочного алгоритма шифрования данных ГОСТ 28147 – 89, а также понятие и структура WAVE – файла. Был реализован алгоритм шифрования звуковых файлов формата WAVE алгоритмом шифрования данных ГОСТ 28147 – 89. Программа была протестирована и отлажена.

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

  1. Шифрование данных на основе алгоритма ГОСТ 28147 - 89

  2. Вывод на экран информации о структуре WAVE - файла

  3. Вывод о результате шифрования на экран

Список использованных источников

Книги

  1. Шнайер Б., Прикладная криптография. Протоколы, алгоритмы, исходные тексты на языке Си. – М.: Издательство ТРИУМФ, 2002

  2. Л.К. Бабенко, Е.А. Ищукова, «Сборник индивидуальных заданий по шифрованию данных по курсу "Криптографические методы и средства обеспечения защиты информации"». Таганрог: Изд-во ТРТУ, 2003

Электронные ресурсы

  1. Audio Coding: WAVE - формат [Электронный ресурс]: – Режим доступа: http://audiocoding.ru/formats/wav/

  1. Audio Coding: Структура WAVE - формата [Электронный ресурс]: - Режим доступа: http://audiocoding.ru/article/2008/05/22/wav-file-structure.html

  1. WAVE - данные [Электронный ресурс]: Режим доступа: http://alexei-s1.narod.ru/WAVE.htm

  1. Обработка WAVE - файлов [Электронный ресурс]: Режим доступа: http://microsin.net/programming/arm/wav-decoding.html

  2. Сyberforum [Электронный ресурс]: - Режим доступа: http://www.cyberforum.ru/csharp-beginners/thread654037.html

ПРИЛОЖЕНИЕ А

Программный кодшифрования звуковых файлов формата WAVE алгоритмом шифрования данных ГОСТ 28147 – 89 «GOST 28147 - 89»

// Magma.cpp: определяет точку входа для консольного приложения.

//

#include "stdafx.h"

#include

#include

#include

#include

#include "conio.h"

#include

using namespace std;

unsigned long key[8] = {0xffeeddcc, 0xbbaa9988, 0x77665544, 0x33221100, 0xf0f1f2f3, 0xf4f5f6f7, 0xf8f9fafb, 0xfcfdfeff};

unsigned long left_part = 0xfedcba98;

unsigned long right_part = 0x76543210;

unsigned long cipher_left_part;

unsigned long cipher_right_part;

struct Wav_Header

{

char Wav_ChunkId[4];

int Wav_ChunkSize;

char Wav_Format[4];

char Wav_SubChunkId[4];

int Wav_SubChunkSize;

short int Wav_AudioFormat;

short int Wav_NumChannels;

int Wav_SampleRate;

int Wav_ByteRate;

short int Wav_BlockAlign;

short int Wav_BitPerSample;

char Wav_SubChunk2Id[4];

int Wav_SubChunk2Size;

};

int S_box[8][16] = {

12, 4, 6, 2, 10, 5, 11, 9, 14, 8, 13, 7, 0, 3, 15, 1,

6, 8, 2, 3, 9, 10, 5, 12, 1, 14, 4, 7, 11, 13, 0, 15,

11, 3, 5, 8, 2, 15, 10, 13, 14, 1, 7, 4, 12, 9, 6, 0,

12, 8, 2, 1, 13, 4, 15, 6, 7, 0, 10, 5, 3, 14, 9, 11,

7, 15, 5, 10, 8, 1, 6, 13, 0, 9, 3, 14, 11, 4, 2, 12,

5, 13, 15, 6, 9, 2, 12, 10, 11, 7, 8, 1, 4, 3, 14, 0,

8, 14, 2, 5, 6, 9, 1, 12, 15, 4, 11, 0, 13, 10, 3, 7,

1, 7, 14, 13, 0, 5, 8, 3, 4, 15, 10, 6, 9, 12, 11, 2 };

unsigned long long mod = pow(2.0, 32.0);

unsigned long mod_2_32 (unsigned long seq, unsigned long key)

{

unsigned long res = 0;

if (seq + key >= mod)

{

res = seq + key - mod;

}

else

{

res = seq + key;

}

return res;

}

unsigned long ROL (unsigned long seq)

{

return (seq > 21);

}

unsigned long s_box (unsigned long seq)

{

int offset = 28;

int s_index[8] = {};

for (int i = 0; i < 8;)

{

s_index[i] = (seq >> offset) & 0xf;

i++;

offset = offset - 4;

}

int s_out[8] = {};

int j = 7;

for ( int i = 0; i < 8; )

{

s_out[i] = S_box[j][s_index[i]]

Просмотров работы: 1281