Какое шифрование лучше aes или tkip

Введение в RC6.

Алгоритм RC6 (Rivest’s Cipher 6) — симметричный блочный шифр, использующий в качестве своей основы сеть Фестеля, разработанный Рональдом Ривестом в 1998 году.

Для начала разберемся с терминологией:

Что значит симметричный?

Есть два типа людей шифров:

  1. Симметричные (то, что нам нужно)

  2. Ассиметричные (как-нибудь в другой раз, бро)

В симметричном шифровании, для того чтобы зашифровать и расшифровать данные используется один и тот же ключ. Он должен хранится в секрете. Т.е. ни отправитель, ни получатель не должны никому его показывать. Иначе, ваши данные могут перехватить/изменить или еще чего похуже.

В ассиметричном шифровании используется два ключа: открытый и закрытый. Из названий ясно, что открытый ключ может свободно передаваться по каналам связи, а вот закрытый ключ нужно хранить в тайне.

Что значит блочный?

Блочное шифрование это один из видов симметричного шифрования. Называется он так, потому что работает с блоками: группами бит, фиксированной длины.

Чтобы стало яснее, рассмотрим один из методов построения блочных шифров: сеть Фестеля.

Какая, какая сеть?

Фестеля. Это конструкция из ячеек. На вход каждой ячейки поступают данные и ключ. А на выходе каждой из них изменённые данные и изменённый ключ.

Чтобы зашифровать информацию ее разбивают на блоки фиксированной длины. Как правило, длина входного блока является степенью двойки.

Алгоритм шифрования:

  • Каждый из блоков делится на два подблока одинакового размера — левый и правый.

  • Правый подблок скармливается функции .

  • После чего умножается по модулю 2 (операция xor) с левым блоком .

  • Полученный результат в следующем раунде будет играть роль правого подблока.

  • А правый подблок (без изменений) выступит в роли левого подблока.

Раундом в батле криптографии называют один из последовательных шагов(циклов) обработки данных в алгоритме блочного шифрования. ключ на — ом раунде (рассмотрим позже).

Далее операции повторяются столько раз, сколько задано раундов.

Замечание. Расшифровка информации происходит так же, как и шифрование, с тем лишь исключением, что ключи следуют в обратном порядке.

Выглядит это примерно так:

Примеры атак на AES

Существует несколько моделей атак на данный алгоритм. Я бы хотел остановиться на классе атак по сторонним каналам и кратко рассмотреть 2 соответствующих примера из данного класса.

  1. Атака по времени.

    Данная атака основывается на предположении, что операции в устройствах выполняются за разное время в зависимости от входных данных.Таким образом, имея набор точных измерений времени для разных операций, криптоаналитик может восстановить исходные данные.

    Рассматриваемая атака невозможна на алгоритмы, операции которых выполняются за одинаковое число тактов на всех платформах ( битовые операции над фиксированным числом бит ), но так как алгоритм AES используют операции сложения и умножения, не удовлетворяющие этому требованию, он подвержен атаке по времени.

    Возможные методы противодействия такому виду атаки:

    · Сделать время выполнения всех операций одинаковым, после чего атака по времени становится невозможной. Следует отметить, что данный метод реализовать достаточно сложно, так как оптимизации компилятора, обращение к кэшу и другие факторы могут вносить различные временные отклонения.

    · Добавлять ко времени выполнения операции задержки случайной длительности, это значительно затруднит проведение атаки таким способом.

  2. Атака по энергопотреблению.

    Данная атака основывается на измерении энергопотребления устройства с высокой точностью в процессе работы шифратора. Таким образом криптоаналитик может получить информацию об операциях, выполняемых в устройстве и у него появляется возможность извлечь криптографические ключи или другую секретную информацию из устройства, не оказывая на него непосредственного влияния.

    Возможными методами противодействия такому виду атаки являются:

    · Балансировка энергопотребления — при проведении операции задействовать все аппаратные части устройства.

    · Обеспечение независимости флуктуаций энергопотребления и происходящих в системе процессов.

Методы

Освобождает все ресурсы, используемые классом SymmetricAlgorithm.Releases all resources used by the SymmetricAlgorithm class.

(Унаследовано от SymmetricAlgorithm)

Создает криптографический объект, используемый для выполнения симметричного алгоритма.Creates a cryptographic object that is used to perform the symmetric algorithm.

