Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Основные принципы блочного симметричного шифрования.




Как уже было отмечено, блочные шифры обрабатывают кодируемое сообщение блоками из нескольких байт(4-32 байт), при этом блок открытого текста X преобразуется в блок шифротекста Y того же размера с использованием некоторого ключа шифрования Key:

Y = Encrypt(X, Key)

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

X = Decrypt(Y, Key)

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

X = Encrypt((Encrypt(X, Key), Key)

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

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

Таблица 2.1

Основные обратимые операции
Название операции Графическое обозначение Формула преобразования Обратное преобразование
Сложение X’ = X + V Вычитание
Сложения по модулю 2 X’ = X ⊕ V Автообратима
Умножение по модулю 2N+1 (N - размер блока) X’=(X·V) mod(2N+1) Сомножитель можно найти по алгоритму Евклида
Циклические сдвиги вправо/влево X’ = X ROR V X’ = X ROL V Циклический сдвиг в обратном направлении
Табличная подстановка X’ = SBox(X) Обратная подстановка

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

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

фиксированные числовые константы;

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

материал ключа – блок информации, вычисленный исключительно на основе информации, хранящейся в ключе шифрования.

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

Популярной сегодня является сеть Фейштеля, схема которой представлена на рис.2.4.

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


Рис. 2.4. Схема сети Фейштеля на М раундов

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

Если размер блока шифрования криптоалгоритма слишком велик, возможны модификации сети Фейштеля с 4 ветвями, один из вариантов которых приведен на рис. 2.5.


Рис. 2.5. Сеть Фейштеля с 4 ветвями

 

3. Построить программу на языке С++ для работы со структурой Дата. Программа должна обеспечивать простейшие функции для работы с данными структуры: увеличение/уменьшение на 1 день, ввод значений, вывод значений.

unit STR_Date;

 

 

interface

Uses SysUtils;

type TUserDate = class

private

fNumber:Word;

fMonth:word;

fYear:Integer;

public

Function SetUserDate(ANumber:Word;AMonth:Word;AYear:Integer):Boolean;

Function GetUserDate:String;

Function ModifyDate(AModify:Integer):String;

end;

implementation

 

Function TUserDate.SetUserDate;

Begin

If AYear>0 Then

Begin

fYear:=AYear;

if (AMonth >0) and (AMonth<=12) Then

Begin

fMonth:=AMonth;

fNumber:=0;

if ((fMonth=1)or(fMonth=3)or(fMonth=5)or(fMonth=7)or(fMonth=8)or(fMonth=10)or(fMonth=12))and(ANumber>0)and(ANumber<=31) Then

fNumber:=ANumber;

if ((fMonth=4)or(fMonth=6)or(fMonth=9)or(fMonth=11))and(ANumber>0)and(ANumber<=30) Then

fNumber:=ANumber;

if (fMonth=2) Then

if (fYear mod 4 = 0) Then

if (ANumber>0) and (ANumber<=29) Then fNumber:=ANumber

else

if (ANumber>0) and(ANumber<=28) Then fNumber:=ANumber;

if fNumber<>0 Then Result:=True else Result:=False;

 

end

else Result:=False;

end

else

Result:=False;

End;

 

Function TUserDate.GetUserDate;

Var str,Itog:String;

Begin

Itog:='';

str:=IntToStr(fNumber);

If length(str)=1 Then Itog:=Itog+'0';

Itog:=Itog+str+'.';

str:=IntToStr(fMonth);

if length(str)=1 Then Itog:=Itog+'0';

Itog:=Itog+str+'.';

Itog:=Itog+IntToStr(fYear);

Result:=Itog

End;

 

//Данная функция очень утрирована

Function TUserDate.ModifyDate;

Begin

fNumber:=fNumber+ AModify;

Result:=GetUserDate;

End;

end.

 

 

Тело программы

 

program Zad_17;

 

{$APPTYPE CONSOLE}

 

uses

SysUtils,

STR_Date in 'STR_Date.pas';

 

var UsDate:TUserDate;

Y:Integer;

N,M:Word;

F:Boolean;

begin

repeat

Write('Vvedite YEAR = ');

Readln(Y);

Write('Vvedite MONTH = ');

Readln(M);

Write('Vvedite Number = ');

Readln(N);

UsDate:=TUserDate.Create;

F:=UsDate.SetUserDate(N,M,Y);

if F=False Then Writeln('ERROR Date');

Until F;

Writeln('Vvedena Date =>> ',UsDate.GetUserDate);

Write('Vvedite znachenie izmenenij = ');

Readln(Y);

Writeln('New date =>> ',UsDate.ModifyDate(Y));

Readln;

{ TODO -oUser -cConsole Main : Insert code here }

end.


 


Поделиться:

Дата добавления: 2015-04-21; просмотров: 135; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты