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

Категория:

Немного теории

Шифрование и крипотография – области исследования, актуальные в настоящее время, широко применяются в различных информационных системах от реализации прикладных программ до Web-технологий. Криптография – наука о методах обеспечения конфиденциальности (невозможности прочтения информации посторонним) и аутентичности (целостности и подлинности авторства, а также невозможности отказа от авторства) информации. Шифрование – криптографический процесс преобразования открытого текста на основе алгоритма и ключа, в результате которого возникает шифрованный текст. Ключ - параметр шифра, определяющий выбор конкретного преобразования данного текста. Расшифрование – криптографический процесс преобразования шифрованного текста в открытый. Существуют различные алгоритмы, применяемые для шифрования открытого текста и расшифрования закрытого текста – это DES, RC4, RSA и другие. Обладающие как достоинствами, так и недостатками, и самый очевидный недостаток это скорость преобразования открытого текста в закрытый. Нашей задачей являлось обеспечение защищенности открытых данных криптографическим алгоритмом, имеющим высокую скорость работы, на основе произвольной перестановке кодовой таблицы ASCII.

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

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

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

В данной реализации конечный пользователь сначала выбирает нужные файлы, вводит любой ключ, после чего запускается алгоритм шифрования. Для хранения защищаемых данных используется специальный формат файла. Заголовком шифрованного файла является идентификатор, который занимает 8 байт в файле (константа coderfil) в зашифрованном виде. Далее в файл записывается кодовая таблица в преобразованном виде, то есть каждый байт таблицы кодируется с использованием введенного пользователем ключа, с помощью выполнения операции XOR. После размещения таблицы отводится 4 байта для хранения количества файлов содержащихся в зашифрованном файле. Далее размещаются указатели на начала файлов, на каждый указатель отводится по 8 байт. Потом размещаются 2 байта для указания позиции начала данных файла, а между ними располагается название файла с расширением и так же размещаются последующие файлы. Все эти данные шифруются по исходной сгенерированной кодовой таблице. Для дешифрования данных, пользователь вводит секретный ключ, по которому происходит дешифрование кодовый таблицы, по которой кодировались данные. В случае если ключ был введен не правильно, то получаемые данные не будут совпадать с исходными, так как неправильный пароль восстанавливает не ту последовательность кодовой таблицы, и дальнейшее дешифрование становится невозможным без оригинальной кодовой таблицы. Если был введен правильный пароль, происходит дешифрование по восстановленной таблице: сначала дешифруется идентификатор, чтобы подтвердить, что этот файл является зашифрованным, и был ли правильно введен ключ. Далее считываются 4 байта, в которых хранится количество помещенных файлов в один, и сразу же дешифруется. На основе этого восстанавливаются указатели на файлы, то есть позиции в файле, где они хранятся (по 8 байт на каждый). Далее восстанавливаются указатели на начало данных каждого файла, которые занимают по 2 байта на каждый файл, после этого указателя располагается название файла и уже после него данные самого файла. Теперь по этим указателям дешифруются файлы следующим образом: последовательно по позициям считываются по блокам данные, дешифруются и так до тех пор, пока они не закончатся.

Выводы

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