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]
Схема алгоритму RTEA | |
Розробники | Marcos el Ruptor (Sean O'Neil) |
---|---|
Уперше оприлюднений | 2007 р |
Раундів | 48 (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)
Безпека
На даний момент існує лише атака на основі пов'язаних ключів[en][3] на даний шифр.
Див. також
Примітки
Посилання
- Вихідний код алгоритму RTEA на Open Watcom C і Delphi
- FAQ по матеріалам конференції fido7.ru.crypt. Безпосередньо до RTEA відноситься наступне передупреждение: "Придумати алгоритм - це 5% роботи. Решта 95% - переконатися (і переконати інших), що його ніхто не зможе зламати."