Практика реализация интегральной атаки для усеченной модели блочного симметричного шифра Сrypton

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

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 19.06.2011
Размер файла 642,7 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

typedefunsignedcharu1byte;/*an8bitunsignedcharactertype*/

typedefunsignedshortu2byte;/*a16bitunsignedintegertype*/

typedefunsignedlongu4byte;/*a32bitunsignedintegertype*/

typedefsignedchars1byte;/*an8bitsignedcharactertype*/

typedefsignedshorts2byte;/*a16bitsignedintegertype*/

typedefsignedlongs4byte;/*a32bitsignedintegertype*/

/*2.StandardinterfaceforAEScryptographicroutines*/

/*Theseareallbasedon32bitunsignedvaluesandwilltherefore*/

/*requireendianconversionsforbig-endianarchitectures*/

#ifdef__cplusplus

extern"C"

{

#endif

char**cipher_name(void);

u4byte*set_key(constu4bytein_key[],constu4bytekey_len);

voidencrypt(constu4bytein_blk[4],u4byteout_blk[4]);

voiddecrypt(constu4bytein_blk[4],u4byteout_blk[4]);

#ifdef__cplusplus

};

#endif

/*3.Basicmacrosforspeedingupgenericoperations*/

/*Circularrotateof32bitvalues*/

#ifdef_MSC_VER

#include<stdlib.h>

#pragmaintrinsic(_lrotr,_lrotl)

#definerotr(x,n)_lrotr(x,n)

#definerotl(x,n)_lrotl(x,n)

#else

#definerotr(x,n)(((x)>>((int)(n)))|((x)<<(32-(int)(n))))

#definerotl(x,n)(((x)<<((int)(n)))|((x)>>(32-(int)(n))))

#endif

/*Invertbyteorderina32bitvariable*/

#definebswap(x)(rotl(x,8)&0x00ff00ff|rotr(x,8)&0xff00ff00)

/*Extractbytefroma32bitquantity(littleendiannotation)*/

#definebyte(x,n)((u1byte)((x)>>(8*n)))

/*Forinvertingbyteorderininput/output32bitwordsifneeded*/

#ifdefBLOCK_SWAP

#defineBYTE_SWAP

#defineWORD_SWAP

#endif

#ifdefBYTE_SWAP

#defineio_swap(x)bswap(x)

#else

#defineio_swap(x)(x)

#endif

/*Forinvertingthebyteorderofinput/outputblocksifneeded*/

#ifdefWORD_SWAP

#defineget_block(x)\

((u4byte*)(x))[0]=io_swap(in_blk[3]);\

((u4byte*)(x))[1]=io_swap(in_blk[2]);\

((u4byte*)(x))[2]=io_swap(in_blk[1]);\

((u4byte*)(x))[3]=io_swap(in_blk[0])

#defineput_block(x)\

out_blk[3]=io_swap(((u4byte*)(x))[0]);\

out_blk[2]=io_swap(((u4byte*)(x))[1]);\

out_blk[1]=io_swap(((u4byte*)(x))[2]);\

out_blk[0]=io_swap(((u4byte*)(x))[3])

#defineget_key(x,len)\

((u4byte*)(x))[4]=((u4byte*)(x))[5]=\

((u4byte*)(x))[6]=((u4byte*)(x))[7]=0;\

switch((((len)+63)/64)){\

case2:\

((u4byte*)(x))[0]=io_swap(in_key[3]);\

((u4byte*)(x))[1]=io_swap(in_key[2]);\

((u4byte*)(x))[2]=io_swap(in_key[1]);\

((u4byte*)(x))[3]=io_swap(in_key[0]);\

break;\

case3:\

((u4byte*)(x))[0]=io_swap(in_key[5]);\

((u4byte*)(x))[1]=io_swap(in_key[4]);\

((u4byte*)(x))[2]=io_swap(in_key[3]);\

((u4byte*)(x))[3]=io_swap(in_key[2]);\

((u4byte*)(x))[4]=io_swap(in_key[1]);\

((u4byte*)(x))[5]=io_swap(in_key[0]);\

break;\

case4:\

((u4byte*)(x))[0]=io_swap(in_key[7]);\

((u4byte*)(x))[1]=io_swap(in_key[6]);\

((u4byte*)(x))[2]=io_swap(in_key[5]);\

((u4byte*)(x))[3]=io_swap(in_key[4]);\

((u4byte*)(x))[4]=io_swap(in_key[3]);\

((u4byte*)(x))[5]=io_swap(in_key[2]);\

((u4byte*)(x))[6]=io_swap(in_key[1]);\

((u4byte*)(x))[7]=io_swap(in_key[0]);\

}

