Метилналтрексона бромид
- 1 year ago
- 0
- 0
EnRUPT — в криптографии симметричный блочный криптоалгоритм и криптопримитив, разработанный Шоном О’Нилом ( англ. Sean O’Neil ).
Особенностью алгоритма является его чрезвычайная гибкость. По сути дела, алгоритм — это криптопримитив , позволяющий реализовать блочный шифр с произвольным размером блока — от 64 бит и длиной ключа от 32 бит . При этом число раундов будет равно 4 × (2 × xw + kw), где xw — размер блока в словах, kw — длина ключа в словах. Размер слова может быть 32 или 64 бита . При слове 32 бита число раундов равно 8 × (xb / 32) + 4 × (kb / 32), где xb — размер блока в битах, kb — длина ключа в битах. Для шифра со 128-битным блоком и 512-битным ключом применяется 96 раундов, а при 256-битном ключе — 64 раунда.
Поскольку EnRUPT является, де-факто, криптопримитивом, он может быть использован в режиме быстрого симметричного блочного шифра , поточного шифра (irreversible EnRUPT, irRUPT), хеш-функции (mdRUPT), MAC, ГСЧ , ГПСЧ .
Как и алгоритм TEA , EnRUPT очень прост в реализации. Фактически, шифр является упрощенным, усиленным и ускоренным вариантом алгоритма XXTEA . Ниже указан простой и гибкий пример реализации алгоритма в режиме 32-разрядного блочного шифра.
#define er1(k) (rotr(2*x[(r-1)%xw]^x[(r+1)%xw]^k^r,8)*9^k)
enRUPT (u32 *x, const u32 xw, u32 *key, const u32 kw)
{
u32 r, s=4, n=s*(2*xw+kw);
for (r=1; r<=n; r++) x[r%xw] ^= er1(key[r%kw]);
}
unRUPT (u32 *x, const u32 xw, u32 *key, const u32 kw)
{
u32 r, s=4, n=s*(2*xw+kw);
for (r=n; r ; r--) x[r%xw] ^= er1(key[r%kw]);
}
Где x — блок из 32-разрядных беззнаковых чисел, key — ключ, xw — длина сообщения, kw — длина ключа.
Существует атака на 32-разрядный вариант блочного шифра EnRUPT, при условии, что криптоаналитик имеет возможность модифицировать ключ и получить большое количество пар открытого и зашифрованного текста, для 256-битного ключа и 128-битного блока необходимо около 2 64 выбранного текста. Данная атака применима и для шифра XXTEA .
На конкурсе хеш-функция на базе алгоритма EnRUPT была определена как имеющая коллизии при всех семи заявленных параметрах безопасности. Сложность нахождения коллизии составила от 2 36 до 2 40 операций для разных вариантов алгоритма, что позволило продемонстрировать практическую коллизию для варианта EnRUPT-256.
По утверждению авторов алгоритма EnRUPT, была проведена успешная атака ( англ. linearization attack ) не хеш-функции в целом и не её структуры, а только заявленного варианта с конкретным параметром s = 4. Увеличение параметра s до 8 должно привести к усилению диффузии и обеспечить более высокий уровень безопасности, за счет снижения скорости вычисления функции в два раза. Однако, независимых исследований данного варианта алгоритма не производилось.
В рамках того же конкурса была опубликована работа , где показана возможность нахождения прообраза для варианта EnRUPT-512. Данная атака требует около 2 480 операций, что лишь немногим лучше 2 512 для полного перебора, но все же показывает слабость структуры алгоритма.