Научная статья на тему 'Преобразования алгоритмов вычисления дискретных функций в булевы уравнения'

Преобразования алгоритмов вычисления дискретных функций в булевы уравнения Текст научной статьи по специальности «Математика»

CC BY
332
31
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ДИСКРЕТНЫЕ ФУНКЦИИ / БУЛЕВЫ УРАВНЕНИЯ / МАШИНА С ПРОИЗВОЛЬНЫМ ДОСТУПОМ / DISCRETE FUNCTIONS / BOOLEAN EQUATIONS / RANDOM ACCESS MACHINES

Аннотация научной статьи по математике, автор научной работы — Отпущенников Илья Владимирович, Семёнов Александр Анатольевич

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

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по математике , автор научной работы — Отпущенников Илья Владимирович, Семёнов Александр Анатольевич

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Transformations of discrete functions calculation algorithms to boolean equations

The article is devoted to the problem of transforming algorithmic descriptions of discrete functions to their equational descriptions in the form of boolean equations. We propose an approach based on propositional encoding procedures for binary random access machine programs. These procedures are used to build transformations of high-level descriptions of discrete functions calculation algorithms to boolean equations.

Текст научной работы на тему «Преобразования алгоритмов вычисления дискретных функций в булевы уравнения»

Серия «Математика»

2011. Т. 4, № 1. С. 83-96

Онлайн-доступ к журналу: http://isu.ru/izvestia

УДК 519.7

Преобразования алгоритмов вычисления дискретных функций в булевы уравнения

И. В. Отпущенников

Институт динамики систем и теории управления СО РАН, Иркутск

А. А. Семёнов

Институт динамики систем и теории управления СО РАН, Иркутск

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

Ключевые слова: дискретные функции; булевы уравнения; машина с произвольным доступом.

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

Введение

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

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

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

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

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

Дана дискретная функция f : {0,1}* ^ {0,1}*, описанием которой является программа Mf детерминированной машины Тьюринга (ДМТ). Предполагаем, что dom f = {0,1}*, то есть Mf останавливается на произвольном двоичном слове, и сложность Mf растет как некоторый полином с ростом длины входа. Тем самым Mf задает счетное семейство функций вида fn : {0,1}n ^ {0,1}*, dom fn = {0,1}n, n £ N. Проблемой обращения произвольной функции fn из данного семейства в точке y £ range fn называется следующая задача: зная Mf, число n и y £ range fn, найти такое x £ {0,1}n, что fn(x) = y.

Пропозициональный подход к данной задаче основан на следующем факте: процесс работы программы Mf на произвольном входе можно эффективно (в общем случае за полиномиальное от n время) представить в виде формулы исчисления высказываний. Истинность данной

формулы при некоторых дополнительных условиях, характеризующих конкретный выход у Є range fn, означает существование такого x Є {0,1}n, результат трансформации которого посредством программы Mf есть у. Фактически в этом состоит теорема Кука.

Построение процедуры пропозиционального кодирования ДМТ-про-грамм имеет чисто теоретический интерес. Гораздо более близкими к современным реальным вычислителям являются машины с произвольным доступом (RAM) [1]. Далее мы используем вариант RAM, синтаксис программ которой фактически совпадает с синтаксисом программ для машины с неограниченными регистрами. Данная модель включает потенциально бесконечную вправо ленту, разбитую на ячейки, которые пронумерованы натуральными числами. В каждой ячейке может быть записан только один бит. Произвольная бинарная RAM-программа — это нумерованный список команд, каждая из которых может быть командой одного из следующих двух типов:

1. команды записи в ячейку с номером к бита «0» или бита «1» — соответственно B0(k) и B1(k);

2. команды условного перехода J(k,l,m): сравнить содержимое ячеек с номерами к и l, в случае совпадения перейти к команде с номером m в списке, в противном случае перейти к команде, которая следует в списке за командой J(к, l, m).

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

Пусть f — произвольная тотальная на {0,1}* полиномиально вычислимая дискретная функция, рассматриваемая как семейство

f = {fn}neN '■ fn : {0, 1}n ^ {0, 1}Л