Создает криптографический объект, задающий реализацию AES для выполнения симметричного алгоритма.Creates a cryptographic object that specifies the implementation of AES to use to perform the symmetric algorithm.

Создает объект-дешифратор для алгоритма симметричного шифрования с текущим свойством и вектором инициализации ().Creates a symmetric decryptor object with the current property and initialization vector ().

(Унаследовано от SymmetricAlgorithm)

При переопределении в производном классе создает объект-дешифратор для алгоритма симметричного шифрования с заданным свойством и вектором инициализации ().When overridden in a derived class, creates a symmetric decryptor object with the specified property and initialization vector ().

(Унаследовано от SymmetricAlgorithm)

Создает объект-шифратор для алгоритма симметричного шифрования с текущим свойством и вектором инициализации ().Creates a symmetric encryptor object with the current property and initialization vector ().

(Унаследовано от SymmetricAlgorithm)

При переопределении в производном классе создает объект-шифратор для алгоритма симметричного шифрования с заданным свойством и вектором инициализации ().When overridden in a derived class, creates a symmetric encryptor object with the specified property and initialization vector ().

(Унаследовано от SymmetricAlgorithm)

Освобождает все ресурсы, используемые текущим экземпляром класса SymmetricAlgorithm.Releases all resources used by the current instance of the SymmetricAlgorithm class.

(Унаследовано от SymmetricAlgorithm)

Освобождает неуправляемые ресурсы, используемые объектом SymmetricAlgorithm, а при необходимости освобождает также управляемые ресурсы.Releases the unmanaged resources used by the SymmetricAlgorithm and optionally releases the managed resources.

(Унаследовано от SymmetricAlgorithm)

Определяет, равен ли указанный объект текущему объекту.Determines whether the specified object is equal to the current object.

(Унаследовано от Object)

При переопределении в производном классе генерирует случайный вектор инициализации (), используемый для алгоритма.When overridden in a derived class, generates a random initialization vector () to use for the algorithm.

(Унаследовано от SymmetricAlgorithm)

При переопределении в производном классе генерирует случайный ключ (), используемый для алгоритма.When overridden in a derived class, generates a random key () to use for the algorithm.

(Унаследовано от SymmetricAlgorithm)

Служит хэш-функцией по умолчанию.Serves as the default hash function.

(Унаследовано от Object)

Возвращает объект Type для текущего экземпляра.Gets the Type of the current instance.

(Унаследовано от Object)

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

(Унаследовано от Object)

Возвращает строку, представляющую текущий объект.Returns a string that represents the current object.

(Унаследовано от Object)

Определяет, является ли заданный размер ключа допустимым для текущего алгоритма.Determines whether the specified key size is valid for the current algorithm.

(Унаследовано от SymmetricAlgorithm)

Определения и вспомогательные процедуры

Определения
Block последовательность бит, из которых состоит input, output, State и Round Key. Также под Block можно понимать последовательность байт
Cipher Key секретный, криптографический ключ, который используется Key Expansion процедурой, чтобы произвести набор ключей для раундов(Round Keys); может быть представлен как прямоугольный массив байтов, имеющий четыре строки и Nk колонок.
Ciphertext выходные данные алгоритма шифрования
Key Expansion процедура используемая для генерации Round Keys из Cipher Key
Round Key Round Keys получаются из Cipher Key используя процедуру Key Expansion. Они применяются к State при шифровании и расшифровании
State промежуточный результат шифрования, который может быть представлен как прямоугольный массив байтов имеющий 4 строки и Nb колонок
S-box нелинейная таблица замен, использующаяся в нескольких трансформациях замены байт и в процедуре Key Expansion для взаимнооднозначной замены значения байта
Nb число столбцов(32-ух битных слов), составляющих State. Для, AES Nb = 4
Nk число 32-ух битных слов, составляющих шифроключ. Для AES, Nk = 4,6, или 8
Nr число раундов, которое является функцией Nk и Nb. Для AES, Nr = 10, 12, 14
Rcon[] массив, который состоит из битов 32-х разрядного слова и является постоянным для данного раунда
Вспомогательные процедуры
AddRoundKey()  трансформация при шифровании и обратном шифровании, при которой Round Key XOR’ится c State. Длина RoundKey равна размеру State(те, если Nb = 4, то длина RoundKey равна 128 бит или 16 байт)
InvMixColumns() трансформация при расшифровании которая является обратной по отношению к MixColumns()
InvShiftRows() трансформация при расшифровании которая является обратной по отношению к ShiftRows()
InvSubBytes() трансформация при расшифровании которая является обратной по отношению к SubBytes()
MixColumns() трансформация при шифровании которая берет все столбцы State и смешивает их данные (независимо друг от друга), чтобы получить новые столбцы
RotWord() функция, использующаяся в процедуре Key Expansion, которая берет 4-х байтное слово и производит над ним циклическую перестановку
ShiftRows() трансформации при шифровании, которые обрабатывают State, циклически смещая последние три строки State на разные величины
SubBytes() трансформации при шифровании которые обрабатывают State используя нелинейную таблицу замещения байтов(S-box), применяя её независимо к каждому байту State
SubWord() функция, используемая в процедуре Key Expansion, которая берет на входе четырёх-байтное слово и применяя S-box к каждому из четырёх байтов выдаёт выходное слово

