Skip to content

This project is implementation of the TwoFish encryption algorithm in C#

Notifications You must be signed in to change notification settings

Caxapochek/Twofish

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Twofish

This project is implementation of the TwoFish encryption algorithm in C#

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

Twofish разрабатывался специально с учетом требований и рекомендаций NIST для AES:

  • 128-битный блочный симметричный шифр
  • Длина ключей 128, 192 и 256 бит
  • Отсутствие слабых ключей
  • Эффективная программная (в первую очередь на 32-битных процессорах) и аппаратная реализация
  • Гибкость (возможность использования дополнительных длин ключа, использование в поточном шифровании, хэш-функциях и т. д.)
  • Простота алгоритма - для возможности его эффективного анализа

Twofish - 128-битный блочный шифр, который принимает ключ длины 128, 192, 256 бит. Twofish, являясь симметричным алгоритмом шифрования, то есть использует один ключ как для шифрования данных, так и для их расщифровки. Шифр имеет входное, выходное отбеливания и 16 раундов сети Фейстеля, каждый из которых обладает биективной функцией F, четырех зависящих от ключа S-блоков, фиксированной MDS матрицы, псевдопреобразования Адамара, побитовых поворотов, и тщательно разработанное ключевое расписание.

Отличительными особенностями Twofish являются использование предварительно вычисленных S-блоков, зависящих от ключа, и относительно сложное ключевое расписание.. Одна половина n-битного ключа используется в качестве фактического ключа шифрования, а другая половина n-битного ключа используется для модификации алгоритма шифрования (зависящие от ключа S-блоки). Twofish заимствует некоторые элементы из других конструкций, например, преобразование псевдо-Адамара из семейства шифров SAFER.

Архитектура шифра

В Twofish используется достаточно сложную структуру, которая сильно усложняет его анализ, что является как плюсом так и минусом алгоритма. В алгоритме можно выделить несколько основных элементов участвующих в процессе шифрования:

  • Отбеливание. Метод до первого и после последнего раундов, при котором над частью ключевого материала и входными блоками открытого текста выполняется операция исключающего «или» (XOR).
  • Сеть Фейстеля. Методов построения блочных шифров, состоящий из многократно повторяющихся раундов, на каждом из которых вычисляется функция F от части шифруемого блока, результат которой складывается с другой частью этого же блока.
  • S-боксы. Широко распространённый в блочных шифрах метод нелинейной замены бит. В Twofish S-блоки зависит от ключевого материала, принимают 8 бит на входе и возвращают 8 бит на выходе.
  • MDS(maximum distance separable) - матрицы разделения на максимальное расстояние. В Twofish используется заранее известная MDS матрицу размером 4 на 4 над полем Галуа. Она используется для перемешивания ключа, чтобы гарантировать, что небольшое изменение ключа создаст совершенно новый зашифрованный текст на выходе шифра.
  • Псевдо-преобразование Адамара (PHT). Обратимое преобразование битовых строк, заключающиеся во взаимном сложении по модулю двух выходов g-функций.
  • Ключевое расписание. Метод создания множества различных раундовых ключей из одного ключевого материала, которые будут использованы на каждом раунде, процессе отбеливания и определении S-боксов

Помимо всего вышеперечисленного в алгоритме используются следующие операции работы c информацией, представленной в двоичном коде:

image

Ниже представлена общая схема алгоритма Twofish:

image

About

This project is implementation of the TwoFish encryption algorithm in C#

Resources

Stars

Watchers

Forks

Languages