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] на данный шифр.
См. также
[править | править код]Raiden — алгоритм, как и RTEA, основанный на идеях блочного шифра TEA
Примечания
[править | править код]- ↑ Сравнительные результаты устойчивости симметричных криптоалгоритмов Архивировано 25 июля 2008 года. (англ.)
- ↑ TEA, XTEA, XXTEA and RTEA Архивировано 19 июля 2008 года.
- ↑ A related key attack for RTEA. (недоступная ссылка)
Ссылки
[править | править код]- Исходный код алгоритма RTEA на Open Watcom C и Delphi Архивная копия от 23 апреля 2018 на Wayback Machine
- FAQ по материалам конференции fido7.ru.crypt. Дата обращения: 22 апреля 2010. Архивировано из оригинала 22 августа 2011 года. Непосредственно к RTEA относится следующее передупреждение: "Придумать алгоритм - это 5% работы. Остальные 95% - убедиться (и убедить других), что его никто не сможет сломать."