Русская Википедия:RTEA
Шаблон:Карточка блочного шифра
RTEA (от Ruptor’s TEA или Repaired TEA) — в криптографии симметричный блочный криптоалгоритм типа «Сеть Фейстеля», разработанный Marcos el Ruptor, расширение шифроалгоритма TEA. Исправлены некоторые уязвимости в алгоритме. Как и другие варианты алгоритма TEA, операции основаны на работе с 32-битными числами. Алгоритм значительно проще и производительнее XTEA, при этом, по заявлению авторов и согласно проведенным разработчиками статистическим тестам, более устойчив к криптоанализу[1]. Чтобы противостоять всем адаптивным и неадаптивным атакам, алгоритму необходимо число раундов, равное 32+w*4, где w — количество 32-битных целых чисел в ключе, то есть 4 — для 128 битного, и 8 для 256-битного ключа. Для ключа размером 128 бит выполняется 48 раундов, для ключа размером 256 бит — 64 раунда алгоритма.[2]
Т.к. это блочный шифроалгоритм, где длина блока 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)
Безопасность
На данный момент существует лишь атака на основе связанных ключей (Шаблон:Lang-en)[3] на данный шифр.
См. также
Raiden — алгоритм, как и RTEA, основанный на идеях блочного шифра TEA
Примечания
Ссылки
- Исходный код алгоритма RTEA на Open Watcom C и Delphi Шаблон:Wayback
- Шаблон:Cite web Непосредственно к RTEA относится следующее передупреждение: "Придумать алгоритм - это 5% работы. Остальные 95% - убедиться (и убедить других), что его никто не сможет сломать."
Шаблон:Симметричные криптоалгоритмы