#else

#defineget_block(x)\

((u4byte*)(x))[0]=io_swap(in_blk[0]);\

((u4byte*)(x))[1]=io_swap(in_blk[1]);\

((u4byte*)(x))[2]=io_swap(in_blk[2]);\

((u4byte*)(x))[3]=io_swap(in_blk[3])

#defineput_block(x)\

out_blk[0]=io_swap(((u4byte*)(x))[0]);\

out_blk[1]=io_swap(((u4byte*)(x))[1]);\

out_blk[2]=io_swap(((u4byte*)(x))[2]);\

out_blk[3]=io_swap(((u4byte*)(x))[3])

#defineget_key(x,len)\

((u4byte*)(x))[4]=((u4byte*)(x))[5]=\

((u4byte*)(x))[6]=((u4byte*)(x))[7]=0;\

switch((((len)+63)/64)){\

case4:\

((u4byte*)(x))[6]=io_swap(in_key[6]);\

((u4byte*)(x))[7]=io_swap(in_key[7]);\

case3:\

((u4byte*)(x))[4]=io_swap(in_key[4]);\

((u4byte*)(x))[5]=io_swap(in_key[5]);\

case2:\

((u4byte*)(x))[0]=io_swap(in_key[0]);\

((u4byte*)(x))[1]=io_swap(in_key[1]);\

((u4byte*)(x))[2]=io_swap(in_key[2]);\

((u4byte*)(x))[3]=io_swap(in_key[3]);\

}

#endif

#definebeg/*

#defineen*/

Файл<АTACK.H>

#ifndefATACH.H_H#defineATACH.H_H

#defineENCRYPT0#defineDECRYPT1

¦include"StdAfx.h"#include"Resource.h"¦include"winaesDlg.h"

¦defineROTL(x)(((x)»7)|((x)«1))

¦defineR0TL8(x)(((x)«8)|((x)»24))¦defineR0TL16(x)(((x)«16)I((x)»16))¦defineROTL24(x)(((x)«24)|((x)»8))

intKeyExpansion(CWinaesDlg*dig,intnb,intnk,BYTE*key);voidEncrypt(CWinaesDlg*dig,BYTE*buff,BYTE*result);voidInvDecrypt(CWinaesDlg*dig,BYTE*buff,BYTE*result);voidEquDecrypt(CWinaesDlg*dig,BYTE*buff,BYTE*result);

intblockEncrypt(CWinaesDlg*dig,BYTE*input,intinputLen,BYTE*result,intcipher_mode);intblockDecrypt(CWinaesDlg*dig,BYTE*input,intinputLen,BYTE*result,intdecrypt_mode,intcipher_mode);

¦endif

ATACH.H.CPP

¦include<stdio.h>¦include<stdlib.h>¦include"Rijndael.h"¦include"service.h"

¦defineBPOLY(BYTE)Oxllb¦defineMPOLY(BYTE)0x101

BYTECo[4]={0x3,0xl,0xl,0x2};

BYTEInvCo[4]={0xB,0xD,0x9,0xE};

intN,Nk,Nb,Nr;

DWORDfkey[120];

DWORDikey[120];//inversekey

DWORDekey[120];//equivalentkey

BYTEsubbytes[256];BYTEinvsubbytes[256];

BYTEshfts[3][4];

staticcharstrTmp[260],Tmp[260];staticDWORDs[8];

