Aes шифрования тип: Advanced encryption standard — Википедия – Advanced Encryption Standard — Wikipedia

Содержание

Объяснение шифрования AES и RSA

Вот как работает шифрование с использованием Boxcryptor

Мы шифруем файлы и тем самым обеспечиваем повышенную защиту от шпионажа и кражи данных. Для шифрования мы используем комбинацию шифрования AES-256 и шифрования RSA. Здесь мы объясняем два алгоритма.

Шифрование AES-256

Advanced Encryption Standard (AES) — один из наиболее часто используемых и наиболее безопасных алгоритмов шифрования, доступных сегодня. Это общедоступно, и это шифр, который NSA использует для обеспечения безопасности документов с классификацией «Совершенно секретно». История его успеха началась в 1997 году, когда NIST (Национальный институт стандартов и технологий) официально начал искать замену стареющему стандарту DES. Алгоритм под названием «Rijndael», разработанный бельгийскими криптографами Daemen и Rijmen, отличался повышенной безопасностью, а также производительностью и гибкостью.

Он вышел на первое место среди нескольких конкурентов и был официально анонсирован в 2001 году новым стандартом шифрования AES. Алгоритм основан на нескольких подстановках, перестановках и линейных преобразованиях, каждый из которых выполняется на блоках данных по 16 байтов, отсюда термин blockcipher. Эти операции повторяются несколько раз, называемые «раундами». Во время каждого раунда уникальный ключ раунда рассчитывается из ключа шифрования и включается в вычисления. Основываясь на блочной структуре AES, изменение отдельного бита либо в ключе, либо в блоке открытого текста приводит к совершенно другому блоку зашифрованного текста — явное преимущество перед традиционными потоковыми шифрами. Наконец, разница между AES-128, AES-192 и AES-256 — это длина ключа: 128, 192 или 256 бит — все радикальные улучшения по сравнению с 56-битным ключом DES. В качестве иллюстрации: взлом 128-разрядного ключа AES с помощью современного суперкомпьютера займет больше времени, чем предполагаемый возраст вселенной. А Boxcryptor даже использует 256-битные ключи! На сегодняшний день не существует никакой реальной атаки на AES. Поэтому AES остается предпочтительным стандартом шифрования для правительств, банков и систем высокой безопасности по всему миру.


Шифрование RSA

RSA — одна из самых успешных, асимметричных систем шифрования на сегодня. Первоначально обнаруженный в 1973 британским разведывательным агентством GCHQ, он получил классификацию «совершенно секретно». Мы должны поблагодарить криптологов Rivest, Shamir и Adleman за его гражданское повторное открытие в 1977 году. Они наткнулись на него во время попытки решить еще одну криптографическую проблему.

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

Эти свойства позволяют использовать асимметричные криптосистемы в широком спектре функций, таких как цифровые подписи. В процессе подписания документа к файлу прикрепляется отпечаток пальца, зашифрованный с помощью RSA, который позволяет получателю проверять как отправителя, так и целостность документа. Безопасность RSA основана главным образом на математической проблеме факторизации целого числа. Сообщение, которое должно быть зашифровано, рассматривается как одно большое число. При шифровании сообщения оно увеличивается до степени ключа и делится с остатком на фиксированное произведение двух простых чисел. Повторяя процесс с другим ключом, открытый текст можно получить снова. Лучший известный в настоящее время способ взломать шифрование требует факторизации продукта, используемого при делении. В настоящее время невозможно вычислить эти коэффициенты для чисел, превышающих 768 бит. Вот почему современные криптосистемы используют минимальную длину ключа 3072 бита.

Как Boxcryptor Шифрует и Расшифровывает файлы

Boxcryptor реализует комбинированный процесс шифрования, основанный на асимметричном RSA и симметричном шифровании AES. Каждый файл имеет свой собственный уникальный случайный файловый ключ, который создается при создании файла.

Не такой уж ты и страшный, XTS-AES / Habr


Приветствую, %username%!

Сегодняшняя статья навеяна мыслями написать бесплатный аналог программы для шифрования файлов в DropBox, а именно аспектом режима шифрования файлов посекторно (для возможности читать\писать из/в произвольное место)
Мы поговорим о режиме шифрования XTS-AES, применяемом во всех популярных дискошифровалках (TrueCrypt, DiskCryptor).
Он описан в IEEE P1619™/D16 (Standard for Cryptographic Protection of Data on Block-Oriented Storage Devices) и считается самым безопасным способом хранить данные посекторно.

Перво-наперво определим входные данные для работы:

  1. 256/512 бит ключа (может быть SHA-256/512(соль+пароль) или что нибудь вроде KDF)
  2. Адрес (номер) сектора
  3. Собсно блок данных длины кратной 128 битам (размер блока AES)

Упрощенно, алгоритм следующий:

  1. Разбивка ключа на два. Первая часть становится ключом шифрования данных(k1), вторая — ключом для генерации tweak value
    (k2)
    Таким образом, если у нас используется ключ в 512 бит, то мы его пилим на 2х256 и используем в AES-256
  2. Конвертируем номер сектора в массив байт и шифруем его ключом k2. Это наше tweak value
  3. Идём по массиву данных блоками размером по 16 байт и для каждого блока:
  4. 1.Ксорим его с tweak value
  5. 2.Шифруем/расшифровываем его ключом k1
  6. 3.Опять ксорим уже (рас)шифрованный блок данных с tweak value. Сохраняем его, это и будет нужный нам (за/рас)шифрованный блок сектора
  7. 4.Умножаем tweak value на полином α = x128+x7+x2+x+1

Самое непонятное тут (для меня, в частности) это умножение на полином. Алгоритмически это просто сдвиг всего массива на 1 бит + xor на последнем шаге.

  1.  
  2. private const int GF_128_FDBK = 0x87;
  3. private const int AES_BLK_BYTES = 16;
  4.  
  5. // умножаем T(weak value) на α
  6. Cin = 0; // бит переноса
  7. for (j = 0; j < AES_BLK_BYTES; j++)
  8. {
  9.     Cout = (T[j] >> 7) & 1;
  10.     T[j] = (byte)(((T[j] << 1) + Cin) & 0xFF);
  11.     Cin = Cout;
  12. }
  13. if (Cout != 0)
  14. {
  15.     T[0] ^= GF_128_FDBK;
  16. }
  17.  

В принципе, никакого криминала. Делается это для того, чтоб tweak value был различным для каждого блока данных внутри сектора.
Вопрос к математически подкованной аудитории: Почему выбрано именно умножение на полином в GF(2) по модулю x128+x7+x2+x+1? Моих (не)знаний хватает лишь предположить, что тут замешаны циклические группы, и всё это некий аналог циклического сдвига.

