вать функциональную безопасность и, как следствие, стабильность информационных систем, используемых в критичных приложениях.
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1. Симанков В.С., Сундеев П.В. Системный анализ функциональной стабильности критичных информационных систем. Монография / Под науч. ред. В.С. Симанкова. - Краснодар. 2004. - 204 с.
2. Qrenander U. Qeneral Pattern Theory, Oxford University Press, 1993. - 904 p.
3. Шуткин Л. В. Парадигма модульного мышления в компьютерной науке и практике // М. НТИ, Сер. 2. 2004. № 10. C. 1-12.
В.Н. Хализев Россия, г. Краснодар, КубГТУ
АЛГЕБРАИЧЕСКАЯ МОДЕЛЬ АНАЛИЗА БЕЗОПАСНОСТИ ПРОГРАММНЫХ СРЕДСТВ АС
В статье рассматривается подход к оценке безопасности программ и алгоритмов систем критических приложений, базирующийся на алгебраической модели описания семантики программ и алгоритмов, основанной на системе алгоритмических алгебр (САА) Глушкова В.М. [1,2], символьном выполнении программ [3], элиминации инвариантов циклов [4].
Алгебра Глушкова модифицирована введением операций семантического умножения и сложения, определяющих поток данных в алгоритме. Введено формальное понятие семантической конструкции, соответствующей интуитивному понятию алгоритмической конструкции или схеме в [2].
Задача контроля соответствия реальных и декларируемых функций программ и алгоритмов формулируется в виде задачи идентификации, как и в [3], но в отличие от G - выполнения, определённого только для некоторых типов регулярных алгоритмов, рассматриваются произвольные типы конструкций и соответствующие подстановки из базы знаний.
Совокупность базовых алгоритмов и проблемных семантических конструкций составляет базу знаний экспертной системы анализа программ. Построение базы знаний может быть проведено как экспертами вручную, так и путем интерактивного обучения базы знаний на примерах корректных программ.
Математическая модель описания программ и алгоритмов
Задачу контроля соответствия реальных и декларируемых функций программы можно интерпретировать как задачу определения семантики (смысла) того, что делает эта программа в терминах и понятиях заказчика.
Процесс семантического анализа или аннотирования программы можно рассматривать как процесс, обратный синтезу программ, по методу многоуровневого структурного проектирования (МСПП) [2], использующему систему алгоритмических алгебр (САА) Глушкова [1]. Запись алгоритмов в САА-схемах естественна, самодокументирована, ориентирована на класс алгоритмов, независима от языка программирования и позволяет в ходе уточнения семантики осуществлять синтез с оптимизацией по выбранным критериям, т. е. осуществлять трансформационный синтез программ. В этом смысле подход адекватен объектно-ориентированному программированию (ООП).
Для решения задачи анализа, т. е. определения принадлежности какой-либо САА-схемы к классу алгоритмов, необходима формализация понятия класса алгоритма путем расширения понятия САА-схемы до более общего понятия - семантической схемы алгоритма как "нефиксированной" САА-схемы, определяющей смы-
словое преобразование входной информации в выходную без строгой упорядоченности элементов схемы. Семантическая схема алгоритма (ССА-схема) с заданным отношением нестрогого порядка над элементами инвариантна к перестановкам и эквивалентным преобразованиям любых элементов, не меняющих смысла данной ССА-схемы, а также вводу любого количества несущественных промежуточных преобразований.
Подобным образом задача семантического анализа неоднократно ставилась как перспективная не только для целей доказательства правильности программ [5,6], но и как процедура "понимания" алгоритма на формальном языке в базах знаний интеллектуальных систем, например в системе PROUST, при обучении алгоритмическим языкам [7].
Неформально процесс семантического анализа выглядит следующим образом. Алгоритму (программе) А ставится в соответствие выражение Wа алгебры семантик, которыми представляется класс "семантически эквивалентных" алгоритмов. Выражение Wа путем алгебраических преобразований приводится к нормальной форме, затем итерационным алгоритмом в выражении Wа отыскиваются (идентифицируются) типовые семантические конструкции из базы знаний (БЗ) системы анализа и производятся обратные подстановки аналогично правилам редукции или элиминации циклов. В БЗ содержатся все возможные "верные" семантики, типовые ошибки, а также семантики программных закладок (ПЗ) с типовыми разрушающими программными воздействиями (РПВ).В результате итерационного построения всех возможных семантик, начиная с выражения Wа, получаем совокупность выражений на языке БЗ, описывающих смысл программы А с точки зрения знаний, накопленных в БЗ на данный момент. По сути в БЗ накапливаются спецификации типовых алгоритмов (программ) в данной предметной области, что делает данный подход похожим на подход, описанный в [7], однако существенным отличием описываемого алгоритма идентификации является использование как формально-логических эквивалентных преобразований термов, так и эвристических знаний экспертов о разных способах программирования смысловых конструкций в проблемно-ориентированных областях знаний.
Формализуем понятие семантической схемы (семантики) по аналогии со схемами программ Глушкова (САА-схемами), а также общими принципами моделирования вычислительной среды, применяемыми в теории схем программ.
Множеству элементов памяти вычислительной среды M={m} ставится в соответствие счетное множество S(M)=M, называемое множеством состояний элементов памяти. Семантической конструкцией (семантикой) в памяти M назовём элемент Ri частично определенного отображения вида f: М^М ,отображающего множество S(M) в себя. Элемент ai частично определённого отображения вида hM^-{0,1} называется условием.
В алгоритмических алгебрах Глушкова элемент Ri назван оператором, ему соответствует оператор ri языка программирования схем программ.
Совокупность всех элементов памяти, исходное состояние которых влияет на действие семантики Ri, назовём областью входных данных семантики, или D-областью. Совокупность элементов памяти, состояние которых может меняться семантикой Ri, назовём V-областью.
Определим операции семантической суммы и произведения следующим образом. Базовый набор семантик R={R1,R2,...,Rn} является однозначным отображением операторов {r1,r2,...,rn} языка программирования или САА.
Композиция операторов r1 и r2 определяется в зависимости от наличия связи выходных переменных оператора r1 и входных переменных оператора r2 либо как
семантическое произведение R1®R2, при V(R1)nD(R2)^0, либо как семантическая сумма R1©R2 в противном случае.
Существенным отличием операции суммы над семантиками от операции дизъюнкции (V) в САА является то, что в записи R1©R2 выполняются параллельно и R1 и R2. Это напоминает операцию асинхронной дизъюнкции (V) из САА-М, однако сумма (©) описывает не параллельный процесс, а результат обычного последовательного выполнения операторов Гі и г2.
Операция элементарного ветвления (V) определяется как
Г R при а=1;
а V R = •!
I е при а=0, где е - пустая семантика.
Оператор дизъюнкции САА связан с семантическими операторами соотношением: (хг^г2) = а V R1 © -.а V R2.
Оператору циклирования САА соответствует циклический оператор над семантиками: (хг1) = а О R1.
Пусть О - сигнатура операций, включающая, кроме булевых операций над условиями, операции семантического сложения, умножения, циклирования и ветвления (©,®,О,У), L - множество логических условий. Тогда двухосновную алгебру A=<R,L,Q> можно назвать системой семантических алгебр (ССА) по аналогии с САА.
Пусть w - семантика с пустой областью определения D(w)=0, а е - семантика S(M) —т. е. "единица" алгебры А. Тогда в алгебре семантик А действуют следующие тождественные соотношения:
а V (R1©R2) = а V R1 © а V R2; а О (R1©R2) = а О R1 © а О R2;
а V а V R = а V R; а V а О R = а О R ;
а О —а V R = w; а V —а О R = w; (1)
R © R = R; Rl ® (R2 © Rз) = Rl ® R2 © Rl ® Rз;
Rl © R2 = R2 © Rl; R © w = w © R = R;
R ® w = w ® R = w; R ® є = є ® R = R.
Процедура построения выражения Wа алгебры семантик, соответствующего программе (алгоритму A), формализуется следующим образом.
Для каждой точки хі алгоритма могут быть составлены уравнения вида
^ = Wl [Rl ,R2, .. ^Л^, .. .,Хп],
X2 = W2[RъR2,•••,RN,XъX2,...,XnL (2)
Xk = Wk[Rl ,R2, .. ^Л^, .,Хп],
или в векторной форме:
X = W ^Д].
Решение системы уравнений (2) заключается в нахождении последовательности выражений xьx2,...,xn , таких, что уравнения превращаются в тождества. Решение состоит в итеративном процессе подстановки вместо операторов г их семантик Ri, вычислении нормальных форм семантических выражений вида ЕП для
линейных участков путем их символьного выполнения (либо G-выполнения) и выполнении остальных подстановок, начиная с самых внутренних вложений:
ri ^ Ri; ri rj ^ Ri sign Rj;
if a then Ri ^ a V Ri; while a do Ri ^ a О Ri;
f®, при V(Rj) n W(Rj) Ф 0; sign = \
l®, при V(Ri) n W(Rj) = 0.
Математическая модель процесса анализа соответствия реальных и декларируемых функций программ и алгоритмов
Суперпозицию операций сигнатуры Q над базисом RuL=E назовём схемой семантики W(E). Каждому алгоритму (программе, регулярной схеме) однозначно соответствует её схема семантики. Обратное утверждение неверно.
Схемы W1(E) и W2(Z) эквивалентны, W1(E)=W2(E), если K(W1)=K(W2), где K(W1), K(W2) - множества конфигураций, порожденные схемами W1 и W2 соответственно при применении эквивалентных преобразований (1).
Алгоритмы А1 и А2 являются структурно-эквивалентными, если W1(A1)= W2(A2), т. е. K(W1)=K(W2) и при этом в ходе доказательства участвовали все аксиомы алгебры семантик.
Алгоритмы А1 и А2 являются логико-термально эквивалентными, если K(W1)=K(W2) и при этом в ходе доказательства участвовали все аксиомы алгебры семантик, а также аксиомы математики входящих в алгоритмы термов.
Если к формальным алгебраическим и математическим аксиомам добавить экспертные знания об эквивалентных алгоритмах, получим систему доказательства смысловой эквивалентности алгоритма или систему анализа смысла алгоритма на основе экспертной базы знаний.
Экспертные знания о построении типовых алгоритмов представляют собой подстановки типа S = W[R,S], где S - денотат аксиомы, выражающий смысл (семантику) преобразования данных, W - концепт, описывающий содержание этого преобразования схемой семантической конструкции.
Иерархическое множество аксиом вида
511 = W„[RbR2,...,Rn],
512 = Wj2[R:,R2,.,Rn],
.... (3)
S1k = W1k[RbR2,--,RnL
или в векторной форме S1 = W1[R], описывают подстановки первого уровня, подстановки вида: S2 = W2[R ,S1] - второго уровня, и так далее до некоторого уровня m: Sm = Wm[R ,Sm-1], и составляют БЗ экспертной системы.
Алгоритмы А1 и А2 являются семантически эквивалентными, если K(W1)=K(W2) и при этом в ходе доказательства участвовали все аксиомы алгебры семантик, аксиомы математики входящих в алгоритмы термов, а также аксиомы экспертных знаний (3).
Процесс семантического анализа программы, представленной виде алгебраического выражения Wa, для контроля соответствия реальных и декларируемых функций программы, а также наличия ПЗ, подробно описан на примерах в [6]. Он состоит в нахождении предельного решения системы алгебраических уравнений
K(X)=K(Wa), составляющих запрос к экспертной системе, путем итерационного применения подстановок из базы знаний системы.
Численное значение уровня безопасности определяется прямым измерением отношения количества идентифицированных семантик в программе ко всему количеству семантик используемой модели (при отсутствии семантик прямо опознанных как программные закладки ).
Совокупность базовых алгоритмов и проблемных семантических конструкций составляют базу знаний экспертной системы анализа программ. Построение базы знаний может быть проведено как экспертами вручную , так и путём интерактивного обучения базы знаний на примерах известных разрушающих программных средств и других средств информационного нападения.
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1. Глушков В.М. Теория автоматов и формальное преобразование программ// Кибернетика. 1965. №5. С.1-10.
2. Многоуровневое структурное проектирование программ: Теоретические основы, инструментарий/ Е.Л.Ющенко, Г.Е.Цейтлин и др. - М.: Финансы и статистика, 1989. -268с.
3. Костырко В.С., Банулин А.В. Об индуктивном синтезе инвариантных утверждений и функций программ // Кибернетика.-1986.-№1.
4. Непомнящий В.А., Рякин О.М. Прикладные методы верификации программ./ Под ред. Ершова А.П.- М.: Радио и связь, 1988. - 256с.
5. Capes Jones T. Reusability in Programming: A Survey of the State of the Art.// IEEE Transactions on Software Engineering, September 1984. Р.488 - 494.
6. Хализев В.Н., Марков В.Н. Подход к верификации программ. // Программные продукты и системы. 1993. №2. С.36-39.
7. Льюис Д., Эллиот С. Proust (Автоматический отладчик для программ на языке Паскаль).// Реальность и прогнозы искусственного интеллекта / Под ред. Стефанюка В.Л. - М.: Мир 1987.