voidResetShifts(){

for(inti=0;i<3;i++)

for(intj=0;j<4;j++)

if(i==2&&j==3)shfts[i][j]=4;elseshfts[i][j]=j;

voidshiftrow(BYTE*row,intn,intdirect)

BYTEt;intj;

if(n)

for(inti=0;i<n;i++)switch(direct)

caseENCRYPT:

t=row[0];

for(j=l;j<Nb;j++)row[j-l]=row[j];row[Nb-1In¬break;

caseDECRYPT:

t=row[Nb-l];

for(j=Nb-1;j>0;j--)row[j]=row[j-1],

row[0]=t;

break;

voidShifRows(BYTE*s,intdirect)

BYTEtemp[8];inti,j;

for(i=0;i<4;i++)

for(j=0;j<Nb;j++)temp[j]=s[j*4+i];

shiftrow(temp,shfts[Nb/2-2][i],direct),

for(j=0;j<Nb;j++)s[j*4+i]=temp[j];}

staticDWORDpack(BYTE*b)

{

return((DWORD)b[3]«24)|((DWORD)b[2]«16)|((DWORD)b[1]«8)|(DWORD)b[0],

staticvoidunpack(DWORDa,BYTE*b){

b[0]=(BYTE)a;

b[l]=(BYTE)(a»8);

b[2]=(BYTE)(a»16);

b[3]=(BYTE)(a»24);}

staticBYTExtime(BYTEa,BYTEmod){

return((a&0x80)?a«lAmod

staticBYTEadd(BYTEa,BYTEb){returnалЬ;}

staticBYTEbmul(BYTEa,BYTEb,BYTEmod){

BYTEt,s,u;

u=b;t=a;s=0;

while(u){

if(u&1)эл=Ь;

u»=l;

t=xtime(t,mod);

return(s);}

staticBYTEsquare(BYTEa,BYTEmod){

return(bmul(a,a,mod));}

staticBYTEproduct(DWORDx,DWORDy,BYTEmod){

BYTExb[4],yb[4];

unpack(x,xb);

unpack(y,yb);

returnbmul(xb[0],yb[0],mod)лЬти1(xb[1],yb[1],mod)лЬти1(xb[2],yb[2],mod)лЬти1(xb[3],yb[3],mod);}

staticBYTEfinv(constBYTEx,BYTEmod){

BYTEresult=x;

for(inti=l;i<7;i++)result=bmul(square(result,mod),x,mod);

returnsquare(result,mod);}

BYTESBinvModulo;BYTESBmulModulo;BYTESBmulConstl;BYTESBmulConst2;BYTESBaddConstl;BYTESBaddConst2;

staticBYTEByteSubOLD(BYTEx)BYTEresult=x;

result=finv(result,SBinvModulo);

result=bmul(SBmulConstl,result,SBmulModulo);

result=add(result,SBaddConstl);

returnresult;}

staticBYTEInvByteSubOLD(BYTEx)BYTEresult=x;

result=bmul(SBmulConst2,result,SBmulModulo);result=add(result,SBaddConst2);result=finv(result,SBinvModulo);returnresult;

voidFillTables(intmode)

for(inti=0;i<256;

if(mode&1)subbytes[i]=ByteSubOLD(i);

if(mode&2)invsubbytes[i]=InvByteSubOLD(i)

voidResetTables()

Encrypt(dig,iv,block);

for(1=k;(1<(k+OFB_bits))&&(1<(Nb«5));1++){

result[1»3]=(block[0]&0x80U)»(1&7);

for(j=0;j<(Nb«2)-1;j++){

iv[j]=<iv[j]«1)|(iv[j+1]»7);

block[j]=(block[j]«1)|(block[j+17);

1]«1)|((block[0]&0x80U)»7);

}}

if(OFB_Debug){

CharStr2HexStr((BYTE*)input,Tmp,Nb*4);sprintf(strTmp,"in[%04u]=%s",i,Tmp);dlg->m_eDebug.AddString(strTmp);

CharStr2HexStr((BYTE*)result,Tmp,Nb*4);sprintf(strTmp,"out[%04u]=%s",i,Tmp);dlg->m_eDebug.AddString(strTmp);}

result+=Nb«2;

input+=Nb«2;}

free(iv);break;

caseMODE_CTR:

iv=(BYTE*)malloc(Nb«2);memcpy(iv,cipher_IV,Nb«2);

for(i=1;i<=numBlocks;i++){

if(CTR_Debug){

//CharStr2HexStr((BYTE*)s,Tmp,Nb*4);

sprintf(strTmp,"=CTRAESNb=%uNk=%u,block%04uencrypt======================",Nb,Nk,i);

dlg->m_eDebug.AddString(strTmp);

CharStr2HexStr((BYTE*)iv,Tmp,Nb*4);sprintf(strTmp,"IV[%04u]=%s",i,Tmp);dlg->m_eDebug.AddString(strTmp);}

Encrypt(dig,iv,result);

for(j=0;j<Nb;j++)((DWORD*)result)[j]л=((DWORD*)input)[j];

increase_counter(iv,Nb«2);

if(CTR_Debug){

CharStr2HexStr((BYTE*)input,Tmp,Nb*4);

sprintf(strTmp,"in[%04u]=%s",i,Tmp);

dlg->m_eDebug.AddString(strTmp);

CharStr2HexStr((BYTE*)result,Tmp,Nb*4);sprintf(strTmp,"out[%04u]=%s",i,Tmp);dlg->m_eDebug.AddString(strTmp);}

input+=Nb«2;result+=Nb«2;}

free(iv);break;default:

returnBAD_CIPHER_STATE;}

return128*numBlocks;

РазмещенонаAllbest.ru


Подобные документы

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

    дипломная работа [1,2 M], добавлен 05.06.2011

  • Алгоритм ГОСТ 28147-89 симметричного шифрования на основе сети Фейстеля, основные режимы его работы. Атаки на системы защиты информации. Метод грубой силы. Атаки класса "встреча посередине". Характеристики ГОСТ 28147-89 и американского шифра Rijndael.

    курсовая работа [510,7 K], добавлен 17.01.2012

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

    дипломная работа [519,0 K], добавлен 19.06.2015

  • Назначение алгоритма "Blowfish", особенности длины ключа и степени криптостойкости. Обоснование программной реализации расширения ключа и сцепления блоков шифра "Blowfish". Проверка использования инициализирующего вектора и распространения ошибок шифра.

    курсовая работа [1,3 M], добавлен 30.01.2014

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

    курсовая работа [45,9 K], добавлен 24.12.2011

  • Шифрование и дешифрование с помощью сети Фейстеля. Процесс блочного преобразования открытой информации в зашифрованную информацию. Таблица перевода чисел и букв. Криптостойкость шифра как показатель его эффективности. Подстановки и перемещение битов.

    курсовая работа [475,6 K], добавлен 30.12.2013

  • Принцип работы и программная реализация однозвучного, одноалфавитного и полиграммного шифра. Шифрование по методу подстановки, замены и кодового слова. Безопасность шифровки простой замены. Частотные характеристики текстовых сообщений и дешифрация.

    контрольная работа [1,1 M], добавлен 02.02.2012

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

    курсовая работа [301,9 K], добавлен 29.10.2017

  • Статистический анализ текстов, созданных программой симметричного шифрования. Реализация симметричного криптоалгоритма. Основные шаги в использовании криптосистемы PGP. Генерация ключей, шифрование и расшифровка сообщений. Защита от сетевых атак.

    лабораторная работа [1,7 M], добавлен 06.07.2009

  • Реализация криптографического алгоритма шифрования и дешифрования с использованием шифра Виженера. Понятие и суть полиалфавитного шифра. Метод полиалфавитного шифрования буквенного текста с использованием ключевого слова. Взлом полиалфавитных шифров.

    курсовая работа [863,0 K], добавлен 21.04.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.