Расширение ключа

AES использует ключи шифрования трех фиксированных размеров: 128, 192, и 256 бит. В зависимости от размера ключа, конкретный вариант алгоритма AES может обозначаться как AES-128, AES-192 и AES-256 соответственно .
Задача процедуры расширения ключа состоит в формировании нужного количество слов расширенного ключа для их использования в операции AddRoundKey. Как было сказано выше, под «словом» здесь понимается 4-байтный фрагмент расширенного ключа, один из которых используется в первичном наложении материала ключа и по одному – в каждом раунде алгоритма. Таким образом, в процессе расширения ключа формируется 4∗(R+1){\displaystyle 4*(R+1) \,\!} слов.
Расширение ключа выполняется в два этапа, на первом из которых производится инициализация слов расширенного ключа (обозначаемых как Wi{\displaystyle W_i \,\!}): первые Nk{\displaystyle N_k \,\!} (Nk{\displaystyle N_k \,\!} – размер исходного ключа шифрования K{\displaystyle K\,\!} в словах, т.е. 4, 6 или 8) слов Wi{\displaystyle W_i \,\!} (т.е. i=…Nk−1{\displaystyle i = 0 … N_{k-1} \,\!}) формируются их последовательным заполнением байтами ключа (см. рис. 7).


Рис. 7 Инициализация расширенного ключа

Последующие слова Wi{\displaystyle W_i \,\!} формируются следующей последовательностью операций для каждого i=Nk…4∗(R+1)−1{\displaystyle i = N_k … 4*(R+1)-1 \,\!}:Шаг 1. Инициализируется временная переменная T{\displaystyle T\,\!} :
T=Wi−1{\displaystyle T=W_{i-1} \,\!}.
Шаг 2. Данная переменная модифицируется следующим образом:a. если i{\displaystyle i\,\!} кратно Nk{\displaystyle N_k \,\!}, то:T=SubWord(RotWord(T))ÅRCëiNkû{\displaystyle T = SubWord(RotWord(T)) Å RCëi/Nkû \,\!};
константы RCn{\displaystyle RC_n \,\!} представляют собой слова, в которых все байты, кроме первого являются нулевыми, а первый байт имеет значение 2n−1mod256{\displaystyle 2^{n-1} mod 256 \,\!};
b. если Nk=8{\displaystyle N_k = 8 \,\!} и imodNk=4{\displaystyle i mod N_k = 4 \,\!}, то:
T=SubWord(T){\displaystyle T = SubWord(T) \,\!};
c. в остальных случаях модификация переменной T{\displaystyle T\,\!} не выполняется.
Шаг 3. Формируется i{\displaystyle i\,\!}-е слово расширенного ключа:
Wi=Wi−NkÅT{\displaystyle W_i = W_{i-N_k} Å T \,\!}.
Операция SubWord выполняет над каждым байтом входного значения табличную замену, которая была описана выше – см. операцию SubBytes.
Операция RotWord побайтно вращает входное слово на 1 байт влево.
Как видно, процедура расширения ключа является достаточно простой по сравнению со многими другими современными алгоритмами шифрования. Процедура расширения ключа имеет также несомненное достоинство в том, что расширение ключа может быть выполнено «на лету» (on-the-fly), т.е. параллельно с зашифрованием данных.

AES или TKIP: что лучше

