Q (шифр)

Материал из testwiki
Перейти к навигации Перейти к поиску

Шаблон:Стиль статьи Q — блочный шифр с прямой структурой SP-сети c S-блоками. Q-шифр берет происхождение от шифров Rijndael и Serpent. Впервые он был представлен Лесли МакБрайд (Шаблон:Lang-en) на конкурсе, проводившимся проектом NESSIE. Алгоритм использует 128-битный блок данных в виде байтового массива 4×4, над которым и проводятся операции[1].

Теоретически алгоритм не имеет ограничения на размер используемых ключей шифрования. В рамках конкурса NESSIE рассматривалось только три фиксированных размера: 128, 192 и 256 битов[2].

Алгоритм подвержен как дифференциальному, так и линейному криптоанализу[3].

Общие сведения

Q использует три различных s-блока. Первый 8×8 s-блок, называющийся S, и два блока 4×4, A и B (A взят из алгоритма Serpent, B — «Serpent-подобный»). Каждая стадия подстановки использует многократные копии s-блоков параллельно для обработки 128-битного входа (16 копий S и 32 копии A и B).[1]

В шифре используются три линейные трансформации. Перестановка P работает на 128-битном блоке, представленном в виде четырёх 32-битных слов W0,W1,W2,W3 следующим образом: W0 не изменяется; W1,W2,W3 поворачиваются на один байт, два байта и три байта соответственно. Другие две линейные трансформации назовём PreSerpent() и PostSerpent(), так как они применяются до и после блоков A и B. PreSerpent() отправляет биты W0 в первые биты 32-битных идентичных копий s-блока 4×4, биты W1 — во вторые биты s-блоков и т. д. PostSerpent() — просто инверсия PreSerpent().[1]

Алгоритм

Q-шифр может иметь различные размеры ключей. Рассмотрим шифр с 128-битным ключом и с 8 полными раундами. Для усиленной защиты применяются 9 раундов. Алгоритм «key-scheduling algorithm» или «KSA» генерирует 12 128-битных подключ KW1,KA,KB,K0,K1,...,K7,KW2. Каждый раунд r (0r7) состоит из:

  1. KA — первое наложение ключа KA. Выполняется побитовое исключающее «или» (XOR), применяющееся к каждому биту обрабатываемого блока и соответствующему биту расширенного ключа.
  2. Подстановка S (Substitution(S)) — взята из алгоритма Rijndael.
  3. KB — второе наложение ключа KB.
  4. PreSerpent(),A,PostSerpent() — операция унаследована от алгоритма Serpent.
  5. Kr — третье наложение ключа Kr. Подключ Kr уникален для каждого раунда.
  6. Перестановка P.
  7. PreSerpent(),B,PostSerpent().

Полный алгоритм состоит из KW1,Round0,...,Round7,KA,Substitution(S),KB,KW2.

Расшифровывание происходит аналогично шифрованию с небольшими изменениями[2]:

  1. Меняются местами операции 5 и 6 в каждом раунде.
  2. Для 2, 4 и 6 — используются инверсные операции.
  3. Ключи Kr используются в обратной последовательности.

Криптоанализ

В работе[1] показано, что шифр неустойчив к линейному криптоанализу, с вероятностью 98,4 % 128-битный ключ будет восстановлен из 297 известных пар открытого текста — шифротекста.

Примечания

Шаблон:Примечания

Ссылки

Шаблон:Изолированная статья