способ шифрования блоков данных
Классы МПК: | H04L9/06 шифровальные устройства, использующие регистры сдвига или запоминающие устройства для блочного кодирования, например системы на основе стандарта шифрования данных |
Автор(ы): | Молдовян Александр Андреевич[RU], Молдовян Николай Андреевич[RU], Молдовяну Петр Андреевич[MD] |
Патентообладатель(и): | Государственное унитарное предприятие Специализированный центр программных систем "Спектр" (RU), Молдовян Александр Андреевич (RU), Молдовян Николай Андреевич (RU) |
Приоритеты: |
подача заявки:
1997-04-02 публикация патента:
20.05.1998 |
Изобретение относится к области электросвязи и вычислительной техники, а конкретнее к области криптографических способов и устройств для шифрования данных. Целью изобретения является повышение скорости шифрования недетерминированных программных шифтов. Способ включает формирование ключа шифрования в виде совокупности K подключей, генерирование машинного кода программы шифрования, разбиение блока данных на N подблоков и поочередное преобразование подблоков. Отличается от известных способов тем, что дополнительно формируют двоичные векторы двух типов, выбирают номер l, где l K, подключа по структуре двоичного вектора первого типа, с помощью бинарной операции накладывают l-й подключ на двоичный вектор второго типа и преобразуют i-й подблок, где i N, путем наложения на него с помощью бинарной операции двоичного вектора второго типа с изменной структурой. Двоичный вектор первого типа формируют по структуре i-го подблока и по значению номера подключа, использованного на предыдущем шаге наложения. Двоичный вектор второго типа формируют по структуре i-го подблока и по структуре, которую он имел на предыдущем шаге наложения на подблок. 5 з.п. ф-лы, 3 ил.
Рисунок 1, Рисунок 2, Рисунок 3
Формула изобретения
1. Способ шифрования блоков данных, заключающийся в формировании ключа шифрования в виде совокупности К подключей и генерировании машинного кода программы шифрования, с помощью которых преобразуют N подблоков, из которых состоит блок данных, отличающийся тем, что дополнительно формируют двоичные векторы первого и второго типа, выбирают номер l (lК) подключа по структуре двоичного вектора первого типа, с помощью бинарной операции преобразуют двоичный вектор второго типа путем наложения на него l-го подключа и преобразуют i-тый подблок, где iN, путем наложения на него с помощью бинарной операции преобразованного двоичного вектора второго типа. 2. Способ по п. 1, отличающийся тем, что двоичный вектор первого типа формируют по структуре j-того подблока. 3. Способ по п. 1, отличающийся тем, что двоичный вектор первого типа формируют по структуре двоичного вектора второго типа. 4. Способ по п. 1, отличающийся тем, что двоичный вектор первого типа формируют по структуре j-того подблока и по значению номера подключа, использованного на предыдущем шаге наложения. 5. Способ по п.1, отличающийся тем, что двоичный вектор второго типа формируют по структуре j-того подблока. 6. Способ по п.1, отличающийся тем, что двоичный вектор второго типа формируют по структуре, которую он имел на предыдущем шаге наложения на подблок.Описание изобретения к патенту
Изобретение относится к области электросвязи и вычислительной техники, а конкретнее к области криптографических способов и устройств для шифрования сообщений (информации). В совокупности признаков заявляемого способа используются следующие термины:секретный ключ (или пароль) представляет из себя комбинацию битов, известную только законному пользователю;
шифрключ (ключ шифрования) представляет из себя комбинацию битов, используемую при шифровании информационных сигналов данных; шифрключ является сменным элементом шифра и используется для преобразования данного сообщения или данной совокупности сообщений; шифрключ является известным только законному пользователю или может быть выработан по детерминированным процедурам по паролю;
шифр представляет собой совокупность элементарных шагов преобразования входных данных с использованием шифрключа; шифр может быть реализован в виде программы для ЭВМ или в виде отдельного устройства;
подключ представляет собой часть шифрключа, используемую на отдельных элементарных шагах шифрования;
расписание использования шифрключа (или подключей) представляет собой последовательность использования подключей в процессе шифрования;
шифрование есть процесс, реализующий некоторый способ преобразования данных с использованием шифрключа, переводящий данные в криптограмму, представляющую собой псевдослучайную последовательность знаков, из которой получение информации без знания шифрключа практически невыполнимо;
дешифрование есть процесс, обратный процедуре шифрования; дешифрование обеспечивает восстановление информации по криптограмме при знании шифрключа;
криптостойкость является мерой надежности защиты информации и представляет собой трудоемкость, измеренную в количестве элементарных операций, которые необходимо выполнить для восстановления информации по криптограмме при знании алгоритма преобразования, но без знания шифрключа;
криптоаналитик - лицо, пытающееся восстановить информацию по шифртексту без знания ключа шифрования. двоичный вектор - это некоторая последовательность нулевых и единичных битов, например 101101011; конкретная структура двоичного вектора может быть интерпретирована как двоичное число, если считать, что позиция каждого бита соответствует двоичному разряду, т.е. двоичному вектору может быть сопоставлено численное значение, которое определяется однозначно структурой двоичного вектора;
машинный код программы - последовательность нулевых и единичных битов, интерпретируемая как последовательность машинных команд и непосредственно управляющая работой вычислительного устройства, например микропроцессора, по выполнению заданного алгоритма преобразования данных. Известны способы блочного шифрования данных: стандарт США DES (Деффи У., Хеллмэн М. Э. Защищенность и имитостойкость. Введение в криптографию. - ТИИЭР, 1979 т. 67, N 3, с. 87-89); шифр FEAL-1 и криптоалгоритм B-Crypt (Мафтик С. Механизмы защиты в сетях ЭВМ.- М.: Мир, 1993, с. 49-52); Российский стандарт шифрования (Стандарт СССР ГОСТ 28147-89. Системы обработки информации. Защита криптографическая. Алгоритм криптографического преобразования). В известных способах шифрование блоков данных выполняют путем формирования ключа шифрования в виде совокупности подключей, разбиения преобразуемого блока данных на подблоки и поочередного изменения последних с помощью операций подстановки и перестановки, а также арифметических операций, выполняемых над текущим подблоком и текущим подключом. Однако в известных способах-аналогах процедуры шифрования одинаковы для всех пользователей, и стойкость шифрующего преобразования обеспечивается только секретностью ключа шифрования. Тот факт, что алгоритм шифрования является предопределенным, позволяет криптоаналитику детально исследовать статистические свойства используемых процедур шифрования, выявить характерные особенности алгоритма шифрования и использовать их для раскрытия шифрключей. Например, криптоаналитик имеет возможность эффективно применять дифференциальный криптоанализ (Berson T.A. Differential Cryptanalysis Mod 232 with application to MD5. - EUROCRYPT"92. Hungary, May 24-28, 1992, Proceedings, p. 67-68). Наиболее близким по своей технической сущности к заявляемому способу блочного шифрования является способ, описанный в патенте США N 5222139 от 22.06.93 г. , в котором для противодействия наиболее сильным способам криптоанализа, которые основаны на предварительном анализе свойств конкретных наборов шифрующих процедур, совокупность используемых процедур шифрования (составляющих уникальный для данного пользователя алгоритм шифрования) выбирается в зависимости от секретного ключа пользователя. Криптоаналитику являются известными правила формирования алгоритма шифрования, однако ему неизвестен секретный ключ пользователя, а следовательно, является неизвестной и конкретная модификация алгоритма шифрования, сформированного в зависимости от секретного ключа. Способ-прототип включает в себя формирование ключа шифрования в виде совокупности подключей, генерацию машинного кода программы шифрования, разбиение входного 64-битового блока данных на два 32-битовых подблока и поочередное преобразование подблоков. Способ-прототип реализуется на базе библиотеки заранее описанных шифрующих процедур, являющихся возможными фрагментами программы шифрования. Библиотека шифрующих процедур включает в себя таблицы операций подстановок (или операций замещения в терминах описания патента США N 5222139) и перестановок элементов преобразуемого блока данных, операции циклического смещения вправо и влево битов преобразуемых подблоков, а также операции поразрядного сложения по модулю два или сложения по модулю 232, выполняемых между подблоком и одним из подключей. Генерация машинного кода состоит в следующем. В зависимости от секретного ключа пользователя выбираются некоторые шифрующие процедуры, устанавливается очередность их выполнения и число циклов выполнения каждой из них. После этого генерируется машинный код, который соответствует выполнению установленного по секретному ключу алгоритма преобразования блоков данных. В наборах шифрующих процедур расписание использования подключей является фиксированным, т.е. в формируемых модификациях шифрующих процедур подключи входят в процедуры преобразования независимо от преобразуемых данных (для всех блоков данных на заданных шагах использования подключей выбираются одни и те же подключи). Задание непредопределенности (недетерминированности) алгоритма шифрования существенно повышает стойкость шифра. Чем больше число потенциально реализуемых модификаций процедур шифрования, тем выше стойкость шифра, поскольку выбор конкретной модификации является случайным (так как зависит от случайно выбираемого секретного ключа). Однако способ-прототип имеет недостатки, а именно при программной реализации при числе возможных модификаций алгоритма шифрования более 109 он не обеспечивает высокой скорости шифрования, необходимой для построения программных систем защиты компьютерной информации, работающих в масштабе реального времени. Данный недостаток связан с тем, что в способе-прототипе число модификаций зависит от скорости шифрования: при скорости шифрования около 4 Мбит/с (для вычислительного комплекса HITTACHI Workstation 2050/32, являющегося более производительным по сравнению с ЭВМ на базе массового процессора Intel 486/100) число потенциально возможных модификаций составляет около 1019. Повышение скорости шифрования может быть достигнуто сокращением числа последовательно выполняемых составных шифрующих процедур, однако уменьшение их числа приводит к снижению неопределенности в выборе модификации алгоритма шифрования. При увеличении скорости, например, до 8 Мбит/с число возможных модификаций составляет всего около 109, т.е. вклад того фактора, что алгоритм шифрования не является предопределенным, в стойкость шифра резко падает. Цель изобретения - разработка способа блочного шифрования данных, обеспечивающего повышение скорости шифрования при числе потенциально реализуемых неэквивалентных модификаций алгоритма шифрования более 1020. Поставленная цель достигается тем, что в известном способе блочного шифрования, заключающемся в формировании ключа шифрования в виде совокупности K подключей, генерировании машинного кода программы шифрования, разбиении блока данных на N подблоков и поочередном преобразовании подблоков, дополнительно формируют двоичные векторы двух типов. Выбирают номер l, где l = 1, 2, 3,..., K, подключа по структуре двоичного вектора первого типа и с помощью бинарной операции накладывают l-й подключ на двоичный вектор второго типа. После этого преобразуют очередной подблок (например, i-й подблок Bi, где iN) путем наложения на данный подблок преобразованного двоичного вектора второго типа. Под формированием двоичного вектора первого типа понимается выделение в структуре подблока или в структуре двоичного вектора второго типа группы разрядов, численное значение которых берется в качестве номера подключа, накладываемого на подблок, или явное формирование двоичного вектора первого типа в отдельном регистре или ячейке памяти вычислительного устройства. Например, неявное формирование двоичного вектора первого типа заключается в следующем: подблок В имеет структуру {10110...11010011} и 8 младших двоичных разрядов, а именно двоичный вектор {11010011} используется в качестве номера выбираемого подключа без записи этого двоичного вектора в отдельный регистр или ячейку памяти. Могут быть использованы следующие три варианта формирования двоичного вектора первого типа:
1. Двоичный вектор первого типа формируют по структуре j-го подблока Bj, где 1 j N. Например, используют значение восьми младших разрядов в качестве номера выбираемого подключа;
2. Двоичный вектор первого типа формируют по структуре двоичного вектора второго типа. Например, вычисляют значение l = (V mod 28), где операция mod A обозначает остаток от деления численного значения двоичного вектора второго типа V на число A. Значение l используют в качестве номера выбираемого подключа;
3. Двоичный вектор первого типа формируют по структуре j-го подблока Bj, где 1 j N, и по значению номера подключа, наложенного на подблок на предыдущем шаге наложения. Например, в качестве номера выбираемого подключа используют число, получаемое в результате наложения на номер l подключа, наложенного на предыдущем шаге наложения на подблок, значения остатка от деления значения Bj на 28 : l := l (Bj mod 28). Под формированием двоичного вектора второго типа понимается явное формирование двоичного вектора второго типа в отдельном регистре или ячейке памяти вычислительного устройства. Могут быть использованы следующие два варианта формирования двоичного вектора второго типа:
1. Двоичный вектор второго типа формируют по структуре подблока Bj, где j N. Например, выделяют 32-разрядный регистр для хранения значения двоичного вектора второго типа V, записывают в него некоторое начальное число, используя операцию поразрядного суммирования по модулю два (oplus), преобразуют значение V путем наложения подблока Bj на V : V := V Bj. Возможен вариант, в котором структура подблока Bj предварительно записывается в дополнительную ячейку, соответствующую переменной G, после чего на V накладывают G : V := V G;
2. Двоичный вектор второго типа формируют по структуре, которую он имел на предыдущем шаге наложения на подблок. Например, выделяют 32-разрядный регистр для хранения значения двоичного вектора второго типа V, записывают в него некоторое начальное число A: V := A. Используя операцию поразрядного суммирования по модулю два (oplus) накладывают на V подключ : V := V . Затем накладывают V на подблок Bi : Bi := Bi V. Структура, которую имел вектор V на этом шаге наложения на подблок, сохраняется и на V накладывают следующий подключ : V := V . После наложения V на очередной подблок структура V опять сохраняется, на V накладывается очередной подключ и т.д. до завершения преобразования всех подблоков. Перечисленная совокупность существенных признаков обеспечивает более высокую скорость шифрования при равном или большем числе возможных модификаций алгоритма шифрования благодаря следующему. Расписание использования подключей для каждого блока данных является непредопределенным и уникальным, что обеспечивает высокую стойкость ко всем известным способам криптоанализа, включая дифференциальный криптоанализ, при использовании даже простых арифметических операций, которые быстро выполняются микропроцессором. Смысл выбора подключа, который накладывается на подблок на текущем шаге, по специально формируемому двоичному вектору состоит в том, чтобы сделать выбор подключа непредопределенным для каждого шага преобразования подблоков. Это обеспечивает высокую стойкость шифрования при любых наборах операций, используемых для наложения подключей на подблоки, и поэтому позволяет произвольно модифицировать операции преобразования. При использовании такого механизма выборки подключей модифицирование алгоритма шифрования можно выполнить путем выбора конкретной совокупности операций преобразования подблоков в зависимости от секретного ключа пользователя. После формирования совокупности операций преобразования осуществляется генерирование машинного кода программы шифрования, соответствующей выполнению этих операций преобразования. При этом каждая возможная модификация алгоритма шифрования обладает высокой стойкостью к известным способам криптоанализа, поскольку для всех возможных модификаций алгоритма шифрования выборка подключей зависит от преобразуемого блока и от шифрключа. Непредопределенность для криптоаналитика выбора конкретной модификации и большое число модификаций делают практически невозможным предварительное исследование статистических свойств каждой из них. Этим обусловливается существенное дополнительное повышение стойкости шифра в целом. Заявляемый способ позволяет построить недетерминированные шифры с числом возможных модификаций алгоритма шифрования более 1020, при этом каждая модификация обеспечивает скорость шифрования не менее 20 Мбит/с. Отличительные признаки заявляемого способа совпадают с отличительными признаками способа шифрования (заявка N 97101622. - Молдовян А.А. и др. Способ криптографического преобразования блоков данных), однако использование этих признаков для получения технического результата, заключающегося в получении большого числа неэквивалентных модификаций алгоритма шифрования, каждая из которых обладает высокой скоростью, не является очевидной. Возможность технической реализации заявляемого способа блочного шифрования поясняется следующим образом. Заявляемый способ ориентирован на шифрование входных блоков с помощью не повторяющихся комбинаций подключей, а именно на задание зависимости расписания использования подключей от структуры блока данных и от ключа шифрования, т. е. на задание псевдослучайной выборки подключей. Этот способ позволяет получить высокую скорость шифрования при использовании ключей шифрования длиной, например, от 256 до 2050 байт. Формирование шифрключа можно осуществить непосредственно вводя его в шифрующую систему, например со съемного носителя информации. Формирование шифрключа можно также осуществить путем ввода пароля (или секретного ключа) с клавиатуры или с машинного носителя информации в генератор псевдослучайных чисел, получая на выходе шифрключ необходимого размера и дополнительную псевдослучайную последовательность, используемую для формирования необходимого набора операций преобразования. Известен ряд способов построения генераторов псевдослучайных чисел (Брикелл Э. Ф., Одлижко Э.М. Криптоанализ. Обзор новейших результатов. - ТИИЭР, 1988, т. 76, N 5, с. 87-89). Дополнительную псевдослучайную последовательность можно использовать для формирования алгоритма шифрования следующим образом. Предварительно составляется программа-шаблон, где зарезервированы места, в которых предусмотрена возможность записи любой из некоторого набора операций (например, бинарных операций). Все зарезервированные места (под операции преобразования) нумеруют. Поочередно, начиная с первой, все операции настраивают в зависимости от значения элемента дополнительной псевдослучайной последовательности, имеющего номер, совпадающий с номером настраиваемой операции. Например, бинарная операция, используемая для наложения подключа на подблок, устанавливается как операция поразрядного суммирования по модулю два ( ), если di mod 3 = 0, где di - значение соответствующего элемента дополнительной псевдослучайной последовательности, либо как операция суммирования по модулю 232 (+), если di mod 3 = 1, либо как операция вычитания по модулю 232 (-), если di mod 3 = 2. В процедурах настройки алгоритма дешифрования настраиваются операции, являющиеся обратными по отношению к соответствующим операциям, настраиваемым в алгоритме шифрования. Для этого бинарная операция в алгоритме дешифрования устанавливается как операция поразрядного суммирования по модулю два ( ), если di mod 3 = 0, либо как операция вычитания по модулю 232 (-), если di mod 3 = 1, либо как операция суммирования по модулю 232 (+), если di mod 3 = 2. После того, как в программе шифрования, записанной на алгоритмическом языке (например, на языке СИ или Паскаль), установлены операции преобразования во всех зарезервированных местах, генерируется машинный код, соответствующий программе шифрования, используя, например, транслятор, преобразующий программу, составленную на алгоритмическом языке, в последовательность машинных команд. Шифрключ и машинный код программы шифрования записываются в оперативную память ЭВМ (или специализированного шифрующего устройства) и находятся там постоянно в течение всего времени работы данного пользователя, выполняя преобразование поступающих для шифрования блоков данных. Сложность процедур формирования ключа шифрования и генерирования машинного кода программы шифрования не влияет на скорость шифрования, поскольку эту процедуру выполняют однократно при идентификации пользователя по паролю в момент включения шифрующего устройства или вызова шифрующей программы. Заявляемый способ может быть реализован с помощью ЭВМ или вычислительного устройства, представленного блок-схемой на фиг. 1, где:
блок 1 - устройство ввода пароля пользователя;
блок 2 - блок формирования шифрключа и генерирования машинного кода программы шифрования (блок настройки шифра);
блок 3 - блок памяти устройства шифрования;
блок 4 - операционный блок устройства шифрования, содержащий три, четыре или более регистра;
блок 5 - устройство шифрования;
6 - шина передачи информационных сигналов пароля пользователя;
7 - шина передачи информационных сигналов сформированного шифрключа и информационных сигналов сформированного машинного кода программы шифрования;
8 - шина передачи информационных сигналов подключей и передачи информационных сигналов входных данных и информационных сигналов преобразуемых подблоков;
9 - шина адресации;
10 - шина передачи информационных сигналов машинного кода программы шифрования;
11 - шина ввода входных данных;
12 - шина вывода шифртекста. Используя блок 1, вводят секретный ключ, информационный сигнал которого по шине 6 подают на вход блока 2. В блоке 2 формируют шифрключ и машинный код программы шифрования. Информационный сигнал шифрключа и информационный сигнал машинного кода программы шифрования по шине 7 передают в блок памяти 3. После этого устройство шифрования 5 содержит в памяти шифрключ и готово к выполнению операций шифрования. Данное инициализированное состояние устройства сохраняется в течение всего времени работы законного пользователя. Входной блок вводят по шине 11 в операционный блок 4 и затем по шине 8 - в блок памяти 3. Блок шифртекста считывается с шины 12. По шине 10 в операционный блок 4 передают коды машинных команд для выполнения процедур преобразования. Входной блок данных представляют в виде совокупности подблоков, записанных по фиксированным адресам в блок памяти 3. Информационные сигналы подблока Bj по шине 8 вводят в первый регистр операционного блока 4 (в случае ЭВМ - в один из регистров микропроцессора). Во втором регистре формируют двоичный вектор первого типа, например записывая в него содержимое 8 младших разрядов подблока Bj. В четвертый регистр вводят подблок Bi. В третьем регистре блока 4 формируют двоичный вектор второго типа, например путем записи в регистр 1-го подключа. Информационные сигналы двоичного вектора первого типа подают на шину адресации 9 и тем самым задают выбор номера l текущего подключа Ql по значению двоичного вектора первого типа. На двоичный вектор второго типа накладывают с помощью бинарной операции подключ, расположенный по адресу, установленному во втором регистре, т.е. по значению двоичного вектора первого типа. Подблок Bi преобразуют путем наложения на него с помощью бинарной операции двоичного вектора второго типа, структура которого была предварительно преобразована наложением на него подключа. После этого переходят к преобразованию следующего подблока. На каждом новом шаге преобразования текущего подблока в третьем регистре аккумулируется значение еще одного подключа, выбираемого по текущей структуре подблока Bj. Под наложением понимается выполнение бинарной операции между двумя операндами, например подблоком Bi и двоичным вектором второго типа V, и замене исходного значения первого операнда на значение результата выполнения бинарной операции. Аналитически процедура наложения записывается в виде формулы Bi := BiV, где знак обозначает бинарную операцию; знак := - операцию присваивания. Схема наложения показана на фиг.2, где 1 - подблок Bi с исходной структурой; 2 - двоичный вектор второго типа V; 3 - блок, выполняющий бинарную операцию ; 4 - подблок Bi с измененной структурой. В качестве бинарной операции могут быть использованы простые арифметические операции сложения (+) и вычитания (-) по модулю 232, поразрядного суммирования по модулю 2, которые быстро исполняются микропроцессором. Могут быть использованы также более сложные бинарные операции, определенные на основе комбинирования перечисленных арифметических операций и быстро выполняемых унарных операций, т.е. операций над одним двоичным вектором. Например, в качестве унарной операции может быть применена операция циклического сдвига операнда X на d бит, обозначаемая выражением X>>d>>, где 1 d b-1, здесь b - размер операнда X в битах. Например, бинарную операцию над 32-битовыми векторами можно определить в следующих вариантах, соответствующих формулам:
X Y = (X>>11>>) Y, (1)
X Y = (X>>11>>) + Y, (2)
X Y = (X>>1>>) (Y>>21>>) (3)
На фиг.3 показана структура бинарной операции, задаваемой формулой (3), где блоки 1 и 2 - входные операнды X и Y, блок 3 выполняет операцию циклического сдвига на 1 бит вправо, блок 4 выполняет операцию циклического сдвига на 7 бит вправо, блок 5 выполняет операцию поразрядного суммирования по модулю два, блок 6 выполняет составную бинарную операцию . Использование в заявляемом способе более сложных бинарных операций, задаваемых путем комбинирования указанных трех арифметических бинарных операций и унарной операции циклического сдвига вправо на число бит от 1 до 31, позволяет задать очень большое число реализуемых модификаций алгоритма шифрования. При этом обеспечивается высокая скорость шифрования, поскольку указанные операции сложения, вычитания, поразрядного суммирования по модулю два и операция циклического сдвига выполняются современными массовыми процессорами за малое число машинных тактов. Формируемый двоичный вектор первого типа имеет структуру, зависящую от подблока Bj или от структуры двоичного вектора второго типа. В вариантах заявляемого способа, в которых задано формирование двоичного вектора первого типа, по структуре двоичного вектора второго типа используется вариант формирования двоичного вектора второго типа по структуре подблока Bj. Это задает зависимость выбора текущего подключа, накладываемого на подблок Bi, от структуры подблока Bj. Поскольку структура Bj в ходе преобразования изменяется в зависимости от выбираемых подключей, то это обусловливает псевдослучайный характер изменения номера подключа, выбираемого на текущем шаге выборки. Формируемый двоичный вектор второго типа имеет структуру, зависящую от совокупности подключей, выбранных на предыдущих шагах выборки, поэтому он принимает значения, отличные от значений подключей, причем двоичный вектор второго типа принимает число различных значений, равное примерно 232, если его длина составляет 32 бита, тогда как число подключей обычно составляет не более 212. Формирование двоичного вектора первого типа выполняется таким образом, что его структура зависит от структуры подблока Bj и поэтому задает зависимость выбора текущего подключа, накладываемого на подблок Bi от текущего состояния структуры подблока Bj. Это определяет зависимость выбора номеров текущих подключей от структуры входного блока данных и от ключа шифрования. Предлагаемый способ блочного шифрования легко реализуем, например, на персональных ЭВМ и обеспечивает возможность создания на его основе скоростных программных модулей шифрования, что позволяет решить ряд острых проблем защиты компьютерной информации. Пример 1. Данный пример относится к реализации блока настройки и представлен следующим алгоритмом, в котором используется заранее оговоренная последовательность 16-битовых слов {Zj}, где j = 0, 1, 2,..., 511, которая предполагается известной всем, в том числе и криптоаналитику. Алгоритм 1: формирование шифрключа и настройка операций преобразования. ВХОД: Пароль произвольной длины. 1. Установить значение числа раундов шифрования R. Повторить пароль несколько раз до получения последовательности длиной 1024 байт: {Pj}, j = 0, 1, 2, . . ., 511, где Pj - 16-битовое представление информационных сигналов соответствующей пары знаков пароля. 2. Вычислить управляющую последовательность: {Hj} = {Zj Pj}, установить счетчик r = 1 и определить {Rj} = {Pj}, j = 0, 1, 2,..., 511. 3. Установить счетчик i = 1 и вычислить начальные значения переменных G, Y, U:
G0 = (P1 - P9 mod 216, U0 = P11 P18, Y0 = (P21 + P36) mod 216. 4. Вычислить текущие значения переменных m, n, Y и U
mi = Ui-1 mod 29, ni = Yi-1 mod 29,
Yi = [(Yi-1 Pi-1 + ] mod 216,
Ui = {[Ui-1 + (Pi-1 div 27)] mod 216} . 5. Выполнить преобразование
Gi = {[(Pi-1 Yi)>>r>>) + Gi-1] mod 216} Ui. 6. Сохранить значение L(r)i-1 = Gi. 7. Если i < 512, то прирастить i и перейти к п. 4. 8. Если r < 7, то прирастить r, определить {Rj} = { L(r)511-j }, j = 0, 1, 2,..., 511, и перейти к п. 4. 9. Определить 2048-байтовую последовательность {Bl} : Bl = L(l5) для l = 0, 1, 2,..., 511; Bl = L(7)l-512 для l = 512, 513,..., 1023. 10. Для индексов f = 0, 1, 2,..., 31 вычислить
df = beff mod p,
где
знак обозначает конкатенацию (присоединение) двоичных векторов. 11. Представить последовательность { df}, f = 0, 1, 2,..., 31, в виде последовательности 16-битовых слов { Dl} , l = 0, 1, 2,..., 1023, где
12. Построить последовательность {Ql}: {Ql} = {Dl Pl} для l = 0, 1, 2, ..., 511, и {Ql} = {Dl Pl-512} для l = 512, 513,..., 1023. 13. Построить шифрключ { qh}, h = 0, 1, 2,..., 2050; q2l = Ql mod 28; q2l+1 = Ql div 28, l = 0, 1, 2,..., 1023; q2048 = L(03) mod 28, q2049 = L(13) mod 28 и q2050 = L(53) mod 28
14. Если L(3)f+40 mod 3 = 0, то определить операции f = f = и перейти к п. 16. 15. Если L(3)f+40 mod 3 = 1, то определить операции f = +(mod232) и f = -(mod232), в противном случае определить f = -(mod232) и f = +(mod232),
16. Если f < 12R, то прирастить f и перейти к п. 14. 17. Установить индекс h = 1. 18. Задать число сдвигаемых битов в операциях циклического сдвига вправо > uh > и влево < uh <: uh = Lh+100 mod 25. 19. Если uh = 0, то uh := h mod 25. 20. Если h < 6R, то прирастить h и перейти к шагу 18. 21. СТОП. ВЫХОД: 1. Шифрключ {qh}, h = 0, 1, 2, ..., 2050. 2. Набор настроенных операций > uh >, < uh <, f и f.
В шаблоне программы шифрования зарезервированы пронумерованные позиции f, , где f - порядковый номер, под бинарные операции преобразования и пронумерованные позиции под операции циклического сдвига вправо > uh >, где h - порядковый номер. Причем в шаблоне программы шифрования зарезервированные позиции пронумерованы последовательно, начиная с начала шаблона программы в сторону его конца. В шаблоне программы дешифрования зарезервированные позиции под бинарные операции f и операции циклического сдвига влево < uh < пронумерованы в обратном порядке, начиная с конца шаблона программы дешифрования. Шаблон программы дешифрования содержит все процедуры шаблона программы шифрования, но заданы они в обратном порядке. Шифрующая и соответствующая ей дешифрующая программа составляют единую криптографическую программу. После того как в зарезервированных позициях шаблона криптографической программы установлены конкретные операции преобразования, осуществляется запуск транслятора команд с алгоритмического языка на язык машинных команд и, таким образом, завершается генерирование кода программы шифрования. Машинный код программы шифрования записывается в оперативную память ЭВМ, которая под его управлением выполняет шифрование блоков данных по мере их поступления для преобразования. Процедуры шифрования и ключ шифрования сформированы в зависимости от секретного ключа (пароля) пользователя, т.е. являются уникальными, что обеспечивает высокую сложность криптоанализа. Возможны также вариант предварительного формирования шаблона машинного кода и запись его в оперативную память. В этом случае после записи шаблона машинного кода программы шифрования специальная программа настройки операций определяет адреса, по которым записаны коды операций, подлежащих модифицированию. В этом варианте генерации машинного кода программы шифрования пункт 14 означает: при выполнении указанного в нем соотношения записать информационные сигналы кода машинной операции в оперативную память по адресу, соответствующему зарезервированным операциям f и f.
Пункт 15 означает: если выполняются указанные условия, то записать информационные сигналы кодов машинных команд, соответствующих операциям + (mod 232) и - (mod 232), в оперативную память по адресу, соответствующему зарезервированным операциям f и f.
Пункт 18 соответствует генерации информационных сигналов параметров, управляющих величиной циклического сдвига и их записи в оперативную память по соответствующим адресам машинного кода программы шифрования. В шифрключе, сформированном по алгоритму 1, можно выделить 2048 32-битовых подключа, используя формулу Ql = В этом случае, формируя двоичный вектор первого типа длиной 11 бит, можно задать более высокую степень неопределенности выбора текущего подключа. Возможны варианты формирования двоичных векторов длиной до 16 бит, которые позволяют повысить скорость шифрования в сравнении с приводимыми ниже примерами на 70%, однако эти варианты имеют более ограниченное применение, поскольку требуют использования шифрключей длиной 64 кбайт. Оптимальным представляется использование шифрключей длиной 259 - 2051 байт. Пример 2. Второй пример поясняет процедуры шифрования. Входным сообщением является 512-байтовый блок, представленный как последовательность 128 32-битовых слов {Tj}, j = 0, 1, ..., 127. ВХОД: 512-байтовый блок данных {Bi}, i = 1, 2, 3,..., 128. 1. Установить счетчик числа раундов r = 1 и число раундов R = 4. 2. Установить счетчик s = 1, значение переменной G, начальное значение вектора первого типа l и начальные значения векторов второго типа U, V, Y: l = Q5 mod 211, U = Q1, V = Q2, Y = Q3, G = Q4. 3. Сформировать текущие значения двоичных векторов
4. Сформировать текущие значения двоичных векторов
5. Сформировать текущие значения двоичных векторов
6. Вычислить номер текущего преобразуемого подблока i = 129 - s, если r = 2, 4, или i = s, если r = 1, 3. 7. Наложить на подблок двоичные вектора первого типа U и Y:
8. Преобразовать G: G := Bi. 9. Наложить на подблок двоичный вектор первого типа V:
. 10. Если s < 128, то прирастить s и перейти к шагу 3. 11. Если r < R, то прирастить r и перейти к шагу 2. 12. СТОП. ВЫХОД: 512-байтовый блок шифртекста. Число возможных модификаций составляет более I > 1014R. Алгоритм дешифрования очевиден. Скорость шифрования составляет около 50/R Мбит/ с (для Intel 486/100). Параметр R задает число раундов шифрования. Допустимы значения R 2. При R = 2 скорость шифрования составляет около 25 Мбит/с, а число модификаций алгоритма шифрования - более 1028.
Класс H04L9/06 шифровальные устройства, использующие регистры сдвига или запоминающие устройства для блочного кодирования, например системы на основе стандарта шифрования данных