КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Основные принципы блочного симметричного шифрования.Как уже было отмечено, блочные шифры обрабатывают кодируемое сообщение блоками из нескольких байт(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
Для преобразований параметров криптоалгоритмов, которые не требуют обратимости, используются необратимые операции, такие как логические сложение и умножение, арифметические сдвиги влево и вправо, получение остатка от целочисленного деления, умножение по модулю 2N. В качестве второго операнда V, участвующего в операциях криптографических преобразований, могут использоваться: фиксированные числовые константы; значения, вычисленные из независимой части шифруемого блока (например, можно сложить младшую и старшую часть блока шифруемой информации); материал ключа – блок информации, вычисленный исключительно на основе информации, хранящейся в ключе шифрования. Одним из основных принципов структурного построения современных криптоалгоритмов является принцип итерирования. Его идея заключается в многократной, состоящей из нескольких циклов (или раундов), обработки одного блока открытого текста с использованием на каждом циклеспециального ключа раунда, вычисляемого на основе ключа шифрования. Количество циклов можно варьировать из соображений криптостойкости и эффективности реализации алгоритма: увеличение количества циклов приводит к повышению стойкости шифра, но увеличивает время шифрации и потребляемые вычислительные ресурсы. Подобные циклические структуры принято называть сетями, и большинство современных блочных шифров построены с использованием сетевой архитектуры. Популярной сегодня является сеть Фейштеля, схема которой представлена на рис.2.4. При шифровании блок открытого текста разбивается на две равные части - левую и правую. На каждом цикле одна из частей подвергается преобразованию при помощи образующей функции F и вспомогательного ключа ki, полученного из исходного ключа. Результат преобразования складывается по модулю 2 с другой частью, после чего части меняются местами. Преобразования на каждом цикле идентичны и лишь после последнего раунда не выполняется перестановка частей блока.
Достоинством сети Фейштеля является то, что дешифрация выполняется той же последовательностью преобразований, лишь порядок следования вспомогательных ключей меняется на обратный. Это достигается за счет автообратимости операции суммы по модулю 2, смешивающей части блока между собой. Если размер блока шифрования криптоалгоритма слишком велик, возможны модификации сети Фейштеля с 4 ветвями, один из вариантов которых приведен на рис. 2.5.
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.
|