AES и TKIP это методы шифрования, которые входят в состав стандарта безопасности WPA2. TKIP (протокол целостности временного ключа) является более старым. Использует для шифрования данных 128-битный ключ, что равносильно 500 миллиардам возможных вариаций. Несмотря на кажущуюся внушительность цифры, это не самый лучший показатель. К тому же есть некоторые уязвимости, которые теоретически могут позволить хакерам расшифровать ключ при перехвате достаочного количества трафика.

AES расшифровывается как симметричный алгоритм блочного шифрования. Он представляет из себя 128-битный, 192-битный или 256-битный блочный шифр, который не имеет ни одной из тех уязвимостей, которые есть у TKIP. Даже 128-битный шифр обеспечивает высокую надежность, так как для его расшифровки требуются значительные вычислительные мощности и может уйти несколько сотен лет для расшифровки.

Что быстрее работает

TKIP может замедлить работу Wi-Fi сети, поэтому большинство современных маршрутизаторов используют WPA2-AES. Например, при шифровании WPA-TKIP, максимальная скорость не будет превышать 54 Мбит/с. В то время, как стандарт 802.11ac с шифрованием WPA2-AES предполагает теоретически максимальную скорость до 3,46 Гбит/с.

Так что выбор очевиден. AES обеспечивает более высокую скорость и лучшую безопасность, которой доверяют крупнейшие мировые организации в своих Wi-Fi сетях.

Приписка PSK (Personal Security Key) к стандарту расшифровывается как персональный ключ безопасности и рекомендуется для использования в домашних беспроводных сетях.

Встречается также ESK (Enterprise Security Key) — корпоративный меняющийся ключ. Если в случае WPA2-PSK для всех подключенных устройств будет один пароль, то при использовании WPA2-ESK для каждого устройства выдается свой ключ, который обычно еще и автоматически меняется через какое-то время. Подключение при этом не прерывается, а за раздачу персональных ключей отвечает отдельный сервер авторизации — RADIUS.

Можно ли восстановить расширенный ключ, зная какой-либо из раундовых?

Достаточно интересный вопрос, возникший у меня при написании этой статьи.

Для ответа на него давайте рассмотрим расширенный ключ как ряд 32-х битных слов: w, w1, w2, w3, …, w40, w41, w42, w43, где w, w1, w2, w3 — 128-битный ключ AES, а w40, w41, w42, w43 — последний раундовый ключ. Процесс расширения ключа определяется как wi = wi-4 xor Fi(wi-1), где Fi — это рассмотренная выше функция, определяемая процедурой KeyExpansion. Начиная с w, w1, w2, w3 этот процесс позволяет вычислить остальную часть расширенного ключа.

Теперь давайте предположим, что злоумышленнику известен последний раундовый ключ шифрования AES-128. Он может переписать процесс расширения ключа следующим образом: wj = wj+4 xor Fj+4(wj+3). Это получается простой заменой j = i — 4 и переупорядочиванием. Таким образом, злоумышленник, имея в распоряжении w40, w41, w42, w43 ,cможет восстановить все слова вплоть до w.

Эта проблема становится не столь критичной в случае с AES-192 и AES-256. Действительно, если атакующему удается получить один раундовый ключ из 256-битного ключа AES, это уменьшает количество возможных вариантов AES ключей с 2256 до 2128, в таком случае восстановить полный ключ все еще невозможно с вычислительной точки зрения.

Что по атакам?

Для варианта алгоритма RC6-128/20/b никаких атак не выявлено. Атаки слева были обнаружены только для варианта алгоритма с числом раундов

Полагается, что лучший вариант атаки на RС6 полный перебор байтового ключа шифрования. Для него потребуется операций. Однако, было замечено, что за счет значительной памяти и предварительного вычисления можно организовать атаку встреча посередине, которая потребует операций. Что тоже очень много.

Для таких типов атак, как  дифференциальный и линейный криптоанализ, приведем следующую таблицу:

Здесь приведены наиболее выгодные цифры для данных атак. Цифры в прямоугольнике обозначают, что требования к данным для успешной атаки превышают от общего числа возможных открытых текстов.

Таким образом, приходим к выводу, что RC6 с 20 раундами защищен от дифференциальных и линейных криптоаналитических атак.

Неужели алгоритм шифрования AES-256 не может быть взломан?

Еще не было ни одного случая взлома AES-256, но не потому что не было предпринято никаких попыток. Первая атака «biclique» была совершена в 2011 году, против шифрования AES-128, которая провалилась. Атаке потребовалось бы более миллиарда лет, чтобы проложить себе путь через 126-битный ключ, не говоря уже о AES-128.