Рабочий код на C#, который даже проходит стандартные тесты:

  1.  
  2. class XTS
  3. {
  4.     private const int GF_128_FDBK = 0x87;
  5.     private const int AES_BLK_BYTES = 16;
  6.  
  7.     public static byte[] encryptSector(byte[] inData, byte[] dataEncryptionKey, byte[] tweakEncryptionKey, UInt64 sectorNumber, bool encrypt)
  8.     {
  9.         byte[] outData = new byte[inData.Length]; //тут будет результат. Размер inData должен быть кратен 32!
  10.  
  11.         uint i, j; // local counters
  12.         var T = new byte[AES_BLK_BYTES]; // tweak value
  13.         var x = new byte[AES_BLK_BYTES]; // буфер для (за/рас)шифрованного блока данных
  14.  
  15.         // конвертируем номер сектора в массив байт
  16.         Array.Copy(BitConverter.GetBytes(sectorNumber), T, 8);
  17.  
  18.         //после шифрования в T у нас tweak value. true значит шифровать
  19.         processAES(tweakEncryptionKey, T, true);
  20.        
  21.         // Обрабатываем по AES_BLK_BYTES байт за раз
  22.         for (i = 0; i < inData.Length; i += AES_BLK_BYTES)
  23.         {
  24.             // ксорим tweak value с куском данных
  25.             for (j = 0; j < AES_BLK_BYTES; j++)
  26.             {
  27.                 x[j] = (byte)(inData[i + j] ^ T[j]);
  28.             }
  29.  
  30.             // шифруем/расшифровываем блок
  31.             processAES(dataEncryptionKey, x, encrypt);
  32.  
  33.              // ксорим tweak value с обработанным блоком данных
  34.             for (j = 0; j < AES_BLK_BYTES; j++)
  35.             {
  36.                 outData[i + j] = (byte)(x[j] ^ T[j]);
  37.             }
  38.  
  39.             // Умножаем tweak value на α
  40.             j = AES_BLK_BYTES;
  41.             int t = T[AES_BLK_BYTES — 1];
  42.             while (—j != 0)
  43.                 T[j] = (byte)((T[j] << 1) | ((T[j — 1] & 0x80) != 0 ? 1 : 0));
  44.             T[0] = (byte)((T[0] << 1) ^ ((t & 0x80) != 0 ? 0x87 : 0x00));
  45.         }
  46.         return outData;
  47.     }
  48.  
  49.     private static void processAES(byte[] k, byte[] T, bool encrypt)
  50.     {
  51.         /*AesFastEngine взят из BouncyCastle. Вы можете заменить на стандартную
  52.         * реализацию, либо вообще использовать другой алгоритм, только учитывайте
  53.         * размер блока шифрования.
  54.         */
  55.         var engine = new AesFastEngine();
  56.         engine.Init(encrypt, new KeyParameter(k));
  57.         engine.ProcessBlock(T, 0, T, 0);
  58.     }
  59. }
  60.  

______________________
Использовать AES, как видно, не обязательно. Правда, об этом ничего не сказано в стандарте.

Домашним заданием будет реализовать обработку сектора для размеров не кратных 32.
А я продолжу написание шифровалки для DropBox)

Алгоритм шифрования AES и его надежность

После того как мы на прошлой неделе опубликовали информацию о готовящихся к продаже новых криптотелефонах X-Telecom Secure Mobile, в которых используется алгоритм шифрования AES-256, многие люди стали звонить и интересоваться, что это за алгоритм AES, насколько он надежен и удовлетворяет ли он требования информационной безопасности.

Алгоритм Advanced Encryption Standard

Advanced Encryption Standard – симметричный алгоритм блочного шифрования, принятый правительством США в качестве стандарта в результате конкурса, проведенного между технологическими институтами. Он заменил устаревший Data Encryption Standard, который больше не соответствовал требованиям сетевой безопасности, усложнившимся в XXI веке.

Этот алгоритм, кроме аббревиатуры AES, иногда называют еще Rijndael – это анаграмма из частей имен бельгийских программистов Joan Daemen и Vinent Rijmen, которые разработали AES. Строго говоря, AES и Rijndael – не совсем одно и то же, поскольку AES имеет фиксированный размер блока в 128 бит и размеры ключей в 128, 192 и 256 бит, в то время как для Rijndael могут быть заданы любые размеры блока и ключа, от минимума в 32 бит до максимума в 256 бит.

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

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

Надежность алгоритма шифрования AES

Считается, что используемый в Advanced Encryption Standard ключ длиной в 128 бит – достаточно надежная защита против лобовой атаки, то есть с чисто математической точки зрения подобрать один правильный пароль из всех возможных – трудноосуществимая задача. Несмотря даже на некоторые недостатки AES, взломать защищенную с помощью этого алгоритма информацию практически нереально.

Любой криптографический алгоритм требует ключ размером в то или иное количество бит, чтобы зашифровать данные, как показано в схеме №1.

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

Вот пример перебора 4-битного ключа:

Потребуется максимум 16 стадий, чтобы проверить каждую возможную комбинацию, начиная с «0000». Лобовая атака за некоторое время может пробить такой простой алгоритм.

Таблица на рисунке ниже показывает возможное число комбинаций с учетом размера ключа:

Обратите внимание на то, что по мере увеличения размера ключа количество комбинаций возрастает экспоненциально. Математические исчисления доказывают, что размер ключа в 128 бит надежнейшим образом защищает от лобовой атаки:

AES (Rijndael) — шифрование online


Комментарий:
Описание: Advanced Encryption Standard (AES), также известный под своим оригинальным названием Rijndael — это спецификация для шифрования электронных данных, созданная национальным Институтом стандартов и технологий США (NIST) в 2001 году.

AES является подмножеством шифра Rijndael, разработанного двумя Бельгийскими криптографами, Винсентом Рейменом и Джоан Даймен, которые представили предложение NIST в процессе отбора AES. Rijndael — это семейство шифров с различными размерами ключей и блоков.

Для AES NIST выбрал трех членов семейства Rijndael, каждый из которых имеет размер блока 128 бит, но три разных длины ключа: 128, 192 и 256 бит.

AES был принят правительством США и в настоящее время используется во всем мире. Он заменяет Стандарт шифрования данных (des), который был опубликован в 1977 году. Алгоритм, описываемый AES, является алгоритмом симметричного ключа, то есть один и тот же ключ используется как для шифрования, так и для расшифровки данных.

AES вступил в силу в качестве стандарта федерального правительства 26 мая 2002 года после утверждения министром торговли. AES включен в стандарт ISO/IEC 18033-3. AES доступен во многих различных пакетах шифрования и является первым (и единственным) общедоступным шифром, одобренным агентством национальной безопасности (NSA) для сверхсекретной информации при использовании в одобренном криптографическом модуле NSA (см. безопасность AES ниже).


Ресурсы:

Принцип построения и характеристики шифра AES.

AES (Advanced Encryption Standard)

Новый американский стандарт шифрования FIPS-197.

Данный алгоритм шифрования является не только полностью общедоступным, но и принятым как наилучший среди представленных на открытом конкурсе в США в 1997 г.

шифр AES:

— открыто опубликованный;

— симметричный блоковый шифр, допускающим длины ключа 128, 192 и 256 бит;

— предназначен как для аппаратной, так и для программной реализации;

— доступен для свободного использования в любых продуктах, а значит, не запатентованным.

В ходе исследований не выявлено слабостей

криптоалгоритма;

Характеристики шифра АЕS

1.Может работать быстрее, чем обычный блочный шифр;

2.Может быть реализован на смарт-карте, используя небольшой РАМ и имея небольшое число циклов;

3. Преобразование раунда допускает параллельное выполнение;

4. Не использует арифметических операций, поэтому тип архитектуры процессора не имеет значения;

5. Может быть использован для вычисления МАС-кода и хэш-функции.

 

Данный шифр основан на принципе итерирования (итерирование — повторение какой-либо математической операции, использующее результат предыдущей аналогичной операции) SD-преобразований и использует так называемую архитектуру «квадрат», т. е. все преобразования производятся в рамках одного квадрата.

