RTEA

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
RTEA
изображение
Создатель:

Marcos el Ruptor (Sean O'Neil)

Создан:

2007 г.

Опубликован:

2007 г.

Размер ключа:

128 (256) бит

Размер блока:

64 бит

Число раундов:

48 (64)

Тип:

Сеть Фейстеля


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)

Безопасность[править | править код]

На данный момент существует лишь атака на основе связанных ключей (англ. related key attack)[3] на данный шифр.

См. также[править | править код]

TEA

XTEA

XXTEA

Raiden — алгоритм, как и RTEA, основанный на идеях блочного шифра TEA

Примечания[править | править код]

  1. Сравнительные результаты устойчивости симметричных криптоалгоритмов (англ.)
  2. TEA, XTEA, XXTEA and RTEA
  3. A related key attack for RTEA.

Ссылки[править | править код]

  1. Исходный код алгоритма RTEA на Open Watcom C и Delphi
  2. FAQ по материалам конференции fido7.ru.crypt. Непосредственно к RTEA относится следующее передупреждение: "Придумать алгоритм - это 5% работы. Остальные 95% - убедиться (и убедить других), что его никто не сможет сломать."