256-битное шифрование не оставляет никаких шансов для злоумышленников. Для того, чтобы убедиться в этом, приведем пример. Допустим, один миллиард суперкомпьютеров со всего мира решили объединить свои усилия для уничтожения алгоритма шифрования AES. Также предположим, что они могут «подбирать» 250 ключей в секунду, что очень серьезно, так как это сделает их способными перебирать примерно один квадриллион ключей в секунду. В годах это около 31 557 600.

Это означает, что с миллиардом суперкомпьютеров, вычисляющих в нон-стопе в течение года, они смогут проверить только около 275 ключей. Другими словами потребуется 234 года, чтобы было обработано 0,1% от всех возможных вариантов. Поэтому военные могут быть уверены, что никто не станет красть их данные в ближайшее время. Сколько будет существовать такая защита, неизвестно. Но когда AES-шифрование устареет, то, возможно станет доступна и для различных организаций.

Является ли шифрование военного уровня необходимым?

Конечно, существуют и другие алгоритмы шифрования, которые также отлично выполняют свою работу по защите личных данных. Но в отличии от AES они не гарантируют на 100% защиту от атак. Поэтому не рекомендуется применять ничего, кроме AES шифрования для безопасности своих данных.

Что такое AES

AES или Advanced Encryption Standard – так назывался конкурс, по результатам которого в 1997 году должны были выбрать преемника устаревшего к тому времени стандарта DES. В результате победил стандарт симметричного шифрования Rijndael, который со временем стали называть по названию конкурса, AES.

Проблема DES была в малой длине ключей (56 бит), что при стремительном развитии технологий, в теории позволяло подобрать его брутфорсом (грубым перебором).


Что такое AES

Как работает алгоритм

Метод безопасности применяемый Advanced Encryprion standard AES основан на поочередных подстановках блоков по 16 байт. Операции перестановок могут повторяться неоднократно – они называются “round”. У каждого раунда есть уникальные ключи, которые рассчитываются из ключей шифрования. Это делает алгоритм более стойким по сравнению с другими традиционными потоковыми алгоритмами.

Каким бывает шифрование

Оно бывает двух видов – симметричное и ассимметричное. В первом случае, ключ для шифровки сообщения используется тот же, что и для дешифровки.

При ассиметричным шифровании создается пара ключей:

  1. Открытый: передается серверу для расшифровки сообщения;
  2. и Закрытый: остается на устройстве пользователя. Доступ к зашифрованным закрытым ключом данным может быть получен с соответствующим ему открытым ключом.


Симметричное и асимметричное шифрование

Область применения

AES повсеместно распространенный стандарт, используется многими корпорациями для передачи конфиденциальной информации.

Алгоритм утвержден правительством США и используется, в том числе, для нужд армии, а также:

  • В Wi-Fi и Bluetooth сетях;
  • В мобильных сетях;
  • На iOS, Android;
  • Сайты, программы и серверы, хранящие пароли;
  • Банковские продукты, банкоматы (хотя там AES не настолько популярно, как другие более сложные и ресурсозатратные алгоритмы); ПО и игры;
  • В средствах криптографической защиты данных;
  • В архиваторах (Winrar, winzip);
  • В мессенджерах (whatsapp).

Достоинства

  • Безопасный;
  • Бесплатный;
  • Оптимизированный. Алгоритм эффективно использует вычислительные мощности, поэтому не требователен к оперативной памяти устройства и «железу»;
  • Мультиплатформенный. Реализовывается как на аппаратной части, так и на программной.

Использование в VPN

Практически все VPN сервисы используют AES шифрование с длиной ключа 128 или 256 бит. При этом в обеих случаях соединение с виртуальным сервером будет надежно защищено.

Как взломать алгоритм

Взломать алгоритм, подобрав комбинацию брутфорсом невозможно, так как это займет бесконечно много времени. Однако взламывать 128 битный ключ и не требуется. Все зависит от того, какой протокол используется для передачи. Используя PPTP, при подключении к VPN, достаточно взламать Хэши MD4 длиной 56 байт, что, с использованием облачных сервисов по подбору паролей займет не более суток.

Аппаратное шифрование

Еще в 2008 году Intel добавили поддержку аппаратного шифрования данных AES 256 в свои процессоры x86 архитектуры, что позволило повысить производительность программ, использующих этот алгоритм. Это говорит о популярности данного алгоритма блочного шифрования.