и Mf — ДМТ-программа, вычисляющая f. В соответствии с [2] значение функции сложности p(n) программы Mf равно максимуму шагов ДМТ, выполняющей Mf, по всевозможным входам из {0,1}n. Пусть Rfn — произвольная программа бинарной RAM, вычисляющая функцию fn. Сопоставим ей значение функции $(п), равное максимальному по всевозможным входам из {0,1}n числу обращений к регистрам RAM в процессе выполнения Rfn .

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

Лемма 1 (о моделировании). Пусть Mf — ДМТ-программа, вычисляющая тотальную дискретную функцию f : {0,1}* ^ {0,1}*, и функция сложности программы Mf ограничена некоторым полиномом от п. Существует тотальная алгоритмически вычислимая функция g, которая за полиномиальное от п время по тексту программы Mf

и числу n выдает текст программы Rfn, вычисляющей функцию fn. Функция 'd(n), сопоставляемая получаемому семейству МНР-программ, ограничена сверху полиномом от n.

Данный факт означает наличие эффективной процедуры перехода от ДМТ-программы, вычисляющей f, к семейству двоичных RAM-программ, каждая из которых вычисляет функцию fn,n Є N. Как уже отмечалось, синтаксис RAM-программ близок к ассемблерным программам, что крайне важно при построении практичных процедур пропозиционального кодирования алгоритмов. В техническом плане доказательство леммы 1 стандартно и здесь не приводится (работа ДМТ с входным алфавитом {0,1} на всевозможных входах длины n моделируется на описанной выше RAM в соответствии с принципами, изложенными, например, в [1]).

Теорема 1. Пусть f = {fn}neN — семейство алгоритмически вычислимых за полиномиальное время дискретных функций и {Rfn }neN — семейство бинарных RAM-программ, сопоставляемое f в соответствии с леммой о моделировании. Существует алгоритмически вычислимая тотальная функция h, которая, получая на входе текст программы Rfn, за полиномиальное в общем случае от n время строит такую систему булевых уравнений S (fn), что:

1. для произвольного у Є range fn система S (fn) \y совместна;

2. если X — решение системы S (fn) \y, то за линейное от \Х\ время возможен переход от X к x Є {0,1}n : fn(x) = у.

Здесь через S (fn) \y обозначена система булевых уравнений, которая получается из системы S ( fn) в результате подстановки в нее вектора у Є range fn.

Доказательство. Базовая идея пропозиционального кодирования алгоритмов состоит в построении символьного описания всех возможных эволюций соответствующего вычисления на произвольных входах. В нашем случае требуется описать поведение RAM-вычисления на всевозможных входных двоичных словах длины n. Это можно сделать, если описывать каждую последующую конфигурацию набором функций от предыдущей конфигурации. Если к некоторой конфигурации Ki применяется оператор условного перехода, то, вообще говоря, возможен переход как в Ki+i, так и в Ki+1, однако можно рассмотреть «абстрактную» конфигурацию Ki+i, ячейкам которой сопоставлены булевы переменные, принимающие (в зависимости от соответствующего условия) либо значения, которые формируют конфигурацию Ki+i, либо значения, которые формируют конфигурацию Ki+i. Тем самым, биты в ячейках регистров RAM в конфигурации Ki+i можно считать значениями булевых функций от содержимого регистров RAM в конфигурации

Ki. Данные функции можно записать в явном виде, используя только текст программы Rfn. Очень важно то, что при этом мы точно знаем, сколько потребуется булевых переменных, кодирующих содержимое регистров RAM в конфигурации Ki+i. Это число заведомо не больше максимального номера ячейки, к которой обращается программа Rfn в процессе вычисления.

Итак, процесс пропозиционального кодирования программы Rfn состоит в следующем. Предполагается, что Rfn получает на вход произвольный двоичный вектор (xi,... ,xn) (стартовая конфигурация Ко). Допустим, что первой командой в Rfn является команда условного перехода. Для описания конфигурации Ко введем булевы переменные х1,...,хф, ф > п, где ф = ф(п) — максимальное натуральное число, фигурирующее в тексте программы Rfn (рост функции ф(п) ограничен некоторым полиномом от п). Конфигурация Ki описывается переменными х^,... ,хф, которые связаны с переменными из множества X0, X0 = {xi,...,хф}, некоторыми формулами исчисления высказываний (ИВ)

