Практика реализация интегральной атаки для усеченной модели блочного симметричного шифра С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