Текущие данные (в том числе исходное сообщение и получаемая криптограмма) записываются по одному байту (8 бит) в каждую из 16 клеток, что дает общую длину блока шифрования, равную 8×16 -128 бит.

Первое преобразование данного алгоритма выполняется как вычисление обратного элемента в поле GF( ) по модулю неприводимого полинома + + + х +1, что обеспечивает доказуемую устойчивость шифра по отношению к линейному и дифференциальному криптоанализу, при этом нулевой элемент поля сохраняется без преобразования (рис. 3.16).

 

Следующее преобразование состоит в умножении каждой клетки квадрата, представленной в виде двоичного вектор-столбца ( , ) , на фиксированную матрицу и добавлении также фиксированного вектор-столбца, причем все операции здесь выполняются в поле GF{2}:

Используемая в этом преобразовании матрица и вектор-столбец сохраняются одинаковыми на всех раундах и не зависят от ключа.

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

В качестве очередного преобразования используется побайтовый циклический сдвиг массива сообщений на различное количество байт (клеток), показанный на рис. 3.17.

Следующее преобразование называется перемешиванием столбцов. На этом шаге каждый С-й столбец квадратной матрицы представляется как 4-мерный вектор над полем GF( ), и далее производится умножение в этом поле, заданном неприводимым полиномом + +

+ х +1, на определенную матрицу с элементами из этого же поля:

где элементы, показанные в этой матрице, задаются как элементы поля GF( ) (т. е. как двоичные последовательности длины 8), что иллюстрируется следующим примером:

Наконец производится сложение с раундовыми ключами, которое выполняется просто как побитное сложение всех элементов последнего квадрата с 128 элементами раундового ключа по модулю 2. После завершения одного раунда все описанные выше операции повторяются с использованием других раундовых ключей. Раундовые ключи вырабатываются из единственного секретного ключа длиной 128, 192 или 256 бит (в зависимости от выбранного режима ифрования) при помощи специальных преобразований, включающих в себя циклические сдвиги и расширения. Количество раундов шифра зависит от выбранного режима его работы и изменяется в пределах от 10 до 14.

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

Особенности шифра AES

1) AES ориентирован в основном на реализацию с 8-разрядными процессорами;

2) все раундовые преобразования выполняются в конечных полях, что допускает простую реализацию на различных платформах.

Стойкость шифра AES

Очевидно, что перебор всех ключей (даже при их минимальном количестве- 2 ) оказывается невозможным. Линейный и дифференциальный криптоанализ также практически невозможны вследствие выбора оптимальных процедур преобразований и, в частности, вследствие использования вычисления обратных элементов в конечном поле.

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

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

При программной реализации данный алгоритм наиболее эффективно реализуется на 8- и 32-разрядных платформах. Для типичных ПК скорость шифрования может составлять порядка 1 Мбайт/с — 500 кбайт/с. При аппаратной реализации высокие скорости шифрования (порядка 100 Мбайт/с и выше) потребуют увеличения аппаратных ресурсов и, следовательно, увеличения габаритов устройства.




Advanced Encryption Standard (AES) – Часть 2.Описание AES

Блочные шифры

AES — симметричный алгоритм блочного шифрования, поэтому рассмотрим подробнее блочные шифры.

Блочный шифр — разновидность симметричного шифра. Особенностью блочного шифра является обработка блока нескольких байт за одну итерацию (как правило 8 или 16).Блочные криптосистемы разбивают текст сообщения на отдельные блоки и затем осуществляют преобразование этих блоков с использованием ключа.

Преобразование должно использовать следующие принципы:

  • Рассеивание (diffusion) — т.е изменение любого знака открытого текста или ключа влияет на большое число знаков шифротекста, что скрывает статистические свойства открытого текста;
  • Перемешивание (confusion) — использование преобразований, затрудняющих получение статистических зависимостей между шифротектстом и открытым текстом.

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

Блочный шифр состоит из двух взаимосвязанных алгоритмов: алгоритм шифрования E и алгоритм расшифрования E-1. Входными данными служат блок размером n бит и k-битный ключ. На выходе получается n-битный зашифрованный блок. Для любого фиксированного ключа функция расшифрования является обратной к функции шифрования для любого блока M и ключа K.

Для любого ключа K, EK — перестановка набора входных блоков. Ключ выбирается из 2n! возможных перестановок.

Размер блока n — это фиксированный параметр блочного шифра, обычно равный 64 или 128 битам, хотя некоторые шифры допускают несколько различных значений. Длина 64 бита была приемлема до середины 90-х годов, затем использовалась длина 128 бит и более. Различные схемы шифрования позволяют зашифровывать открытый текст произвольной длины. Каждая имеет определенные характеристики: вероятность ошибки, простота доступа, уязвимость к атакам. Типичными размера ключа являются 40, 56, 64, 80, 128, 192 и 256 бит. В 2006 г. 80-битный ключ способен был предотвратить атаку грубой силой.

Описание AES
Алгоритм

С математической точки зрения, метод Rijndael основывается на теории полей Галуа, благодаря чему можно строго доказать некоторые его свойства, касающиеся секретности. Тем не менее, можно рассматривать его и с точки зрения кода программы на языке С, не вдаваясь в математические подробности. Как и в DES, в Rijndael применяются замены и перестановки. И там, и там используются несколько итераций, их число зависит от размера ключа и блока и равно 10 для 128-разрядного ключа и 128-битных блоков; для максимального размера ключа и блоков число итераций равно 14. Однако, в отличие от DES, все операции выполняются над целыми байтами, что позволяет создавать эффективные реализации как в аппаратном, так и в программном исполнении. Схематичный алгоритм метода Rijndael приведен ниже

У функции rijndael три аргумента: plaintext — массив размером 16 байт, содержащий входные данные, ciphertext — массив размером 16 байт, в который будет возвращен шифр, а также key — 16-разрядный ключ. В процессе вычислений текущее состояние данных сохраняется в байтовом массиве state, размер которого равен NROWS х NCOLS. Для 128-битных блоков данных размер этого массива равен 4×4 байта. В 16 байтах целиком уместится один блок. Массив state изначально содержит открытый текст и модифицируется на каждом этапе вычислений. На некоторых этапах выполняется побайтовая подстановка. На других этапах — перестановка байтов внутри массива. Могут выполняться и другие преобразования. В конечном итоге содержимое state представляет собой зашифрованный текст, который и возвращается в качестве результата функции. Алгоритм начинается с распространения ключа по 11 массивам одинакового размера, представляющим состояние (state). Эти массивы хранятся в гк — массиве структур, содержащих массивы состояний. Одна из этих структур будет использована в начале вычислений, а остальные 10 — во время 10 итераций (по одной на итерацию). Вычисление ключа для каждой итерации производится довольно сложным образом, и мы не будем рассматривать детали этого процесса. Достаточно сказать, что для этого осуществляются циклические повороты и суммирования по модулю 2 различных групп разрядов ключа. Следующий шаг состоит в копировании открытого текста в массив state для того, чтобы его можно было обрабатывать во время последующих итераций. Копируется текст в колонки по 4 байта: первые 4 байта попадают в колонку 0, вторые — в колонку 1 и т. д. И колонки, и строки нумеруются с нуля, а итерации — с единицы. Процесс создания 12 байтовых массивов размером 4×4 показан на рис.

