СПОСОБ ТРЕХМЕРНОГО НЕЛИНЕЙНОГО ПРЕОБРАЗОВАНИЯ ЗАМЕНЫ
METHOD FOR THREE-DIMENSIONAL NONLINEAR REPLACEMENT TRANSFORMATION

Изобретение относится к вычислительной технике и электросвязи, предназначено для решения задач защиты компьютерной информации. Наиболее предпочтительной областью использования изобретения является построение генераторов псевдослучайных чисел (ГПСЧ), а также криптографических примитивов хеширования, блочного и поточного шифрования.
В совокупности признаков заявленного изобретения используются следующие термины:
Стохастическое преобразование - непредсказуемое преобразование данных; примером стохастического преобразования может являться криптографическое преобразование;
Раунд - последовательность шагов, образующих одну итерацию итеративного (многораундового) преобразования;
n
Двоичный вектор - некоторая последовательность нулевых и единичных бит, например (01101010), двоичный вектор разрядности n может быть интерпретирован как элемент конечного поля GF(2);
n
n
Замена (Substitution) - операция, выполняемая над двоичным вектором i∈GF(2), при этом результат операции равен содержимому ячейки с индексом i таблицы замен размерности n×2.
Известен способ преобразования замены, описанный в Российском стандарте криптографической защиты информации [Стандарт СССР ГОСТ 28147-89. Системы обработки информации. Защита криптографическая. Алгоритм криптографического преобразования]. Способ-аналог включает в себя формирование 32-разрядного вектора, после чего над двоичным вектором F выполняют операцию замены F:=S(F), при этом операция замены выполняется следующим образом. Двоичный вектор F разбивается на 8 двоичных векторов длиной по 4 бит каждый. Каждый 4-разрядный двоичный вектор заменяется двоичным вектором из соответствующей таблицы замен размерности 4×16. Выбранные из таблиц замен восемь 4-разрядных векторов объединяются в преобразованный двоичный вектор F.
Недостатком данного способа является низкие криптостойкость и быстродействие, невозможность реализации с использованием гибридных суперкомпьютерных технологий.
x0
x1
x2
x3
y
y1
y2
y3
z0
z1
z2
z3
Наиболее близким по своей технической сущности к заявленному способу является принятый за прототип способ трехмерного преобразования [Иванов М.А., Ковалев А.В., Чугунков И.В. и др. Стохастические методы защиты информации в компьютерных системах и сетях. М.: Кудиц-Пресс, 2009, с.243-246], включающий представление входного блока M и всех промежуточных результатов преобразования разрядностью 512 бит в виде кубического массива; введение понятие слоя (Layer) - квадратного массива разрядностью 128 бит; выполнение трех раундов преобразования соответственно вдоль осей x, y, z; деление блока данных M перед выполнением преобразований первого раунда на 4 слоя L, L, L, L вдоль оси x; деление результата работы первого раунда перед выполнением преобразований второго раунда на 4 слоя L, L, L, L вдоль оси y; деление результата работы второго раунда перед выполнением преобразований третьего раунда на 4 слоя L, L, L, L вдоль оси z.
Недостатками известного решения является низкое быстродействие и ограниченные функциональные возможности.
К причинам, препятствующим достижению указанного ниже технического результата, относится недостаточная эффективность при реализации на основе гибридных суперкомпьютерных технологий из-за малой степени параллелизма на уровне инструкций и зависимость разрядности используемых блоков замены от разрядности обрабатываемых блоков данных.
Указанный технический результат при осуществлении изобретения достигается тем, что в многораундовом трехмерном преобразовании замены, включающем
3
представление входного блока M и всех промежуточных результатов преобразования разрядностью N (N>1) бит в виде кубического массива битов N×N×N;
введение понятие слоя (Layer) - квадратного массива битов N×N;
выполнение трех раундов преобразования соответственно вдоль осей x, y, z;
x0
x1
x(N-1)
деление блока данных М перед выполнением преобразований первого раунда на N слоев L, L, …, L вдоль оси х;
y0
y1
y(N-1)
деление результата работы первого раунда перед выполнением преобразований второго раунда на N слоев L, L, …, L вдоль оси y;
z0
z1
z(N-1)
деление результата работы второго раунда перед выполнением преобразований третьего раунда на N слоев L, L, …, L вдоль оси z;
дополнительно
i
N
формируют k таблиц замен S размерностью N×2 каждая, i=0, 1, …, (k-1), k≥1;
x0
x1
x(N-1)
в первом раунде выполняют N двухмерных преобразований замены слоев L, L, …, L;
y0
y1
y(N-1)
во втором раунде выполняют N двухмерных преобразований замены слоев L, L, …, L;
z0
z1
z(N-1)
в третьем раунде выполняют N двухмерных преобразований замены слоев L, L, …, L.
0
1
N
Новым также является то, что двумерное преобразование замены слоя L может выполняться за два раунда, при этом формируют две различные таблицы замен S и S размерностью N×2 каждая;
0
1
(N-1)
i
0
i
0
i
i
в первом раунде слой L делят на NN-разрядных векторов-строк R, R, …, R, каждый i-й N-разрядный вектор R, i=0, 1, …, (N-1), заменяют N-разрядным вектором из таблицы замен S в соответствии с выражением R=S(R), выбранные из таблицы замен N N-разрядных векторов R объединяют в преобразованный слой L;
0
1
i
1
i
во втором раунде слой L делят на NN-разрядных векторов-столбцов С, С, …, C(N-1), каждый i-й N-разрядный вектор C, i=0, 1, …, (N-1), заменяют N-разрядным вектором из таблицы замен S в соответствии с выражением С,=Si (С,), выбранные из таблицы замен N N-разрядных векторов C объединяют в преобразованный слой L, который выдают в качестве результата двумерного преобразования замены слоя L.
N
Новым также является то, что двумерное преобразование замены слоя L может выполняться за два раунда, при этом формируют таблицу замен S размерностью N×2;
0
1
(N-1)
i
i=
i
i
в первом раунде слой L делят на N N-разрядных векторов-строк R, R, …, R, каждый i-й N-разрядный вектор R, i=0, 1, …, (N-1), заменяют N-разрядным вектором из таблицы замен S в соответствии с выражением RS(R), выбранные из таблицы замен N N-разрядных векторов R объединяют в преобразованный слой L;
0
1
(N-1)
i
i
i
i
во втором раунде слой L делят на NN-разрядных векторов-столбцов C, С, …, C, каждый i-й N-разрядный вектор C, i=0, 1, (N-1), заменяют N-разрядным вектором из таблицы замен S в соответствии с выражением С=S(C), выбранные из таблицы замен N N-разрядных векторов C объединяют в преобразованный слой L, который выдают в качестве результата двумерного преобразования замены слоя L.
0
1
0
1
Новым также является то, что при выполнении трехмерного нелинейного преобразования замены могут использоваться две различные таблицы замен S и S размерностью N×2 каждая, при этом строки всех слоев заменяют с использованием таблицы замен S, а столбцы всех слоев заменяют с использованием таблицы замен S.
Новым также является то, что при выполнении трехмерного нелинейного преобразования замены
0
1
2
xi
0
yi
1
zi
2
n
могут использоваться три различные таблицы замен S, S и S размерностью N×2 каждая, при этом слои L, расположенные вдоль оси х, заменяют с использованием таблицы замен S; слои L, расположенные вдоль оси y, заменяют с использованием таблицы замен S, а слои L, расположенные вдоль оси z, заменяют с использованием таблицы замен S.
Новым также является то, что при выполнении трехмерного нелинейного преобразования замены
0
1
5
xi
0
xi
1
yi
2
yi
3
zi
4
zi
5
n
могут использоваться шесть различных таблиц замен S, S, …, S размерностью N×2 каждая, при этом строки слоев L, расположенных вдоль оси x, заменяют с использованием таблицы замен S; столбцы слоев L, расположенных вдоль оси x, заменяют с использованием таблицы замен S; строки слоев L, расположенных вдоль оси y, заменяют с использованием таблицы замен S; столбцы слоев L, расположенных вдоль оси y, заменяют с использованием таблицы замен S, строки слоев L, расположенных вдоль оси z, заменяют с использованием таблицы замен S; столбцы слоев L, расположенных вдоль оси z, заменяют с использованием таблицы замен S.
Таким образом, техническим результатом заявленного изобретения является увеличение быстродействия и расширение функциональных возможностей за счет увеличения разрядности блока данных, обрабатываемого одним блоком замены.
0
1
2
3
0
1
2
3
0
1
2
3
0
1
2
3
xk
yk
zk
xk
yk
zk
xk
yk
zk
x0
x1
x2
x3
x0
x2
x3
y0
y1
y2
y3
y0
y1
y2
y3
z0
z1
z2
z3
z0
z1
z2
z3
Суть предлагаемого способа иллюстрируют фиг.1-5. На фиг.1, 2 показан принцип двухмерного преобразования слоя, иначе говоря, принцип работы 2D S-блока при N=4. На фиг.1 показан блок 1 данных (слой) 4×4; строки 2, 2, 2, 2 слоя; столбцы 3, 3, 3, 3 слоя. На фиг.2 показаны преобразования замены 4, 4, 4, 4 строк, которые могут выполняться параллельно, и преобразования замены 5, 5, 5, 5 столбцов, которые также могут выполняться параллельно, входной 6 (исходный) и выходной 7 (преобразованный) блок данных (слой). На фиг.3-5 показан принцип трехмерного преобразования слоя, иначе говоря, принцип работы 3D S-блока при N=4. На фиг.3 показан блок 8 данных 4×4×4 и отдельный бит 9 блока 8 данных. На фиг.4 показано разделение на слои 10, 10, 10, k=0, 1, 2, 3, вдоль осей x, y, z и отдельные слои 10, 10, 10 (L, L, L). Ha фиг.5 показаны операции преобразования 11, 11, 11, 11 слоев 10, 10, 10 вдоль оси x, которые могут выполняться параллельно; операции преобразования 11, 11, 11, 11 слоев 10, 10, 10, 10 вдоль оси y, которые могут выполняться параллельно и операции преобразования 11, 11, 11, 11 слоев 10, 10, 10, 10 вдоль оси z, которые могут выполняться параллельно.
Рассмотрим последовательность выполнения двухмерного преобразования замены слоя, т.е. алгоритм функционирования 2D S-блока.
N
Представим входные 6 и выходные 7 блоки данных, а также все промежуточные результаты преобразований в виде квадратного массива битов 1 размерностью N×N, где N - разрядность используемых узлов замены. Таким образом, объем ключевой информации, однозначно определяющей логику работы каждого узла замены, равен N×2. На фиг.1 показан пример массива размерностью 4×4.
sq
Последовательность выполнения операции А=SubSquare[A] 11 (или кратко, А=S[A]), замены квадратного массива 10 битов A размерностью N×N, имеет следующий вид:
i
i
- Разбиение входного 6 массива A на N строк 2R длины N, i=0, 1, …, (N-1), (фиг.1);
i
i
i
i
i
i
- Преобразование 4 SubRows. Преобразование 4, каждого i-го N-разрядного двоичного набора 2R с использованием соответствующего узла замены S:R=S[R], i=0, 1, …, (N-1);
i
i
- Разбиение получившегося массива А=SnbRows[A] на N столбцов 3C длины N,i=0, 1, …, (N-1), (фиг.1);
i
i
i+N
i
i+N
i
- Преобразование 5 SubColumns. Преобразование 5, каждого i-го N-разрядного двоичного набора 3C с использованием соответствующего узла замены S:C=S[C], i=0, 1, …, (N-1);
- Результатом замены является 7 А=SnbColunms[A].
В частном случае, когда используется только одна таблица замен, т.е.=S, получаем следующий алгоритм:
i
i
- Разбиение входного 6 массива A на N строк 2R, длины N;
i
i
i
i
- Преобразование 4 SubRows. Преобразование каждого i-го N-разрядного двоичного набора 2R:R=S[R], i=0, 1, …, (N-1);
i
i
- Разбиение получившегося массива А=SubRows[A] на N столбцов 3C, длины N;
i
i
i
i
- Преобразование 5 SubColumns. Преобразование каждого /-го N-разрядного двоичного набора 3C:С=S[C], i=0, 1, …, (N-1);
- Результатом замены является блок 7 А=SubCoIumns[A]. Рассмотрим последовательность выполнения трехмерного преобразования замены, т.е. алгоритм функционирования 3D S-блока.
n
Представим входные 12 и выходные 13 блоки данных, а также все промежуточные результаты преобразований в виде кубического массива битов 8 размерностью N×N×N, где N - разрядность используемых узлов замены. Таким образом, объем ключевой информации, однозначно определяющей логику работы каждого узла замены, равен N×2. На фиг.3 показан пример массива 8 размерностью 4×4×4.
cu
Последовательность выполнения операции замены кубического массива битов 12 А=SubCube[A] (или кратко, А=S[A]) размерностью N×N×N имеет следующий вид:
xi
xi
- Разбиение входного массива 12 A на N слоев 10, L размерностью N×N вдоль оси x, i=0, 1, …, (N-1), (фиг.4);
xi
xi
xi
xi
xi
- Преобразование SubLayersX. Выполнение преобразования 11, L=SubSquare[L] каждого i-го слоя 10 L с использованием соответствующих узлов замены, j=0, 1, …, (N-1); все преобразования 1 при этом могут выполняться параллельно;
yi
yi
- Разбиение получившегося массива А=SubLayersX[A] на N слоев 10 L размерностью N×N вдоль оси у, i=0, 1, …, (N-1), (фиг.4);
yi
yi
yi
yi
yi
yi
- Преобразование SubLayersY. Выполнение преобразования 11 L=SubSquare[L] каждого i-го слоя 10 L с использованием соответствующих узлов замены, i=0, 1, …, (N-1); все преобразования 11 при этом могут выполняться параллельно;
zi
zi
- Разбиение получившегося массива A=SubLayersY[A] на N слоев 10 L - размерностью N×N вдоль оси z, i=0, 1, …, (N-1), (фиг.4);
Zi
zi
Zi
zi
zi
zi
- Преобразование SubLayersZ. Выполнение преобразования 11 L=SiibSqnare[L] каждого i-го слоя 10 L с использованием соответствующих узлов замены, i=0, 1, …, (N-1); все преобразования 11 при этом могут выполняться параллельно;
- Результатом замены является 13 А=SubLayersZ[A].
На фиг.5 показана последовательность преобразования массива 8 размером 4×4×4.
2
3
Предложены способы выполнения операции замены в двух и трех измерениях с использованием соответственно 2D и 3D 3-блоков. Описаны операции преобразования строк, столбцов и слоев блоков данных. Наиболее очевидное назначение предлагаемых алгоритмов - преобразование N- и N-разрядных блоков данных с использованием таблицы замен размерности N×2 при построении нелинейных функций выхода или обратной связи ГПСЧ, примитивов хеширования, блочного и поточного шифрования.
В последние годы все большую популярность завоевывают гибридные вычислительные системы, сочетающие удобство классических вычислений на центральных процессорах (CPU) с массово-параллельными вычислениями на графических процессорах (GPU) [Боресков А.В., Харламов А.А. Основы работы с технологией CUDA. М.: ДМК Пресс, 2011], [CUDA Zone. URL http://developer.nvidia.com/category/zone/cuda-zone]. Особенностью GPU является наличие большого числа (десятки и сотни) вычислительных ядер, работающих параллельно. В задачах, допускающих распараллеливание обработки потока исходных данных, выигрыш в производительности для системы CPU/GPU составляет до нескольких десятков раз по сравнению с классической CPU-системой. Многие из наиболее производительных современных суперкомпьютеров также имеют гибридную архитектуру CPU/GPU.
В гибридных системах CPU решает задачи управления выполнением программы в целом и проведения не очень "тяжелых" вычислений; наиболее критичные по производительности участки программы оформляются в виде специальных функций-ядер (kernel), которые запускаются на GPU. Современные производители графических процессоров, в частности компания NVIDIA, предоставляют разработчикам программ для систем CPU/GPU мощные инструментальные средства. Полезной и приятной особенностью таких средств является то, что они являются бесплатными. В качестве примеров можно указать CUDA Toolkit [CUDA Toolkit. URL ] и Parallel NSight [NVIDIA Parallel Nsight. URL  nvidia-parallel-nsight], которые интегрируются с современными популярными системами разработки ПО, такими как Microsoft Visual Studio и NetBeans.
Для программной реализации предложенного алгоритма замены наиболее целесообразной представляется технология CUDA (Compute Unified Device Architecture - вычислительная унифицированная архитектура устройств) от компании NVIDIA [Боресков А.В., Харламов А.А. Основы работы с технологией CUDA. М.: ДМК Пресс, 2011], [CUDA Zone. URL ]. Минимальной вычислительной единицей в CUDA является нить (thread). По сути, нить есть набор конкретных действий над элементом данных, нити группируются в пучки (warp); все нити одного пучка физически параллельно выполняются на потоковом мультипроцессоре; из потоковых мультипроцессоров состоит графический процессор. Очень важной особенностью CUDA является то, что при программировании нити образуют трехмерные структуры, именуемые блоками (block). Блоки, в свою очередь, группируются в еще более крупную многомерную структуру, именуемую сеткой (grid). Другими словами, сетка есть совокупность всех нитей, выполняющих параллельную обработку данных, и вместе с тем представляющая собой гибкую многомерную иерархическую структуру. Таким образом, CUDA-программист может оперировать с одно-, двух- или трехмерными структурами для параллельной обработки исходных данных, в том числе комбинируя размерности этих структур.
Очевидно, что при предлагаемом способе выполнения преобразования замены все слои блоков данных могут быть обработаны параллельно, а применение CUDA позволит существенно упростить процесс разработки ПО на основе алгоритма 3D замены.
Данные анализа степени параллелизма в предлагаемом преобразовании представлены в таблице 1. Таким образом, можно сделать вывод, что достоинством изобретения помимо расширения функциональных возможностей за счет увеличение разрядности блока данных, обрабатываемого одним блоком замены, является более высокая степень параллелизма, что обеспечивает получение заявляемого технического результата - увеличение быстродействия при реализации с использованием гибридных суперкомпьютерных технологий.