Стойкость шифрования AES 256

Размер ключа Количество комбинаций Время взлома
1 бит 2 Менее сек
16 бит 65536 Пара сек
56 бит (DES) 7*10 в 16 степени 400 сек
128 бит 3.4*10 в 38 степени 1*10 в 18 степени лет
256 бит 1.1*10 в 77 степени 3.3*10 в 56 степени лет

При этом разница между 128 и 256 битным шифрованием не принципиальна. Если кому нибудь удастся взломать 128 битный ключ, 256 битный взломать не составит никаких проблем. С практической точки зрения, 256 битное шифрование надежно ровно настолько же, как и 128 битное, поэтому его применение это маркетинговый ход.

Вывод

Алгоритм AES — признанный лидер шифрования данных. За все время его существования взломать его никому не удалось. Однако это не значит, что никто не смог получить доступ к информации. Используя небезопасные протоколы передачи данных, можно получить доступ к паролям и информации, зашифрованной даже 128 битными ключами.

Теоретические сведения

В ходе исследования способов связки аппаратного шифрования на FPGA и пользовательских программ мы на некоторое время застряли в изучении матчасти и думаем, что имеет смысл изложить здесь некоторые основные моменты.

Ядро Linux

В ядре Linux реализовано множество криптографических алгоритмов: и симметричные шифры, и хеши, и режимы работы блочных шифров. Всё это может использоваться самим ядром: например, для шифрования дисков (dm-crypt) или работы VPN (IPsec). Обеспечением унифицированного доступа к криптографическим функциям занимается Kernel CryptoAPI, котороый позволяет драйверам регистрировать аппаратные реализации соответствующих алгоритмов.

Пользовательские программы также могут обращаться к CryptoAPI. Одним из интерфейсов, предоставляющих такую возможность, является сокет address family и библиотека-обёртка над ним libkcapi. Основной конкурент — модуль ядра (доступ к CryptoAPI через символьное устройство ).

По словам авторов , их решение намного производительнее, чем (см. сравнение).

На схеме показано CryptoAPI, где зарегистрированы две реализации AES-128: программная и аппаратная, обращение к которой происходит через соответствующий драйвер.

Осуществить запрос к CryptoAPI могут, к примеру, , а также модули и . Оба дают пользовательским программам возможность обращаться к криптографической подсистеме ядра, первый — через семейство адресов, второй — через символьное устройство.

Как правило, это выполняется прозрачно: CryptoAPI само, получая запрос, выбирает, какой реализацией пользоваться, однако при желании можно узнать некоторые детали его работы через файл . В нём заданы, в частности, такие поля:

  • — название реализуемого алгоритма.
  • — уникальное название отдельной реализации алгоритма. Те из них, которые оканчиваются на , обычно являются стандартными программными реализациями в ядре.
  • — приоритет. Если у ядра есть несколько реализаций одного и того же алгоритма, оно выберет реализацию с наивысшим приоритетом. Каждый драйвер сам назначает произвольный приоритет при регистрации алгоритма. Выбирается реализация, у которой значение приоритета наибольшее.

Userspace

CryptoAPI, несмотря на то, что уже является высокоуровневой абстракцией, имеет ещё одну обёртку: в userspace мало кто обращается к нему напрямую и большинство программ предпочитает использование библиотек, к примеру, и из проекта . Ими пользуются, например, , и, вполне ожидаемо, . Эти библиотеки поддерживают engines, — то, что обычно называется плагинами, механизмы добавления новых реализаций алгоритмов криптографии.

Разработчиками уже написаны engines для шифрования в ядре через и . Поэтому множество программ автоматически получают доступ к аппаратной реализации криптоалгоритма, если она зарегистрирована в CryptoAPI.

На схеме изображены несколько программ, которые пользуются криптографическими функциями, предоставленными в библиотеках и , способных обратиться к CryptoAPI через или . К примеру, в для того и другого заданы и соответственно.

Архиваторы

Любой файл, сжатый для уменьшения объема и уменьшения степени влияния на жесткий диск пользователя, был, скорее всего, обработан программой, использующей AES-шифрование. Это особенно актуально для архивов таких программ, как WinZip, 7 Zip и RAR.

Инструменты шифрования дисков/разделов

