RTEA

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
RTEA
Розробники Marcos el Ruptor (Sean O'Neil)
Уперше оприлюднений 2007 р
Раундів 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-біт, блок доповнюють байтами зі значенням 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] на даний шифр.

Див. також

[ред. | ред. код]

Примітки

[ред. | ред. код]
  1. Порівняльні результати стійкості симетричних криптоалгоритмов [Архівовано 25 липня 2008 у Wayback Machine.] (англ.)
  2. TEA, XTEA, XXTEA and RTEA. Архів оригіналу за 19 липня 2008. Процитовано 23 квітня 2018.
  3. A related key attack for RTEA.[недоступне посилання з лютого 2019]

Посилання

[ред. | ред. код]
  1. Вихідний код алгоритму RTEA на Open Watcom C і Delphi [Архівовано 23 квітня 2018 у Wayback Machine.]
  2. FAQ по матеріалам конференції fido7.ru.crypt. Безпосередньо до RTEA відноситься наступне передупреждение: "Придумати алгоритм - це 5% роботи. Решта 95% - переконатися (і переконати інших), що його ніхто не зможе зламати."