Относительно стойкости модификации новой шифра TEA

Тема в разделе "WASM.CRYPTO", создана пользователем alexanderwm, 2 фев 2009.

  1. alexanderwm

    alexanderwm New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2008
    Сообщения:
    43
    Товарищи криптоаналитики, криптоэксерты и просто криптолюбители! Перед вами модифиация TEA от Tom St Denis, который предложил увеличить размер блока до 128 бит и ключ до 256 бит. Используется забеливание, по-умолчанию предложено использовать 32 цикла, каждый с двумя раундами Сети Фейстеля. Дополнительно реализовано забеливание.

    Выглядит довольно солидно, но достаточно ли в данной конфигурации 32 циклов? В каждом цикле изменяются всего 64 бита блока из 128, но в отличие от TEA используются зависимые от данных операции. Какие константы сдвигов лучше использовать, 4 и 5, или все же 6 и 8 (6 и 9) ?

    Код (Text):
    1. void crypt (u32 * plain, u32 *key)
    2. {
    3.   u32 a, b, c, d, sum, r, t;
    4.  
    5.   sum = 0;
    6.   a = plain[0] + key[0];
    7.   b = plain[1] + key[1];
    8.   c = plain[2] + key[2];
    9.   d = plain[3] + key[3];
    10.  
    11.   for (r = 0; r != 32; r++)
    12.     {
    13.       a = a + (((b << 4) + _lrotl (key[(sum % 4) + 4], b)) ^
    14.            (d + sum) ^ ((b >> 5) + _lrotl (key[sum % 4], b >> 27)));
    15.       sum = sum + 0x9E3779B9;
    16.       c = c + (((d << 4) + _lrotl (key[((sum >> 11) % 4) + 4], d)) ^
    17.            (b + sum) ^ ((d >> 5) + _lrotl (key[(sum >> 11) % 4], d >> 27)));
    18.  
    19.       t = a;
    20.       a = b;
    21.       b = c;
    22.       c = d;
    23.       d = t;
    24.     }
    25.   plain[0] = a ^ key[4];
    26.   plain[1] = b ^ key[5];
    27.   plain[2] = c ^ key[6];
    28.   plain[3] = d ^ key[7];
    29. }