х] = 91(х1,..., хф).

Далее действуем по аналогии: переход из конфигурации К] в конфигурацию К2 кодируется переменными х2, j £ {1,...,ф}, которые связаны с переменными из X], X1 = {х],... ,хф}, формулами ИВ

2211 j — Ъ' j 1 ^ ^ J •

И так далее.

Пусть X0,..., Xе — множества переменных, соответствующие в указанном выше смысле конфигурациям Ко,..., Ke (Ке — заключительная конфигурация). Сопоставим программе Rfn систему булевых уравнений (обозначаемую через S (fn))

& (х) = в)(х1,..., хф)) = 1 j=1 v 7

< ••• (1.1) && (хе = ее (х!-1,..., хф-1)) = 1

Система S (fn) \y является результатом подстановки в (1.1) значений некоторых переменных из множества |х|,... ,хф^, образующих вектор у £ range fn. С применением подхода, описанного в [4], можно показать, что система S (fn) \y совместна, и если х — произвольное ее решение, то за линейное от \х\ время возможен переход к х £ {0,1}n : ^(х) = у. □

От произвольной системы вида S (fn) \y возможен эффективный (в общем случае за полиномиальное от п время) переход к одному урав-

нению вида КНФ=1. Этот переход осуществляется при помощи преобразований Цейтина [8]. При этом множество переменных разрастается (не более чем полиномиально), однако между множеством решений S (fn) \y и множеством решений получаемого уравнения вида КНФ=1 существует биекция [5].

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

2.1. Основные принципы и механизмы преобразования высокоуровневых программ в булевы уравнения.

Ядром пропозиционального подхода является идея представления булевыми уравнениями переходов из одной конфигурации вычислительной модели в другую. В «высокоуровневом случае» булевы переменные в новой конфигурации могут выражаться в виде суперпозиций булевых функций от многих переменных предыдущей конфигурации. Соответственно и условия перехода могут выражаться сложными булевыми функциями. При этом ситуация «Условие выполнено» эквивалентна принятию некоторой булевой функцией значения «1», ситуация «Условие не выполнено» эквивалентно принятию этой функцией значения «0».

Пример 1. Предположим, что вычисляется функция fa : {0,1}3 ^ {0, 1}2, заданная следующей программой

if (х1 ■ х2 V хз = 1) then (у1 := (х1 | х2), У2 := х2) else (у1 := (х1 ^ х2), У2 := х2).

В соответствии с результатами, представленными выше, данной программе сопоставляется следующая система S (f3):