Перед началом основного цикла вычислений производится еще одно действие: rk[0] поразрядно складывается по модулю 2 с массивом state. Другими словами, каждый из 16 байт в массиве state заменяется суммой по модулю 2 от него самого и соответствующего байта в rk[0]. ТОЛЬКО после этого начинается главное развлечение. В цикле проводятся 10 итераций, в каждой из которых массив state подвергается преобразованию. Каждый раунд (итерация) состоит из четырех шагов. На шаге 1 в state производится посимвольная подстановка. Каждый байт по очереди используется в качестве индекса для S-блока, заменяющего его значение на соответствующую запись S-блока. На этом шаге получается прямой моноалфавитный подстановочный шифр. В отличие от DES, где используются несколько S-блоков, в Rijndael S-блок всего один. На шаге 2 каждая из четырех строк поворачивается влево. Строка 0 поворачивается на 0 байт (то есть не изменяется), строка 1 — на 1 байт, строка 2 — на 2 байта, а строка 3 — на 3 байта. Смысл заключается в разбрасывании данных вокруг блока. Это аналогично перестановкам, показанным на рис. 8.5. На шаге 3 происходит независимое перемешивание всех колонок. Делается это с помощью операции матричного умножения, в результате которого каждая новая колонка оказывается равной произведению старой колонки на постоянную матрицу. При этом умножение выполняется с использованием конечного поля Галуа, GF(2S). Несмотря на то, что все это кажется довольно сложным, алгоритм устроен так, что каждый элемент матрицы вычисляется посредством всего лишь двух обращений к таблице и трех суммирований по модулю 2. Наконец, на шаге 4 ключ данной итерации складывается по модулю 2 с массивом state. Благодаря обратимости всех действий расшифровка может быть выполнена с помощью такого же алгоритма, но с обратным порядком следования всех шагов. Однако есть одна хитрость, которая позволяет заниматься расшифровкой, используя алгоритм шифрования с измененными таблицами. Данный алгоритм обладает не только очень высокой защищенностью, но и очень высокой скоростью. Хорошая программная реализация на машине с частотой 2 ГГц может шифровать данные со скоростью 700 Мбит/с. Такой скорости достаточно для шифрации видео в формате MPEG-2 в реальном масштабе времени. Аппаратные реализации работают еще быстрее.

Режим шифрования

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

Electronic Code Book (ECB)

Сообщение делится на блоки. Каждый блок шифруется отдельно (независимо от других и на одном ключе). Этот режим называется режимом электронной кодовой книги, так как существует возможность создать книгу, в которой каждому блоку открытого текста будет сопоставлен блок зашифрованного текста. Однако создать книгу — нетривиальная задача. Если размер блока равен x бит, то в книге будет содержаться 2x записей, и каждая книга будет соответствовать одному ключу.

Зашифрование может быть описано следующим образом : Ci = F(Pi) для любых i от 1 до N. Здесь Ci и Pi — блоки зашифрованного и открытого текстов соответственно, а F — функция блочного шифрования. Расшифровка по той же схеме. То есть Pi = F − 1(Ci).

Шифрование в режиме ECB

Дешифрование в режиме ECB

Недостатки:

  • идентичные блоки открытого текста шифруются в идентичные блоки зашифрованного текста при одном и том же ключе.
  • блоки могут пропадать или появляться. Злоумышлленник может перехватить блок и продублировать его. Со стороны приёмника он может быть воспринят, как «правильный». Таким образом, это не может скрыть образцы данных хорошо, поэтому этот метод не рекомендуется к использованию в криптографических протоколах.
Cipher Block Chaining (CBC)

Для сцепления используется механизм обратной связи, поскольку результат шифрации предыдущих блоков используется для шифрации текущего блока. Таким образом любой блок шифра зависит не только от исходного текста, но и от всех предыдущих блоков текста. В Cipher Block Chaining (CBC) текст XOR’ится с предыдущим шифр. блоком перед шифрацией. Дешифрация проводится аналогично. Математическая запись:

Ci = Ek (Pi XOR Ci-1)

Pi = Ci-1 XOR Dk(Ci)

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

Шифрование в режиме CBC

Дешифрование в режиме CBC

Большинство сообщений не делятся нацело на 64-битные блоки, обычно остается короткий блок в конце. Можно по-разному бороться с этим. Простейший метод – padding (дополнение до полного блока). Если надо потом убирать мусор, то достаточно просто последним байтом обозначить количество лишних байтов. Можно также обозначать последний байт текста символом конца файла. Это не всегда можно сделать (напр., если надо расшифровать блок и поставить его куда — нибудь в память). Тогда применяется следующая схема шифрования: предположим, в последнем блоке j бит. После зашифровки последнего целого блока, зашифруем шифрованный блок еще раз, выберем j начальных битов полученного текста и по XOR’им с исходным текстом. Это и есть шифр для неполного блока.

Cipher Feedback (CFB)

Режим (CFB) обратной связи шифра, близкий родственник CBC, превращает блочный шифр в самосинхронизирующийся шифр потока. Операция очень похожа на предыдущую; в частности расшифровка CFB почти идентична расшифровке CBC, выполненной наоборот:

C0 = IV

где IV — вектор инициализации

Как режим CBC, изменения в открытом тексте распространяется повсюду в зашифрованном тексте, и в кодировании нельзя найти что-либо подобное. Также как и в CBC, в расшифровке можно найти что-либо подобное. Расшифровывая, однобитовое изменение в зашифрованном тексте затрагивает два блока открытого текста: однобитовое изменение в соответствующем блоке открытого текста, и полном искажении следующего блока открытого текста. Более поздние блоки открытого текста будут расшифрованы как обычно.

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

CFB совместно использует два преимущества перед режимом CBC с режимами OFB шифра потока и CTR: блочный шифр только когда-либо используется в направлении шифровки, и сообщение не должно быть дополнено к кратному числу размера блока шифра.

Output Feedback (OFB)

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

Из-за симметрии операции сложения, кодирование и расшифровка похожи:

Oi = Ek(Oi − 1)

O0 = IV

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

Уязвимость

Как и предполагали эксперты, после принятия алгоритма Rijndael в качестве стандарта AES попытки вскрытия данного алгоритма существенно усилились.

Можно сказать, что криптоанализ алгоритма AES стал развиваться, в основном, в следующих четырех направлениях:

Во-первых, попытки усиления «классических» атак или применения других известных атак к данному алгоритму. Например, была предложена атака методом бумеранга на 6-раундовую версию алгоритма со 128-битным ключом, для выполнения которой требуется 239 выбранных открытых текстов, 271 шифртекстов с адаптивным выбором и 271 операций шифрования.

Во-вторых, применение различных методов криптоанализа на связанных ключах, в частности были предложены следующие атаки:

  • Было предложено несколько вариантов атак на связанных ключах на 7- и 8-раундовый AES-192 с использованием невозможных дифференциалов.
  • Комбинация метода бумеранга и связанных ключей: 9-раундовый AES-192 атакуется при наличии 279 выбранных открытых текстов, каждый из которых шифруется на 256 связанных ключах, выполнением 2125 операций шифрования; для атаки на 10-раундовый AES-256 требуется 2114,9 выбранных открытых текстов (включая зашифрование на 256 связанных ключах) и 2171,8 операций. Данная атака использует слабость процедуры расширения ключа, состоящую в ее недостаточной нелинейности.
  • Предлагается атака на 10-раундовый алгоритм AES-192, для которой требуется 2125 выбранных открытых текстов (на 256 связанных ключах) и 2146,7 операций.

