Remkomplekty.ru

IT Новости из мира ПК
145 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Паскаль шифрования текста гаммированием по модулю

Реализация и криптоанализ шифра гаммирования

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

Прежде чем продолжить чтение, обратите внимание на реализации других шифров

Шифр гаммирования

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

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

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

Реализация шифра гаммирования на Python

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

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

На вход поступает открытый текст без пробелов, в виде массива символов, и ключ — гамму. Анализируем длину текста, «растягиваем» гамму до нужного размера и выполняем посимвольное сложение.

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

Работает аналогично. «Растягиваем» гамму и выполняем посимвольное вычитание ее из текста.

Реализация взлома шифра гаммирования

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

По традиции можно выделить два основных этапа.

  1. получение длины гаммы.
  2. получение значения гаммы.

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

Где n — длина текста, f_i — количество появлений в тексте i-го символа алфавита.

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

На практике я заметил, что если длина подходящая, то индекс первого столбца будет гарантированно превышать значение 0.053 . А когда длина плохая, он будет колебаться от 0.03 до 0.044 .

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

Где f_i — количество появлений i-го символа в первом столбце, g_i — во втором, n — длина первого столбца, n — длина второго. В нашем случае n = n `, столбцы одинаковой длины.

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

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

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

На этом описание алгоритма взлома завершено, я постарался максимально подробно его описать, но как всегда, лучше один раз глянуть код, чем сотню раз прочитать алгоритм. Комментарии писал везде, где только можно.

Исходный код функции взлома на Python

Заключение

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

Курсовая работа
Шифрование/дешифрование текста методом гаммирования
в среде программирования Turbo Pascal 7.0 (DOS) (Паскаль)
Программа и описание

Среда программирования: Turbo Pascal 7.0 (DOS)

Название работы: Шифрование/дешифрование текста методом гаммирования

Вид работы: Курсовая работа

Тематика работы: Алгоритмы, Криптография

Объем программы: 5 (по десятибалльной шкале)

Уровень сложности: 5 (по десятибалльной шкале)

Разработчик (автор): Программист сайта kursovik.com (письмо автору)

Ключевые слова: шифрование, дешифрование, паскаль, гаммирование

Описание (отчет): Есть на 28 страниц, посмотреть оглавление

Перед покупкой работы не забудьте проверить её оригинальность. Запросить у администратора проверку текущей оригинальности работы по версии системы Антиплагиат.РУ

Курсовая работа
Шифрование/дешифрование текста методом гаммирования

Стоимость ИСХОДНОГО ТЕКСТА программы составляет 500 руб РФ

Стоимость ОПИСАНИЯ к программе составляет 400 руб РФ

Продажа каждой работы строго учитывается,
у каждой работы есть своя история продаж.

    Как можно приобрести данную готовую работу ?

      Заполните форму, которая расположена чуть Выше данного текста и нажмите кнопку «Приобрести»

      Мы поддерживаем следующие способы оплаты:

      • любые банковские карты: Visa, MasterCard, Maestro, МИР
      • электронные деньги: QIWI, WebMoney, Яндекс.Деньги
      • оплата по квитанции в любом банке на территории России
      • оплата через отделения Евросети и Связного
      • оплата с баланса мобильного телефона
      • оплата через PayPal
      • оплата наличными

      Автоматическая оплата возможна с территории следующих государств:
      Россия, Украина, Беларусь, Казахстан, Молдова, Литва, Латвия, Эстония,
      Грузия, Армения, Азербайджан, Узбекистан, Таджикистан, Киргизия, Туркмения
      С помощью электронных денег и PayPal оплата возможна со всего мира.

      После заполнения формы Вы получите на свой E-mail автоматическое письмо со всеми подробностями оплаты заказа.

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

      На Ваш E-mail адрес и в личном кабинете нашего сайта sys.kursovik.com.

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

      Да, мы можем гарантировать уникальность данной работы.
      Она была разработана нашим программистом на заказ и выставлена на продажу 15 марта 2007 года.

      Обычно работы по программированию всегда показывают больше 50% уникального текста.
      Это напрямую связано с тем, что даже если введение, заключение и теоретическая глава вдруг окажутся неуникальными, то сам текст программы и описание ее работы слихвой компенсируют этот недостаток, т.к. они пишутся с нуля, скопировать их вряд ли откуда можно.
      Тем не мнее, если вдруг при проверке купленной у нас готовой работы, она не дотятянет до требуемого в Вашем ВУЗе процента уникальности, то мы готовы поднять его при помощи специальной программы.
      ВНИМАНИЕ ! Это предложение действительно только для готовых работ, купленных на нашем сайте ! Повышать уникальность каких-либо других работ мы не будем 🙂

      Ниже приводится таблица продаж:

      Вы можете узнать дополнительно, в какие ВУЗ ы Вашего города сдавалась эта работа, нажав на следующую ссылку

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

    Читать еще:  Логические операторы в си шарп

    Частные вопросы

      Скажите пожалуйста программа написана с помощью метода ГАММИРОВАНИЯ(как написано у Вас), а скажите этот метод относится к стандарту шифрования ГОСТ 28147-89?

      • ГОСТ 28147-89 описан на странице www.pavel.hut1.ru/gost89.html
        Здесь говорится, что «ГОСТ 28147-89 определяет три основных режима шифрования: простая замена, гаммирование и гаммирование с обратной связью и один дополнительный режим выработки имитовставки.»
        Далее описывается режим гаммирования, можете почитать подробности.
        В программе используется очень упрощенный метод гаммирования, не из ГОСТ 28147-89, хотя, возможно что-то общее и есть.
        Метод, используемый в программе, выглядит так. Дан ключ длиной 1024 бита (128 байт). Этот ключ используется для шифрования и дешифрования.
        Входная информация делится на блоки по 128 байт, и каждый блок шифруется путем сложения с ключом по модулю 2. В результате получаем зашифрованную информацию.
        Для расшифровки зашифрованная информация делится на блоки по 128 байт, и каждый блок дешифруется путем сложения с ключом по модулю 2. В результате получаем исходную информацию.
        Таким образом, использованный в программе алгоритм полностью не соответствует гостовскому, а лишь отдаленно его напоминает. Насколько — можете судить сами по описанию.
        Размер исходного файла — 6820 байт (257 строк). Размер исполняемого файла — 9968 байт.

    Рекомендуем Вам также посмотреть нашу рубрику «вопросы и ответы».

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

    шифрование и дешифрование методом гаммирования

    strekoza сказал(-а): 29.01.2014 15:07

    шифрование и дешифрование методом гаммирования

    Здравствуйте! Я не очень хорошо разбираюсь в програмировании, а тут срочно задчку сдавать нужно. Суть задачи: шифрование и дешифрование методом гаммирования. Моя программа шифрует, а вот расшифовывает не правильно! помогите, пожалуйста!
    unit Unit1;

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls;

    type
    TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Button2: TButton;
    Edit4: TEdit;
    Label4: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    private < Private declarations >
    public
    < Public declarations >
    end;

    var
    Form1: TForm1;
    res:String;
    sourse: String;
    i,j:Word;
    implementation

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    If Edit2.Text=» then
    begin
    ShowMessage (‘Необходим Ввод Ключа’);
    Exit;
    end;
    If Edit1.Text=» then
    begin
    ShowMessage (‘Необходим Ввод Слова’);
    Exit;
    end;
    Res:=»;
    i:=1;
    While i

    nik_1 сказал(-а): 13.08.2014 15:47

    uses
    Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

    TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit; // исходное слово
    Edit2: TEdit; // ключ
    Edit3: TEdit; // шифр
    Edit4: TEdit; // расшифровка
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Memo1: TMemo; // значение переменных в ходе выполнения программы
    procedure Button1Click(Sender: TObject); // создать шифр
    procedure Button2Click(Sender: TObject); // расшифровать шифр
    private
    < private declarations >
    public
    < public declarations >
    end;

    var
    Form1: TForm1;

    < TForm1 >
    //
    // важно в исходном слове и ключе не должно быть одинаковых символов !
    // то есть chr(0) — пустая строка (res:=»
    // лечится смещением chr(x + ord(‘1’)) — при шифровке
    // chr(x — ord(‘1’)) — при дешифровке
    //
    procedure TForm1.Button1Click(Sender: TObject);
    var i, j:integer;
    res, res1 :AnsiString;
    begin
    memo1.lines.Add(‘—-шифровка——‘);
    If Edit2.Text=» then
    begin
    ShowMessage (‘Необходим Ввод Ключа’);
    Exit;
    end;
    If Edit1.Text=» then
    begin
    ShowMessage (‘Необходим Ввод Слова’);
    Exit;
    end;
    res:=»;
    i:=1;
    While i

    Простейшие методы шифрования с закрытым ключом

    Методы гаммирования

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

    Пусть символам исходного алфавита соответствуют числа от 0 (А) до 32 (Я) . Если обозначить число, соответствующее исходному символу, x , а символу ключа – k , то можно записать правило гаммирования следующим образом:

    где z – закодированный символ, N — количество символов в алфавите, а сложение по модулю N — операция, аналогичная обычному сложению, с тем отличием, что если обычное суммирование дает результат, больший или равный N , то значением суммы считается остаток от деления его на N . Например, пусть сложим по модулю 33 символы Г (3) и Ю (31) :

    то есть в результате получаем символ Б , соответствующий числу 1 .

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

    Операция сложения по модулю два в алгебре логики называется также «исключающее ИЛИ» или по-английски XOR .

    Рассмотрим пример. Предположим, нам необходимо зашифровать десятичное число 14 методом гаммирования с использованием ключа 12 . Для этого вначале необходимо преобразовать исходное число и ключ (гамму) в двоичную форму: 14(10)=1110(2), 12(10)=1100(2) . Затем надо записать полученные двоичные числа друг под другом и каждую пару символов сложить по модулю два. При сложении двух двоичных знаков получается 0 , если исходные двоичные цифры одинаковы, и 1 , если цифры разные:

    Сложим по модулю два двоичные числа 1110 и 1100 :

    В результате сложения получили двоичное число 0010 . Если перевести его в десятичную форму, получим 2 . Таким образом, в результате применения к числу 14 операции гаммирования с ключом 12 получаем в результате число 2 .

    Каким же образом выполняется расшифрование? Зашифрованное число 2 представляется в двоичном виде и снова производится сложение по модулю 2 с ключом:

    Переведем полученное двоичное значение 1110 в десятичный вид и получим 14 , то есть исходное число.

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

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

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

    Сформулируем, как производится гаммирование по модулю 2 в общем случае:

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

    На рис. 2.6 показано, как применяется гаммирование к тексту с русскими символами. Символы кодируются в соответствии с принятой кодировкой, а затем производится сложение по модулю 2.

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

    Чем длиннее ключ, тем надежнее шифрование методом гаммирования. Связь длины ключа с вероятностью вскрытия сообщения, а также некоторые принципы дешифрования сообщений, закрытых методом гаммирования, обсуждаются в «Поточные шифры и генераторы псевдослучайных чисел. Часть 2» и «Шифрование, помехоустойчивое кодирование и сжатие информации» . На практике длина ключа ограничена возможностями аппаратуры обмена данными и вычислительной техники, а именно выделяемыми объемами памяти под ключ, временем обработки сообщения, а также возможностями аппаратуры подготовки и записи последовательностей ключей. Кроме того, для использования ключа вначале необходимо каким-либо надежным способом доставить его обеим сторонам, обменивающимся сообщениями. Это приводит к возникновению проблемы распределения ключей, сложность решения которой возрастает с увеличением длины ключа и количества абонентов в сети передачи сообщений.

    Оглавление (стр. 6 )

    УДК Ь СЕХЛ ТТОМ АЕП ПКИ УКЛР БТТО.

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

    Если матрицу А(аij) использовать в качестве ключа, а в место компонента вектора B = (bj) подставить символы текста, то компоненты вектор С = (сj) будут представлять собой символы зашифрованного текста.

    Приведем пример, взяв в качестве ключа квадратную матрицу третьего порядка:

    .

    Заменим буквы алфавита цифрами, соответствующими их порядковому номеру в алфавите: А = 0, Б = 1, В = 2 и т. д. Тогда отрывку текста ВАТАЛА будет соответствовать последовательность чисел 2, 0, 19, 0, 12, 0. По принятому алгоритму шифрования выполним необходимые действия:

    ;

    .

    При этом зашифрованный текст будет иметь следующий вид:

    85, 54, 25, 96, 60 , 24.

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

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

    ,

    где — определитель матрицы, получаемой вычеркиванием i-й строки и j-го столбца исходной матрицы А.

    Определителем матрицы называется алгебраическая сумма n! членов (для определителя n-го порядка), составленная следующим образом: членами служат всевозможные произведения n элементов матрицы, взятых по одному в каждой строке и в каждом столбце, причем член суммы берется со знаком «+», если его индексы составляют четную подстановку, и со знаком «–» в противоположном случае. Для матрицы третьего порядка, например, определитель

    Тогда процесс дешифровки текста будет выглядеть следующим образом:

    Таким образом, получена последовательность чисел раскрытого текста: 2, 0, 19, 0, 12, 0, что соответствует исходному тексту. Этот метод шифрования является формальным, что позволяет легко реализовывать его программными средствами.

    Шифрование аддитивными методами (гаммирование).

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

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

    ,

    где Ri, Si, G — символы соответственно зашифрованного исходного текста и гаммы.

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

    Рис. 2.1 — Пример шифрования гаммированием:

    а — по правилу логической эквивалентности; б — по правилу логической неэквивалентности; в — формирование сигналов зашифрованного сообщения из символов зашифрованного текста и гаммы

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

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

    Комбинированные методы шифрования с симметричными ключами. Эти методы являются достаточно эффективным средством повышения стойкости шифрования. Они заключаются в применении различных способов шифрования исходного текста одновременно или последовательно.

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

    .

    Комбинировать можно любые методы шифрования и в любом количестве, однако на практике наибольшее распространение получили следующие комбинации: 1) подстановка + гаммирование; 2) перестановка + гаммирование; 3) гаммирование + гаммирование; 4) подстановка + перестановка. Типичным примером комбинированного шифра является национальный стандарт США криптографического закрытия данных (DES).

    2.2 Задание

    2.2.1 Таблица Вижинера

    Реализовать средствами языка PASCAL программу шифрования данных. В качестве данных используется ФИО студента. Ключи для шифрования приведены в таблице 2.10.

    Ссылка на основную публикацию
    ВсеИнструменты
    Adblock
    detector
    ×
    ×