Если вы разбираетесь в криптографии и стремитесь к тому, чтобы максимально эффективно защитить ваши личные данные, то наверняка используете программы для шифрования дисков или разделов, которые используют алгоритм AES. Программы вроде BitLocker, FileVault и CipherShed используют AES, чтобы обеспечить и защитить приватность ваших данных.

Немного про RC5

RC5 блочный шифр, разработанный Рональдом Ривестом в 1994 году. Одно из отличий от RC6 это то, что он имеет два регистра на входе и на выходе вместо четырех. Второе отсутствие операции умножения в процессе вычислений.

Рональд Ривест писал, что при создании этого шифра он придерживался нескольких правил:

RC5 должен быть блочным шифром. Т.е. открытый и зашифрованный текст представляют собой битовые последовательности (блоки) и секретный ключ должен использоваться как в процессе шифрования, так и в процессе расшифровки.
RC5 должен использовать только примитивные операции, реализованные на большинстве процессоров.
RC5 должен быть адаптирован к процессорам с разной длиной машинного слова. Например, когда станут доступны 64-битные процессоры, RC5 сможет на них работать.
RC5 должен быть быстрым. Т.е. основными вычислительными операциями должны быть операторы, которые одновременно работают с целыми словами.
RC5 должен иметь переменное количество раундов. Чтобы пользователь мог выбирать между более высокой скоростью вычислений и более высокой безопасностью.
RC5 должен иметь ключ переменной длины. Чтобы пользователь мог выбрать подходящий для него уровень безопасности.
RC5 должен быть простым в реализации и иметь невысокие требования к памяти

Последнее, но немаловажное RC5 должен обеспечивать высокую безопасность при выборе подходящих значений параметров.

Процесс подготовки ключа у RC5 точно такой же, как и у RC6. А вот сам алгоритм шифрования и расшифровки проще. Cхема шифрования RC5:

А псевдокод буквально состоит из пяти строчек:

Здесь стоит отметить, что за один раунд в RC5 одновременно обновляются обе переменные.

KeyExpansion()

AES алгоритм, используя процедуру KeyExpansion() и подавая в неё Cipher Key, K, получает ключи для всех раундов. Всего она получает Nb*(Nr + 1) слов: изначально для алгоритма требуется набор из Nb слов, и каждому из Nr раундов требуется Nb ключевых набора данных. Полученный массив ключей для раундов обозначается как wi{\displaystyle w \left}, ≤i<Nb∗(Nr+1){\displaystyle 0 \le i < Nb*(Nr + 1) }. Алгоритм KeyExpansion() показан в псевдо коде ниже.

Функция SubWord() берет четырёхбайтовое входное слово и применяет S-box к каждому из четырёх байтов то, что получилось подается на выход. На вход RotWord() подается слово a,a1,a2,a3{\displaystyle } которое она циклически переставляет и возвращает a1,a2,a3,a{\displaystyle }. Массив слов, слов постоянный для данного раунда, Rconi{\displaystyle Rcon\left}, содержит значения xi−1,00,00,00{\displaystyle }, где x = {02}, а xi−1{\displaystyle x^{i-1} } является степенью x{\displaystyle x} в GF(28){\displaystyle GF \left( 2^8 \right) } (i{\displaystyle i} начинается с 1).

Первые Nk{\displaystyle Nk} слов расширенного ключа заполненны Cipher Key. В каждое последующее слово, wi{\displaystyle w}, кладётся значение полученное при операции XOR wi−1{\displaystyle w} и wi−Nk{\displaystyle w\left}, те XOR’а предыдущего и на Nk позиций раньше слов. Для слов, позиция которых кратна Nk, перед XOR’ом к w применяется трасформация, за которой следует XOR с константой раунда Rcon. Указанная выше трансформация состоит из циклического сдвига байтов в слове(RotWord()), за которой следует процедура SubWord() — то же самое, что и SubBytes(), только входные и входные данные будут размером в слово.

Важно заметить, что процедура KeyExpansion() для 256 битного Cipher Key немного отличается от тех, которые применяются для 128 и 192 битных шифроключей. Если Nk=8{\displaystyle Nk = 8} и i−4{\displaystyle i — 4} кратно Nk{\displaystyle Nk}, то SubWord() применяется к wi−1{\displaystyle w} до XOR’а.

Оцените статью
Рейтинг автора
5
Материал подготовил
Андрей Измаилов
Наш эксперт
Написано статей
116
Добавить комментарий