Несмотря на то, что предложенные атаки на связанных ключах являются весьма непрактичными, настораживает тот факт, что атаке подвержены уже 10 из 12 раундов алгоритма AES-192 (и это после всего 5 лет после принятия стандарта AES!) – возникает опасение, что эксперты (указывающие на недостаточность раундов в алгоритме Rijndael) были правы и полнораундовый алгоритм AES будет вскрыт существенно раньше, чем предполагали эксперты института NIST.

В-третьих, многие исследования посвящены алгебраической структуре алгоритма Rijndael, например:

  • Найдены линейные соотношения в таблице замен Rijndael (т.е. в единственном нелинейном элементе алгоритма). Однако, как и в других аналогичных работах, каких-либо практических возможностей использования данного свойства не предложено.
  • Зашифрование с помощью Rijndael можно выразить относительно (особенно по сравнению с другими «серьезными» алгоритмами шифрования) простой формулой. Авторы не нашли практического применения данной формулы, но предположили, что она будет использована в реальных атаках в течение ближайших примерно 20 лет.
  • Показано, что вскрытие алгоритма AES эквивалентно решению системы квадратичных уравнений в конечном поле GF(28).

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

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

Блочный шифр — Википедия

Бло́чный шифр — разновидность симметричного шифра[1], оперирующего группами бит фиксированной длины — блоками, характерный размер которых меняется в пределах 64‒256 бит. Если исходный текст (или его остаток) меньше размера блока, перед шифрованием его дополняют. Фактически, блочный шифр представляет собой подстановку на алфавите блоков, которая, как следствие, может быть моно- или полиалфавитной.[2] Блочный шифр является важной компонентой многих криптографических протоколов и широко используется для защиты данных, передаваемых по сети.

В отличие от шифроблокнота, где длина ключа равна длине сообщения, блочный шифр способен зашифровать одним ключом одно или несколько сообщений суммарной длиной больше, чем длина ключа. Передача малого по сравнению с сообщением ключа по зашифрованному каналу — задача значительно более простая и быстрая, чем передача самого сообщения или ключа такой же длины, что делает возможным его повседневное использование. Однако, при этом шифр перестает быть невзламываемым. От поточных шифров работа блочного отличается обработкой бит группами, а не потоком. При этом блочные шифры надёжней, но медленнее поточных.[3] Симметричные системы обладают преимуществом над асимметричными в скорости шифрования, что позволяет им оставаться актуальными, несмотря на более слабый механизм передачи ключа (получатель должен знать секретный ключ, который необходимо передать по уже налаженному зашифрованному каналу. В то же время, в асимметричных шифрах открытый ключ, необходимый для шифрования, могут знать все, и нет необходимости в передаче ключа шифрования).

К достоинствам блочных шифров относят сходство процедур шифрования и расшифрования, которые, как правило, отличаются лишь порядком действий. Это упрощает создание устройств шифрования, так как позволяет использовать одни и те же блоки в цепях шифрования и расшифрования. Гибкость блочных шифров позволяет использовать их для построения других криптографических примитивов: генератора псевдослучайной последовательности, поточного шифра, имитовставки и криптографических хешей.[4]

Общая схема работы блочного шифра

Современная модель блочных шифров основана на идее итеративных блочных шифров, предложенной в публикации 1949 года Клода Шеннона «Теория связи в секретных системах». Данная концепция позволяет достичь определённого уровня безопасности комбинированием простых в исполнении операций подстановки (англ. substitution) и перестановки (англ. permutation)[5].

До 1970-х гг. криптография была уделом военных и разведчиков, в открытой печати практически не существовало каких-либо публикаций[6]. Первопроходцем явился шифр «Люцифер», разработанный в 1970 году компанией IBM и основанный на SP-сети. Идея шифра заключалась в использовании комбинаций простых, а следовательно, быстро вычисляемых как аппаратно, так и программно операций. Однако, схема получилась неудачной: она была слишком громоздкой, что привело к низкой скорости шифрования в программной реализации (около 8 кбайт/с) и в аппаратной (97 кбайт/с).

Стали появляться опасения, связанные со стойкостью данного алгоритма. Тем не менее, принципы, выработанные при построении «Люцифера», (SP-сеть и сеть Фейстеля, названная так в честь одного из разработчиков) легли в основу конструирования блочных шифров.

В 1973 году Национальный институт стандартов и технологий (англ. NIST) объявил конкурс с целью разработать стандарт шифрования данных, победителем которого в 1974 году стал шифр DES (Data Encryption Standard), являющийся, фактически, улучшенной версией «Люцифер». Публикация шифра в 1977 году была основополагающей в общественном понимании современной модели блочного шифра. В то же время, она дала начало развитию криптоаналитических атак.

После одобрения Американским национальным институтом стандартов в 1981 году, алгоритм долгое время использовался в гражданском секторе и даже вышел за пределы США. Однако шифр имел существенный недостаток — маленькую длину ключа, породившую множество связанных с параллельным перебором атак, и приближающаяся возможность её реализации. Отсутствие достойной защиты от атак шифра DES породило множество алгоритмов, являющихся как более сложной версией DES (3DES), так и совершенно иных схем (NewDES, FEAL, IDEA).

В 1997 году стал годом начала программы по принятию AES (Advanced Encryption Standard). Конкурс состоял из трех этапов, окончательным победителем которого стал алгоритм RIJNDAEL, разработанный бельгийцами J. Daemen и V. Rijmen. AES, как и его предшественники, также построен с использованием SP-сети.

На сегодняшний день существует множество атак, которым вынужден противостоять блочный шифр, начиная с атаки перебором, как самой тривиальной.[7]

Блочный шифр состоит из двух парных алгоритмов: шифрования и расшифрования.[8] Оба алгоритма можно представить в виде функций. Функция шифрования E (англ. encryption — шифрование) на вход получает блок данных M (англ. message — сообщение) размером n бит и ключ K (англ. key — ключ) размером k бит и на выходе отдает блок шифротекста C (англ. cipher — шифр) размером n бит:

EK(M):=E(K,M):{0,1}k×{0,1}n→{0,1}n.{\displaystyle E_{K}(M):=E(K,M):\{0,1\}^{k}\times \{0,1\}^{n}\to \{0,1\}^{n}.}

Для любого ключа K, EK является биективной функцией (перестановкой) на множестве n-битных блоков. Функция расшифрования D (англ. decryption — расшифрование) на вход получает шифр C, ключ K и на выходе отдает M:

DK(C):=D(K,C):{0,1}k×{0,1}n→{0,1}n,{\displaystyle D_{K}(C):=D(K,C):\{0,1\}^{k}\times \{0,1\}^{n}\to \{0,1\}^{n},}

являясь, при этом, обратной к функции шифрования:

D=E−1,{\displaystyle D=E^{-1},}
∀K:DK(EK(M))=M{\displaystyle \forall K:D_{K}(E_{K}(M))=M} и
EK(DK(C))=C.{\displaystyle E_{K}(D_{K}(C))=C.}

Заметим, что ключ, необходимый для шифрования и дешифрования, один и тот же — следствие симметричности блочного шифра.

