FNAm2 | это... Что такое FNAm2? (original) (raw)

FNAm2(Feistel Net Algorithm mark 2)
Создатель: Алексей Андреевич Кобзин, Украина
Создан: 2009 г.
Размер ключа: 512 бит
Размер блока: 128 бит
Число раундов: 64
Тип: Сеть Фейстеля

FNAm2симметричный блочный крипто алгоритм типа «Сеть Фейстеля», разработанный в 2009 году. Алгоритм является продолжением идеи, предложенной создателями TEA, с увеличенным количеством раундов, размером ключа, длинной блока и с добавленной генерацией подключей.

Безопасность

Алгоритм не был исследован криптоаналитиками, но по заявлению автора, он устойчив к большинству статистических тестов и более устойчив к криптоатакам, чем TEA, или XTEA.

Пример кода на языке C

Алгоритм, как и другие варианты алгоритма TEA основан на операциях с 32-х разрядными двоичными целыми числами как unsigned long и int.

void fnam2_crypt(unsigned long &b1,unsigned long &b2,unsigned long &b3,unsigned long &b4); void fnam2_decrypt(unsigned long &b1,unsigned long &b2,unsigned long &b3,unsigned long &b4); //Key initialithation int key[16]; //Num -- then number of 128-bit block in file unsigned long Num;

void fnam2_crypt(unsigned long &b1,unsigned long &b2,unsigned long &b3,unsigned long &b4) { int subkey,i,ip,im;

for(int r=0;r<64;r++) { //Selecting the part of key for a concrete stage i=r%16; if(i==16) {ip=1;im=15;} if(i==1) {ip=2;im=16;} else {ip=i+1;im=i-1;}

//Generating the subkey on the basis of nmber part of a key, //number of the block in a file and number of a round subkey=key[i]*r+(key[im]*Num+key[ip]);

//F - function b1+=(((b2>>16)^((b2<<25)+subkey))+(subkey*((b2<<7)))); b1=b1; r++;

i=r%16; if(i==16) {ip=1;im=15;} if(i==1) {ip=2;im=16;} else {ip=i+1;im=i-1;} subkey=key[i]*r+(key[im]Num+key[ip]); b2+=(((b3>>16)^((b3<<25)+subkey))+(subkey((b3<<7)))); b2=b2; r++;

i=r%16; if(i==16) {ip=1;im=15;} if(i==1) {ip=2;im=16;} else {ip=i+1;im=i-1;} subkey=key[i]*r+(key[im]Num+key[ip]); b3+=(((b4>>16)^((b4<<25)+subkey))+(subkey((b4<<7)))); b3=b3; r++;

i=r%16; if(i==16) {ip=1;im=15;} if(i==1) {ip=2;im=16;} else {ip=i+1;im=i-1;} subkey=key[i]*r+(key[im]Num+key[ip]); b4+=(((b1>>16)^((b1<<25)+subkey))+(subkey((b1<<7)))); b4=b4; } Num++; }

void fnam2_decrypt(unsigned long &b1,unsigned long &b2,unsigned long &b3,unsigned long &b4) { int subkey,i,ip,im;

for(int r=63;r>=0;r--) { i=r%16; if(i==16) {ip=1;im=15;} if(i==1) {ip=2;im=16;} else {ip=i+1;im=i-1;} subkey=key[i]*r+(key[im]Num+key[ip]); b4=~b4; b4-=(((b1>>16)^((b1<<25)+subkey))+(subkey(~(b1<<7)))); r--;

i=r%16; if(i==16) {ip=1;im=15;} if(i==1) {ip=2;im=16;} else {ip=i+1;im=i-1;} subkey=key[i]*r+(key[im]Num+key[ip]); b3=~b3; b3-=(((b4>>16)^((b4<<25)+subkey))+(subkey(~(b4<<7)))); r--;

i=r%16; if(i==16) {ip=1;im=15;} if(i==1) {ip=2;im=16;} else {ip=i+1;im=i-1;} subkey=key[i]*r+(key[im]Num+key[ip]); b2=~b2; b2-=(((b3>>16)^((b3<<25)+subkey))+(subkey(~(b3<<7)))); r--;

i=r%16; if(i==16) {ip=1;im=15;} if(i==1) {ip=2;im=16;} else {ip=i+1;im=i-1;} subkey=key[i]*r+(key[im]Num+key[ip]); b1=~b1; b1-=(((b2>>16)^((b2<<25)+subkey))+(subkey(~(b2<<7)))); } Num++;

}

См. также

Ссылки

Реализация FNAm2 на языке C

Просмотр этого шаблона Симметричные криптосистемы
Поточный шифр A3A5A8DecimMICKEYRC4RabbitSEALSOSEMANUKTriviumVMPC
Сеть Фейстеля ГОСТ 28147-89BlowfishCamelliaCAST-128CAST-256CIPHERUNICORN-ACIPHERUNICORN-ECLEFIACobraDFCDEALDESDESXEnRUPTFEALFNAm2HPCIDEAKASUMIKhufuLOKI97MARSNewDESRaidenRC5RC6RTEASEEDSinopleTEATriple DESTwofishXTEAXXTEA
SP-сеть 3-WAYABCAES (Rijndael) • AkelarreAnubisARIABaseKingBassOmaticCRYPTONDiamond2Grand CruHierocrypt-L1Hierocrypt-3KHAZADLuciferPresentRainbowSAFERSerpentSHARKSQUAREThreefish
Другие FROGNUSHREDOCSHACALSC2000