RTEA
Т.к. это блочный шифроалгоритм, где длина блока 64-бит, а длина данных может быть не кратна 64-битам, значения всех байтов дополняющих блок до кратности в 64-бит устанавливается в 0x01 . РеализацияАлгоритм за один проход обрабатывает два 32-разрядных беззнаковых числа (unsigned long) a и b, то есть 64-битный блок. Длина ключа в 32-разрядных числах — kw, r — раунд. Таким образом, декларация переменных может быть следующей: u32 a, b, c, kw;
u32 key[kw];
long r;
Универсальный код// зашифровка
for (r=0;r<kw*4+32;r++) c=b,b+=a+((b<<6)^(b>>8))+key[r%kw]+r,a=c;
// расшифровка
for (r=kw*4+31;r!=-1;r--) c=a,a=b-=a+((a<<6)^(a>>8))+key[r%kw]+r,b=c;
// зашифровка
for (r=0;r<kw*4+32;r++) a+=b+((b<<6)^(b>>8))+key[r%kw]+r,r++,b+=a+((a<<6)^(a>>8))+key[r%kw]+r;
// расшифровка
for (r=kw*4+31;r!=-1;r--) b-=a+((a<<6)^(a>>8))+key[r%kw]+r,r--,a-=b+((b<<6)^(b>>8))+key[r%kw]+r;
Код для 256 — битного ключаИспользование алгоритма является очень простым и удобным. Так, для ключа, равного 256 битам (kw = 8), код будет следующим:
// зашифровка
for (r=0;r<64;r++)
{
b+=a+((a<<6)^(a>>8))+ (key[r%8]+r);
r++;
a+=b+((b<<6)^(b>>8))+ (key[r%8]+r);
}
// расшифровка
for (r=63;r>=0;r--)
{
a-=b+((b<<6)^(b>>8))+ (key[r%8]+r);
r--;
b-=a+((a<<6)^(a>>8))+ (key[r%8]+r);
}
Для обеспечения уникальности каждого из зашифрованных блоков при идентичности исходного открытого текста может быть применен один из режимов DES (к примеру, CBC, CFB, CTS, CTR) БезопасностьНа данный момент существует лишь атака на основе связанных ключей (англ. related key attack)[3] на данный шифр. См. такжеRaiden — алгоритм, как и RTEA, основанный на идеях блочного шифра TEA Примечания
Ссылки
|