«Проектировать блочный шифр нетрудно. Трудность состоит в проектировании блочного шифра, который не только безопасен, но также может быть легко описан и просто реализован.»

Брюс Шнайер, криптограф и специалист по компьютерной безопасности.

Первопроходцами в разработке блочных шифров стали сотрудники компании IBM при работе над шифром «Lucifer». [9] Они спроектировали первые основы, которые стали использоваться при разработке последующих схем. При этом следует учитывать, что новый шифр должен быть не только стойким ко всем известным видам атак, но и достаточно прост в реализации.

Итеративные блочные шифры[править | править код]

Большинство блочных шифров являются итеративными. Это означает, что данный шифр преобразует блоки открытого текста (англ. plaintext) постоянной длины в блоки шифротекста (англ. ciphertext) той же длины посредством циклически повторяющихся обратимых функций, известных как раундовые функции.[10] Это связано с простотой и скоростью исполнения как программных, так и аппаратных реализаций. Обычно раундовые функции используют различные ключи, полученные из первоначального ключа:

Ci=RKi(Ci−1){\displaystyle C_{i}=R_{K_{i}}(C_{i-1})},

где Ci — значение блока после i-го раунда, C0 = M — открытый текст, Ki — ключ, используемый в i-м раунде и полученный из первоначального ключа K.

Размер блока n — это фиксированный параметр блочного шифра, обычно равный 64 или 128 битам, хотя некоторые шифры допускают несколько различных значений. Длина 64 бита была приемлема до середины 90-х годов, затем использовалась длина 128 бит, что примерно соответствует размеру машинного слова и позволяет эффективную реализацию на большинстве распространённых вычислительных платформ. Различные схемы шифрования позволяют зашифровывать открытый текст произвольной длины. Каждая имеет определённые характеристики: вероятность ошибки, простота доступа, уязвимость для атак. По состоянию на 2006 год 80-битный ключ способен был предотвратить атаку грубой силой.

SP-сети[править | править код]

C_i = R_{K_i}(C_{i-1}) Пример SP-сети с 3 раундами.

SP-сеть (англ. substitution-permutation network, SPN) — один из важнейших типов итеративных блочных шифров. Шифр на основе SP-сети получает на вход блок и ключ и совершает несколько чередующихся раундов, состоящих из чередующихся стадий подстановки (англ. substitution stage) и стадий перестановки (англ. permutation stage)[11]. Для достижения безопасности достаточно одного S-блока, но такой блок будет требовать большого объёма памяти. Поэтому используются маленькие S-блоки, смешанные с P-блоками[6]. Нелинейная стадия подстановки перемешивает биты ключа с битами открытого текста, создавая конфузию[en] Шеннона. Линейная стадия перестановки распределяет избыточность по всей структуре данных, порождая диффузию[12][13].

S-блок (англ. substitution box or S-box) замещает маленький блок входных бит на другой блок выходных бит. Эта замена должна быть взаимно однозначной, чтобы гарантировать обратимость. Назначение S-блока заключается в нелинейном преобразовании, что препятствует проведению линейного криптоанализа. Одним из свойств S-блока является лавинный эффект, то есть изменение одного бита на входе приводит к изменению всех бит на выходе[14].

P-блок[en] — перестановка всех бит: блок получает на вход вывод S-блока, меняет местами все биты и подает результат S-блоку следующего раунда. Важным качеством P-блока является возможность распределить вывод одного S-блока между входами как можно больших S-блоков.

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

Сеть Фейстеля[править | править код]

Сеть Фейстеля — это общий метод преобразования произвольной функции F в перестановку на множестве блоков. [15] Она состоит из циклически повторяющихся ячеек — раундов. Внутри каждого раунда блок открытого текста разделяется на две равные части. Раундовая функция

F=F(Ki,Ri−1){\displaystyle F=F(K_{i},R_{i-1})}
F = F(K_i,R_{i-1}) Шифрование в ячейке Фейстеля

берет одну половину (на рис. левую), преобразует её с использованием ключа Ki и объединяет результат с второй половиной посредством операции исключающее ИЛИ (XOR). Этот ключ задаётся первоначальным ключом K и различен для каждого раунда. Далее половинки меняются местами (иначе будет преобразовываться только одна половина блока) и подаются на следующий раунд. Преобразование сети Фейстеля является обратимой операцией.

Для функции F существуют определённые требования:

  • её работа должна приводить к лавинному эффекту
  • должна быть нелинейна по отношению к операции XOR

В случае невыполнения первого требования, сеть будет подвержена дифференциальным атакам (похожие сообщения будут иметь похожие шифры). Во втором случае действия шифра линейны и для взлома достаточно решения системы линейных уравнений[3]

Подобная конструкция обладает ощутимым преимуществом: процедуры шифрования/расшифрования совпадают, только производные от первоначального ключи используются в обратном порядке. Это значит, что одни и те же блоки могут использоваться как для шифрования, так и для расшифрования, что, безусловно, упрощает реализацию шифра. Недостаток схемы заключается в том, что в каждом раунде обрабатывается только половина блока, что приводит к необходимости увеличивать число раундов.[2]

Формирование группы[править | править код]

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

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

Шифрование независимыми блоками[править | править код]

F = F(K_i,R_{i-1}) оригинальное изображениеF = F(K_i,R_{i-1}) криптограмма в режиме ECBF = F(K_i,R_{i-1}) псевдослучайная последовательность

Простейшим режимом работы блочного шифра является режим электронной кодовой книги или режим простой замены (англ. Electronic CodeBook, ECB), где все блоки открытого текста зашифровываются независимо друг от друга. Однако, при использовании этого режима статистические свойства открытых данных частично сохраняются, так как каждому одинаковому блоку данных однозначно соответствует зашифрованный блок данных. При большом количестве данных (например, видео или звук) это может привести к утечке информации о их содержании и дать больший простор для криптоанализа.

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

Шифрование, зависящее от предыдущих блоков[править | править код]

F = F(K_i,R_{i-1}) Шифрование в режиме сцепления блоков шифротекста

Чтобы преодолеть эти проблемы, были разработаны иные режимы работы[16][17], установленные международным стандартом ISO/IEC 10116[18] и определеные национальными рекомендациями, такие, как NIST 800-38A[19] и BSI TR-02102[20]

Общая идея заключается в использовании случайного числа, часто называемого вектором инициализации[en] (IV). В популярном режиме сцепления блоков (англ. Cipher Block Chaining, CBC) для безопасности IV должен быть случайным или псевдослучайным. После его определения, он складывается при помощи операции исключающее ИЛИ с первым блоком открытого текста. Следующим шагом шифруется результат и получается первый шифроблок, который используем как IV для второго блока и так далее. В режиме обратной связи по шифротексту (англ. Cipher Feedback, CFB) непосредственному шифрованию подвергается IV, после чего складывается по модулю два (XOR, исключающее ИЛИ) с первым блоком. Полученный шифроблок используется как IV для дальнейшего шифрования. У режима нет особых преимуществ по сравнению с остальными. В отличие от предыдущих режимов, режим обратной связи вывода (англ. Output Feedback, OFB) циклически шифрует IV, формируя поток ключей, складывающихся с блоками сообщения. Преимуществом режима является полное совпадение операций шифрования и расшифрования. Режим счетчика (англ. Counter, CTR) похож на OFB, но позволяет вести параллельное вычисление шифра: IV объединяется с номером блока без единицы и результат шифруется. Полученный блок складывается с соответствующим блоком сообщения.