[ (у1 = ((х1 | х2) ■ (х1 ■ х2 V хз) V (х1 ^ х2) ■ (х1 ■ х2 V хз))) = 1

I (У2 = х2) = 1.

Задача обращения рассматриваемой функции, например, в точке (у1 = 1, у2 = 1), таким образом, сводится к поиску решений системы S (f3) \У1,У2.

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

Пример 2. Рассмотрим программу if g (х^,... ,х,,к) = 1 then S else if h (х^1,. ..,х и) = 1 then T else U

В соответствии с описанными ранее принципами, в процессе преобразования данного оператора вводятся булевы переменные у1,... ,уг, для

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

{1,..., г}, в блоке Б определяется функциями (х1,..., хп), в блоке

Т —функциями (х1,...,хп), в блоке И — функциями (х\,...,хп).

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

{ (у1 = д • ^ V д • Н • ^ V д • Ъ • VI) =1

[ (Уг = д • ^ V д • Н • $ V д • Н • V= 1.

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

Прежде всего отметим, что действия с памятью, которые выполняются в любом современном вычислительном устройстве, в целом аналогичны действиям с регистрами ИЛМ. Поэтому вычисление, которое осуществляет преобразуемая высокоуровневая программа, можно рассматривать как последовательность изменений данных в памяти вычислительного устройства в моменты времени 0,1,... ,е. В каждый момент г, г € {0,...,е}, данные в памяти кодируются булевыми переменными, образующими множество Xг. Таким образом, множество X0 содержит переменные, кодирующие входные данные, а множество Xе — переменные, кодирующие выходные данные рассматриваемого дискретного преобразования.

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

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

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

нейной обратной связью (РСЛОС, [11]), заданной полиномом над СР(2) Z19 + Z18 + Z17 + Z14 + 1 ^ — формальная переменная).

0 13 16 17 18

Рис. 1. РСЛОС с полиномом обратной связи Z19 + Z18 + Z17 + Z14 + 1.

В тексте программы, реализующей данный регистр, будут присутствовать 19 переменных программы, идентифицирующие в каждый момент времени те области памяти ЭВМ, которые хранят содержимое ячеек рассматриваемого регистра. Однако в каждый момент г, г = 0,1, 2,..., эти 19 переменных оказываются связанными с 19 переменными кода, образующим и множество Xг = {х\,..., хг19}. Так, множество X0 = {х0,..., х°д} = |х1,..., х19} образовано переменными, кодирующими начальное заполнение регистра. Множество

X1 = {х

1 = |ж1, . . . ,ж1<з} = {Х20, . . . ,Ж38І

образовано переменными, которые кодируют результат первого сдвига регистра. В соответствии с теоремой 1 переменные из X0 и X1 связываются следующей системой булевых уравнений (аналог системы (1.1)):

(х2° = х19 ® х18 ® х17 ® х14) = 1

(х21 = х1) = 1

(2.1)

(Х38 = Х18) = 1

Можно заметить, что пропозициональный код, представляемый системой (2.1), является избыточным, поскольку переменные х1 и х21 кодируют одну и ту же информацию. То же самое справедливо для переменных х2 и х22,..., х18 и х38.

Избежать такого рода избыточности позволяет описываемая далее техника, использующая в процессе преобразования программы специальный словарь термов. Данный словарь, который обозначается через 5, содержит термы над переменными кода преобразуемой программы. Словарь 5 является динамически расширяемым. В начальном состоянии в Б находятся только переменные множества X0 (то есть переменные, кодирующие входную информацию). В дальнейшем каждый новый терм, попадающий в словарь, является результатом интерпретации некоторой операции присваивания в программе следующего вида:

* = Ф(*Л ,...,^3г ) .

Здесь * — переменная программы, которая связана через специальную структуру данных (далее «структура связи») с некоторой переменной

кода, а Ф (г^ ,...,г^т) —терм над переменными программы. Результатом обработки терма Ф (гл,...,г^т) является некоторый терм р над переменными кода. Затем осуществляется проверка словаря 5 на предмет наличия в нем р. Если р / Б, то данный терм связывается с новой переменной кода и добавляется в словарь Б. Если же р € Б, это означает, что кодируемая данным термом информация уже учтена в пропозициональном коде программы, и ей соответствует отдельная переменная кода х'. В этом случае переменная программы г связывается с переменной кода х' через структуру связи. Данный прием позволяет избегать ввода переменных кода, кодирующих одну и ту же информацию. При этом каждой переменной кода X € Xг, г € {1,... ,е}, ставится в соответствие булево уравнение вида

(х = р (хл ,...,х^к)) = 1

г—1

где {х^ ,...,х^к } С и X5, р (х^ ,...,х^к) — терм, помещаемый в сло-

«=0

варь Б.

Пример 4. Снова рассмотрим преобразование алгоритма из примера

3. На начальном шаге в словарь термов включаются переменные кода, образующие множество X0 = {х1,..., хю}. При этом связи между переменными программы и переменными из X0 выглядят следующим образом: При интерпретации первого сдвига РСЛОС в словарь Б заносится

переменные программы (массив гед)

переменные

кода

0 1 2

17

▼ ▼

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

\> %2 *

18

у

18» ^19

Рис. 2. Связь переменных программы с переменными кода до сдвига регистра.

терм р = х19 ® х18 ® х17 ® х14, кодирующий функцию обратной связи. С этим термом связывается новая переменная кода х2о посредством булева уравнения (х20 = х19 ® х18 ® х17 ® х14) = 1. Связи между элементами словаря Б, переменными программы и переменными кода обновляются посредством изменений в структурах связи так, как показано на рисунке 4. Особо отметим, что для переменных программы, которые

переменные программы (массив гед)

переменные

кода

0 1 2

17 18

Х17, ^19

Рис. 3. Связь переменных программы с переменными кода после сдвига регистра.

идентифицируют содержимое ячеек РСЛОС, помеченных числами от 1 до 18, новые термы не создаются — эти переменые связываются с переменными кода Х\,..., Хі8 соответственно.

2.2. Преобразование условных переходов.

Преобразование условного оператора начинается с анализа условного выражения. Условный оператор — это оператор вида (в псевдокоде) if Ф (zj1,..., Zjr) = 1 then Ветвь 1; else Ветвь 2;

здесь терм условного выражения Ф (zj1,..., Zjr) — терм над переменными программы. Первый шаг преобразования заключается в интерпретации терма условного выражения Ф, результатом чего является терм ф над переменными кода.

Ветвью условного оператора может быть произвольный блок операторов. Интерпретация ветви — это последовательная интерпретация всех операторов соответствующего блока. Особо отметим, что одна и та же переменная программы может фигурировать в различных ветвях условного оператора. Пусть Z — переменная программы, являющаяся левым операндом операции присваивания, которая выполняется как в 1-й ветви, так и во 2-ой ветви. Пусть Ді и Д2 — термы над переменными программы, являющиеся правыми операндами соответствующих операций присваивания в 1-й и 2-й ветвях. В этой ситуации переменой z сопоставляется переменная кода Х, которая связана с термом

здесь ¿1 и 52 — термы над переменными кода, полученные в результате интерпретации термов Ai и Д2 соответственно. Для хранения пар вида (z, 5i) и (z, ¿2) используются отдельные списки (в данном случае списки Li и L2 соответственно).

Далее рассматривается конструкция из нескольких вложенных условных операторов.

if Ф1 (...) = 1 then Ветвь 1; else if Ф2(...) = 1 then Ветвь 2;

else if Фп(...) = 1 then Ветвь n; else Ветвь n + 1;

В соответствии со сказанным выше каждому терму Ф^ i = 1,... ,n, сопоставляется терм над множеством переменных кода. Каждой ветви с номером i £ {1,...,n + 1}, ставится в соответствие список Li,

ф ■ ¿1 V ф ■ ¿2

словаря S при помощи булева уравнения

образованный парами вида (г, ¿г). Пусть г — переменная программы, выступающая в качестве левого операнда операций присваивания в ветвях с номерами от 1 до п + 1 рассматриваемого условного оператора. Тогда переменной г сопоставляется переменная кода х, которая связана с заносимым в словарь Б термом

■01 ■ ¿1 V 01 ■ 02 ■ ¿2 V ... V 01 ■ 02 ■ ... ■ 0и— 1 ■ 0и ■ ¿и V 01 ■ ... ■ фи ■ ¿и+1,

посредством булева уравнения

^х = 01 ■ ¿1 V 01 ■ 02 ■ ¿2 V ... V

V01 ■ 02 ■ ... ■ 0и— 1 ■ 0и ■ ¿и V 01 ■ ... ■ 0и ■ ¿и+1) = 1.

2.3. Кодирование целочисленных операций.

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

Пример 5. Результатом преобразования программы, которая выполняет сложение двух неотрицательных целых чисел, представленных двоичными векторами одинаковой длины, будет следующая система булевых уравнений (здесь предполагается, что для сложения используется алгоритм «столбик»):

' (с0 = й0 ® Ь0) = 1 (Р0 = й0 ■ Ь0) = 1 ____

< (ру = шщ(ау, Ьу,Рз—1)) = 1 j=Л, п

(сг = аг ® Ьг ® рг— 1) = 1, г = 1, п

■. (си = ри—1) = 1

Запись «ша^х, у, г)» обозначает терм х ■ у V х ■ г V у ■ г. Для кодирования битов переноса вводятся новые переменные кода рг, г = 0, п — 1. Аналогичным образом выглядя механизмы преобразования операций умножения, вычитания и сравнения пар целых чисел.

3. Программная трансляция алгоритмов вычисления некоторых криптографических функций в булевы

уравнения

В данном разделе мы приводим краткий перечень результатов, полученных с применением программного комплекса Тгаша^, который был

создан в соответствии с принципами, изложенными в предыдущих пунктах.

Одной из наиболее наглядных областей применения описанной техники трансляции алгоритмов является криптография. В статье [10] было отмечено, что пропозициональные коды алгоритмов шифрования можно использовать для построения аргументированно трудных тестов для разнообразных решателей комбинаторных задач (в том числе для SAT-решателей). В дальнейшем криптоанализ, рассматриваемый как процесс поиска решений булевых уравнений (в частности, SAT-задач), стали называть логическим криптоанализом [12]. Логический криптоанализ оказался эффективным в применении к некоторым генераторам ключевого потока [7, 3].

Генераторы поточного шифрования — это быстро вычислимые дискретные функции, преобразующие двоичные последовательности конечной длины (инициализирующие последовательности) в бесконечные периодические двоичные последовательности (ключевой поток). Задача криптоанализа генератора заключается в нахождении инициализирующей последовательности по известному фрагменту ключевого потока и алгоритму функционирования генератора. Транслируя данный алгоритм, записанный на специальном процедурном языке, Transalg строит систему булевых уравнений, кодирующих процесс порождения произвольного фрагмента ключевого потока. Подстановка в полученную систему анализируемого фрагмента ключевого потока дает систему, из решения которой можно эффективно выделить искомый секретный ключ (инициализирующую последовательность). Наиболее значимым на текущий момент практическим результатом в этом направлении является успешный логический криптоанализ генератора поточного шифрования А5/1, реализованный в специально построенной для этой цели Grid-среде [3].

Интересные результаты дало применение комплекса Transalg для кодирования алгоритма DES. Данный алгоритм фигурирует в массе источников (например, в [11]), поэтому его описание здесь не приводится. Первой работой, в которой был приведен пропозициональный код DES, стала статья [12].

Одним из базовых примитивов шифра DES являются перестановки. Перестановки в DES задаются таблицами натуральных чисел, которые не являются секретными. Произвольная перестановка применяется к некоторому множеству битов обрабатываемого слова. При пропозициональном кодировании операции перестановки Transalg не создает новых переменных кода — как видно из материала пункта 2.1, транслятору достаточно обновить связи переменных программы с уже существующими элементами словаря термов S. Данный факт означает, что операции перестановки не вносят в пропозициональный код алгоритма новой информации, никак не усложняя тем самым задачу логического крипто-

анализа. В результате применения транслятора Transalg к кодированию алгоритма DES был получен (см. таблицу 3) пропозициональный код (в КНФ), существенно более экономный, чем код, приведенный в [12].

Таблица 1.

Кодирование процесса шифрования алгоритмом DES одного блока открытого

текста длиной 64 бита.

Программный комплекс Transalg F. Massacci, L. Marraro, [12]

Без минимизации Минимизация (Espresso, [14])

Переменные Дизъюнкты Переменные Дизъюнкты Переменные Дизъюнкты

1912 37888 1912 26400 10336 61935

Заключение

Мы полагаем, что преобразования, представленные в работе, найдут применение при исследовании разнообразных систем, поведение которых описывается полиномиально вычислимыми дискретными функциями. Сказанное касается, прежде всего, дискретно-автоматных динамических систем — переходы в последующие состояния в этих системах происходят в дискретные моменты времени, и функции, задающие эти переходы, как правило оказываются эффективно вычислимыми (за полиномиальное от объема входных данных время). Устанавливать некоторые свойства такого рода систем можно, преобразуя алгоритмы вычисления функций переходов в булевы уравнения и добавляя при необходимости к получаемым системам дополнительные ограничения. Для осуществления указанных преобразований можно использовать программный комплекс Тгаша^. В ближайшее время данный подход будет применен к исследованию динамических свойств дискретных моделей генных сетей [6].

Список литературы

1. Ахо А. Построение и анализ вычислительных алгоритмов / А. Ахо, Дж. Хопкрофт, Дж. Ульман. - М. : Мир, 1979. - 536 с.

2. Гэри М. Вычислительные машины и труднорешаемые задачи / М. Гэри, Д. Джонсон. - М. : Мир, 1982. - 416 с.

3. Решение задач криптоанализа поточных шифров в распределенных вычислительных средах / М. А. Посыпкин, О. С. Заикин, Д. В. Беспалов, А. А. Семенов // Тр. ИСА РАН. - 2009. - Т. 46. - С. 119-137.

4. Семенов А. А. Трансляция алгоритмов вычисления дискретных функций в выражения пропозициональной логики / А. А. Семенов // Прикладные алгоритмы в дискретном анализе. - Иркутск : Изд-во ИГУ, 2008. - Вып. 2. - С. 70-98. - (Дискретный анализ и информатика).

5. Семенов А. А. О преобразованиях Цейтина в логических уравнениях / А. А. Семенов // Прикладная дискретная математика. - 2009. - № 4. - С. 28-50.

6. Системная компьютерная биология / под ред. Н. А. Колчанова, С. С. Гончарова, В. А. Лихошвая, В. А. Иванисенко. - Новосибирск : Изд.-во СО РАН, 2008. - 767 с.

7. SAT-подход в криптоанализе некоторых систем поточного шифрования / А. А. Семенов, О. С. Заикин, Д. В. Беспалов, А. А. Ушаков // Вычисл. технологии. - 2008. - Т. 13, № 6. - С. 134-150.

8. Цейтин Г. С. О сложности вывода в исчислении высказываний / Г. С. Цейтин // Зап. науч. семинаров ЛОМИ АН СССР. - 1968. - Т. 8. - С. 234-259.

9. Cook S. A. The complexity of theorem-proving procedures / S. A. Cook // Proc. 3rd Ann. ACM Symp. on Theory of Computing (STOC 71). - ACM, 1971. - P. 151-159.

10. Cook S. A. Finding hard instances of the satisfiability problem: A survey / S. A. Cook, G. Mitchel // DIMACS Series in Discrete Mathematics and Theoretical Computer Science. - 1997. - Vol. 35. - P. 1-17.

11. Menezes A. Handbook of Applied Cryptography / A. Menezes, P. Oorschot, S. Vanstone. - CRC Press, 1996. - 657 p.

12. Massacci F. Logical Cryptanalysis as a SAT Problem / F. Massacci, L. Marraro // Journal of Automated Reasoning. - 2000. - Vol. 24, N 1-2. - P. 165-203.

13. Prestwich S. CNF encodings //In Handbook of Satisfiability / S. Prestwich ; eds.: A. Biere, M.Heule, H. van Maaren, T. Walsh. - IOS Press, 2009. - P. 75-97.

14. URL: http://embedded.eecs.berkeley.edu/pubs/downloads/espresso

I. V. Otpuschennikov, A. A. Semenov

Transformations of discrete functions calculation algorithms to boolean equations

Abstract. The article is devoted to the problem of transforming algorithmic descriptions of discrete functions to their equational descriptions in the form of boolean equations. We propose an approach based on propositional encoding procedures for binary random access machine programs. These procedures are used to build transformations of high-level descriptions of discrete functions calculation algorithms to boolean equations.

Keywords: discrete functions; boolean equations; random access machines.

Отпущенников Илья Владимирович, программист, лаборатория дискретного анализа и прикладной логики, Институт динамики систем и теории управления СО РАН, 664033, Иркутск, ул. Лермонтова, 134, тел.: (3952)453054 ([email protected])

Семёнов Александр Анатольевич, кандидат технических наук, зав. лабораторией дискретного анализа и прикладной логики, Институт динамики систем и теории управления СО РАН, 664033, Иркутск, ул. Лермонтова, 134, тел.: (3952)453054 ([email protected])

Otpuschennikov Ilya, Institute for System Dynamics and Control Theory of SB RAS, Lermontov str., 134, Post Box 292 664033, Irkutsk, Russia Phone: (3952)453054 ([email protected])

Semenov Alexander, Institute for System Dynamics and Control Theory of SB RAS, Lermontov str., 134, Post Box 292 664033, Irkutsk, Russia Phone: (3952)453054 ([email protected])

i Надоели баннеры? Вы всегда можете отключить рекламу.