FNAm2

Поделись знанием:
Перейти к: навигация, поиск
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"

Ссылки

[cartman-cipher.narod.ru/mirror/fnam2.zip Реализация FNAm2 на языке C]

Отрывок, характеризующий FNAm2

Самый хитрый человек не мог бы искуснее вкрасться в доверие княжны, вызывая ее воспоминания лучшего времени молодости и выказывая к ним сочувствие. А между тем вся хитрость Пьера состояла только в том, что он искал своего удовольствия, вызывая в озлобленной, cyхой и по своему гордой княжне человеческие чувства.
– Да, он очень, очень добрый человек, когда находится под влиянием не дурных людей, а таких людей, как я, – говорила себе княжна.
Перемена, происшедшая в Пьере, была замечена по своему и его слугами – Терентием и Васькой. Они находили, что он много попростел. Терентий часто, раздев барина, с сапогами и платьем в руке, пожелав покойной ночи, медлил уходить, ожидая, не вступит ли барин в разговор. И большею частью Пьер останавливал Терентия, замечая, что ему хочется поговорить.
– Ну, так скажи мне… да как же вы доставали себе еду? – спрашивал он. И Терентий начинал рассказ о московском разорении, о покойном графе и долго стоял с платьем, рассказывая, а иногда слушая рассказы Пьера, и, с приятным сознанием близости к себе барина и дружелюбия к нему, уходил в переднюю.
Доктор, лечивший Пьера и навещавший его каждый день, несмотря на то, что, по обязанности докторов, считал своим долгом иметь вид человека, каждая минута которого драгоценна для страждущего человечества, засиживался часами у Пьера, рассказывая свои любимые истории и наблюдения над нравами больных вообще и в особенности дам.
– Да, вот с таким человеком поговорить приятно, не то, что у нас, в провинции, – говорил он.
В Орле жило несколько пленных французских офицеров, и доктор привел одного из них, молодого итальянского офицера.
Офицер этот стал ходить к Пьеру, и княжна смеялась над теми нежными чувствами, которые выражал итальянец к Пьеру.
Итальянец, видимо, был счастлив только тогда, когда он мог приходить к Пьеру и разговаривать и рассказывать ему про свое прошедшее, про свою домашнюю жизнь, про свою любовь и изливать ему свое негодование на французов, и в особенности на Наполеона.
– Ежели все русские хотя немного похожи на вас, – говорил он Пьеру, – c'est un sacrilege que de faire la guerre a un peuple comme le votre. [Это кощунство – воевать с таким народом, как вы.] Вы, пострадавшие столько от французов, вы даже злобы не имеете против них.