Следует помнить, что вектор инициализации должен быть разным в разных сеансах. В противном случае приходим к проблеме режима ECB. Можно использовать случайное число, но для этого требуется достаточно хороший генератор случайных чисел. Поэтому обычно задают некоторое число — метку, известную обеим сторонам (например, номер сеанса) и называемое nonce (англ. Number Used Once — однократно используемое число). Секретность этого числа обычно не требуется. Далее IV — результат шифрования nonce. В случае режима счетчика, nonce используется для формирования раундового ключа Ki[3]:

Ki=EK(nonce||i−1),i=1,..,n,{\displaystyle K_{i}=E_{K}(nonce||i-1),i=1,..,n,} где i — номер раунда.

Дополнение до целого блока[править | править код]

Как уже упоминалось выше, в случае, если длина самого сообщения, либо последнего блока, меньше длины блока, то он нуждается в дополнении. Простое дополнение нулевыми битами не решает проблемы, так как получатель не сможет найти конец полезных данных. К тому же, такой вариант приводит к атакам Оракула дополнения[en][21].

Поэтому на практике применимо решение, стандартизованное как «Метод дополнения 2» (Дополнение битами) в ISO/IEC 9797-1, добавляющее единичный бит в конец сообщения и заполняющее оставшееся место нулями[22]. В этом случае была доказана стойкость к подобным атакам[23].

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

Атака полным перебором[править | править код]

англ. Вrute force attack. Благодаря такой характеристике блочного шифра, как обратимость функции, его вывод становится отличимым от истинной случайной последовательности вследствие парадокса дней рождения. Эта особенность приводит к снижению безопасности шифра и необходимости брать во внимание размер блока. Таким образом, существует компромисс между большими, снижающими производительность шифра, и ненадежными маленькими блоками[24].

Не менее важную роль играет размер ключа. Ранний шифр DES характеризовался размером ключа в 56 бит, что, как показала практика, явно не достаточно для надежной пересылки данных. Именно атакой полным перебором впервые был вскрыт DES. Более современные алгоритмы, такие как AES и ГОСТ 28147-89 имеют размер ключа в 128 бит и 256 бит соответственно, что делает бессмысленным подобные атаки[25].

Дифференциальный криптоанализ[править | править код]

K_i = E_K(nonce Рис.1 Схема взлома дифференциальным криптоанализом

англ. Differential cryptanalysis. В 1990 году Эли Бихам (Eli Biham) и Ади Шамир (Adi Shamir) определили идею дифференциального криптоанализа. С помощью этого метода удалось взломать шифр DES. Подобной атаке подвержены шифры с постоянным S-блоком и шифрование в режиме кодовой электронной книги. Данный метод работает с парами шифротекстов, для которых известно различие соответствующих открытых текстов, и рассматривает эволюцию этих различий. Наряду с линейным является самым распространенным при атаках на блочный шифр[6].

Линейный криптоанализ[править | править код]

англ. Linear cryptanalysis. Линейный криптоанализ — метод вскрытия шифра, основанный на поиске аффинных приближений для работы алгоритма. Разработан японским математиком Мицуру Мацуи[en], первым применивший эту технику для атаки на DES и FEAL. Метод основан на применении операции исключающему ИЛИ (XOR) к блокам открытого текста, шифротекста и к их результату, что позволяет получить результат применения XOR для битов ключа. Структура S-блока оказывает сильное влияние на стойкость к линейным атакам. Когда метод был разработан, оказалось, что DES имеет слабость к нему, так как никто не предполагал подобных атак при его разработке[6].

Интегральный криптоанализ[править | править код]

англ. Intergal cryptanalysis. Интегральный криптоанализ — вид атак, особенно применимый к блочный шифрам, построенным на SP-сети. В отличие от дифференциального криптоанализа, использующего пару выбранного открытого текста с фиксированным разницей, вычисленной при помощи операции XOR, интегральный криптоанализ использует множества открытых текстов, в которых одни части удерживаются постоянными, в то время как другие варьируются среди всевозможных значений. Подобное множество с необходимостью имеет сумму по модулю 2 (XOR), равной 0, в то время, как соответствующая сумма шифротекста содержит информацию об операциях шифра.

Другие типы атак[править | править код]

Помимо описанных выше, существуют другие типы атак:

Любой новый шифр должен продемонстрировать стойкость ко всем известным видам атак.

На практике блочный шифр оценивают по множеству критериев[26][27]:

  • Параметры ключа: его длина и длина блока, обеспечивающие верхнюю границу безопасности шифра.
  • Оценка уровня безопасности, основанная на достигнутой в блочном шифре конфиденциальности и полученная после того, как шифр выдержит значительное число попыток криптоанализа на протяжении времени; стойкость математической модели и существования практических способов атак.
  • Сложность шифра и пригодности к программной или аппаратной реализации. В случае аппаратной реализации сложность шифра может быть оценена в числе использованных вентилей или энергопотреблении. Эти параметры важны для устройств, ограниченных в ресурсах.
  • Производительность шифра, выраженная в пропускной способности шифра на различных платформах и потребляемой памяти.
  • Стоимость шифра, которая может быть обусловлена лицензионными требованиями в соответствии с интеллектуальной собственностью.
  • Гибкость шифра, связанная со способностью поддерживать множество длин ключей и блоков.

Lucifer / DES[править | править код]

Шифр Lucifer в целом рассматривается в качестве первого блочного шифра. Алгоритм разработан компанией IBM в 1970-х годах для собственных нужд и основан на работе Хорста Фейстеля (англ. Horst Feistel). Доработанная версия была принята как американский правительственный федеральный стандарт обработки информации: FIPS PUB 46 Data Encryption Standard (DES) — стандарт шифрования данных.

DES имеет размер блока 64 бит и ключ 56 бит. Впоследствии 64-битные блоки стали общепринятыми при построении шифра. Длина ключа зависела от нескольких факторов, в том числе от правительственных ограничений, и в результате стала очевидным недостатком алгоритма — её оказалось недостаточно, чтобы противостоять атакам полным перебором. В 1993 году Майкл Винер спроектировал машину стоимостью 1 миллион долларов, способную взломать DES за 3,5 часа грубой силой, и в 1998 году машина[en], способная к взлому, была построена. К тому же, для ключей алгоритма существует ряд значений, считающимися слабыми[6].

Существует улучшенная версия алгоритма, называемая Triple DES или 3DES. Скорость алгоритма снизилась трижды, но система оказалась значительно более устойчива к полному перебору за счёт утроенной длины ключа (168 бит и 112 секретных бит). Опционально можно выбрать удвоенный ключ (112 бит и 80 секретных бит). По состоянию на 2011 год трехключевая система сохраняет свою безопасность, однако двуключевая версия с 80-битным уровнем безопасности больше не удовлетворяет современным требованиям[28].

ГОСТ 28147-89[править | править код]

K_i = E_K(nonce

ГОСТ 28147-89 — российский стандарт шифрования, введенный в 1990 году, также является стандартом СНГ. Шифр основан на 32-раундовой сети Фейстеля c 256-битным ключом. В мае 2011 года криптоаналитиком Николя Куртуа была предпринята попытка атаки, снижающая время взлома в 28 (256) раз, но требующая 264 пар открытого/шифрованного текста, что не может рассматриваться как успешная атака, так как при наличии такого количества открытого текста нет необходимости в знании шифротекста.[29][30]

Из-за наличия большого количества раундов, атаки на основе дифференциального и линейного криптоанализа не состоятельны, так как последние чувствительны к числу раундов. Полный перебор при такой длине ключа полностью лишен смысла. Для достижения лавинного эффекта ГОСТу требуется 8 раундов, что может быть слабостью алгоритма, но при 32 раундах это не имеет столь сильного значения. Вопрос о безопасности ГОСТа остается открытым[6].

AES / Rijndael[править | править код]

AES, принятый NIST в 2001 году после 5-летнего общественного конкурса, заменил собой шифр DES как федеральный стандарт соединенных штатов. Шифр разработан двумя бельгийскими криптографами Дайменом Йоаном и Рэйменом Винсентом. Размер блока составляет 128 бит и размер ключа 128, 192 и 256 бит, несмотря на то, что размер блока может быть определён любым числом бит, кратным 32, с минимальным значением 128 бит. Максимальный размер блока равен 256 бит, при этом размер ключа не имеет теоретического предела. Поддержка данного шифра введена компанией Intel в семейство процессоров x86.

Связь с другими криптографическими примитивами[править | править код]

Блочный шифр может быть использован для построения других криптографических примитивов[en]*:

  1. ↑ Шнайер, 2002, Типы алгоритмов и криптографические режимы.
  2. 1 2 Баричев, Гончаров, Серов, 2011.
  3. 1 2 3 Габидулин, Кшевецкий, Колыбельников, 2011.
  4. ↑ Block Ciphers — Introduction and overview — http://cacr.uwaterloo.ca/hac/about/chap7.pdf
  5. Shannon C. Communication Theory of Secrecy Systems // Bell Syst. Tech. J. — Short Hills, N.J., etc: 1949. — Vol. 28, Iss. 4. — P. 656–715. — ISSN 0005-8580 — doi:10.1002/J.1538-7305.1949.TB00928.X
  6. 1 2 3 4 5 6 7 Шнайер, 2002.
  7. ↑ Фомичёв, 2003.
  8. Cusick, Thomas W. & Stanica, Pantelimon. Cryptographic Boolean functions and applications (англ.). — Academic Press, 2009. — P. 158—159. — ISBN 9780123748904.
  9. ↑ Шнайер, 2002, Стандарт ширования DES.
  10. Junod, Pascal & Canteaut, Anne. Advanced Linear Cryptanalysis of Block and Stream Ciphers (англ.). — IOS Press (англ.)русск., 2011. — P. 2. — ISBN 9781607508441.
  11. Keliher, Liam et al. Modeling Linear Characteristics of Substitution-Permutation Networks // Selected areas in cryptography: 6th annual international workshop, SAC’99, Kingston, Ontario, Canada, August 9-10, 1999 : proceedings (англ.) / Hays, Howard & Carlisle, Adam. — Springer (англ.)русск., 2000. — P. 79. — ISBN 9783540671855.
  12. Baigneres, Thomas & Finiasz, Matthieu. Dial ‘C’ for Cipher // Selected areas in cryptography: 13th international workshop, SAC 2006, Montreal, Canada, August 17-18, 2006 : revised selected papers (англ.) / Biham, Eli & Yousseff, Amr. — Springer (англ.)русск., 2007. — P. 77. — ISBN 9783540744610.
  13. Cusick, Thomas W. & Stanica, Pantelimon. Cryptographic Boolean functions and applications (англ.). — Academic Press, 2009. — P. 164. — ISBN 9780123748904.
  14. Katz, Jonathan; Lindell, Yehuda. Introduction to modern cryptography (неопр.). — CRC Press, 2008. — ISBN 9781584885511., pages 166—167.
  15. ↑ Баричев, Гончаров, Серов, 2011, с. 21.
  16. ↑ Block Cipher Modes (неопр.). NIST Computer Security Resource Center. Архивировано 19 ноября 2012 года.
  17. ↑ Menezes, van Oorschot, Vanstone, 1996, pp. 228–233.
  18. ↑ ISO/IEC 10116:2006 Information technology — Security techniques — Modes of operation for an n-bit block cipher
  19. ↑ Morris Dworkin (December 2001), «Recommendation for Block Cipher Modes of Operation – Methods and Techniques», Special Publication 800-38A (National Institute of Standards and Technology (NIST)), <http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf> 
  20. ↑ «Kryptographische Verfahren: Empfehlungen und Schlüssellängen», BSI TR-02102 (no. Version 1.0), June 20, 2008 
  21. Serge Vaudenay. Security Flaws Induced by CBC Padding Applications to SSL, IPSEC, WTLS… (англ.) // Advances in Cryptology – EUROCRYPT 2002, Proc. International Conference on the Theory and Applications of Cryptographic Techniques : journal. — Springer Verlag, 2002. — No. 2332. — P. 534—545.
  22. ISO/IEC 9797-1: Information technology – Security techniques – Message Authentication Codes (MACs) – Part 1: Mechanisms using a block cipher, ISO/IEC, 2011, <http://www.iso.org/iso/iso_catalogue/catalogue_ics/catalogue_detail_ics.htm?csnumber=50375> 
  23. Kenneth G. Paterson; Gaven J. Watson. Immunising CBC Mode Against Padding Oracle Attacks: A Formal Security Treatment (англ.) // Security and Cryptography for Networks – SCN 2008, Lecture Notes in Computer Science : journal. — Springer Verlag, 2008. — No. 5229. — P. 340—357.
  24. Martin, Keith M. Everyday Cryptography: Fundamental Principles and Applications (англ.). — Oxford University Press, 2012. — P. 114. — ISBN 9780199695591.
  25. Paar, Cristof et al. Understanding Cryptography: A Textbook for Students and Practitioners (англ.). — Springer (англ.)русск., 2010. — P. 30. — ISBN 9783642041006.
  26. ↑ Menezes, van Oorschot, Vanstone, 1996, p. 227.
  27. ↑ James Nechvatal, Elaine Barker, Lawrence Bassham, William Burr, Morris Dworkin, James Foti, Edward Roback (October 2000), Report on the Development of the Advanced Encryption Standard (AES), National Institute of Standards and Technology (NIST), <http://csrc.nist.gov/archive/aes/round2/r2report.pdf> 
  28. ↑ NIST Special Publication 800-57 Recommendation for Key Management — Part 1: General (Revised), March, 2007
  29. ↑ Nicolas T. Courtois. Security Evaluation of GOST 28147-89 In View Of International Standardisation. Cryptology ePrint Archive: Report 2011/211
  30. ↑ SecurityLab: Взломан блочный шифр ГОСТ 28147-89
  31. ↑ ISO/IEC 10118-2:2010 Information technology — Security techniques — Hash-functions — Part 2: Hash-functions using an n-bit block cipher
  32. ↑ Menezes, van Oorschot, Vanstone, 1996, Chapter 9: Hash Functions and Data Integrity.
  33. ↑ NIST Special Publication 800-90A Recommendation for Random Number Generation Using Deterministic Random Bit Generators
  34. ↑ Menezes, van Oorschot, Vanstone, 1996, Chapter 5: Pseudorandom Bits and Sequences.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *