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

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

CC BY
131
34
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ПРОАКТИВНАЯ БЕЗОПАСНОСТЬ / PROACTIVE SAFETY / САМОТЕСТИРУЮЩАЯСЯ И САМОКОРРЕКТИРУЮЩАЯСЯ ПРОГРАММЫ / SELF-TESTED AND SELF-ADJUSTED PROGRAMS / ВЕРОЯТНОСТНАЯ ОРАКУЛЬНАЯ ПРОГРАММА / PROBABILITY ORACLE PROGRAM / СВОЙСТВО СЛУЧАЙНОЙ САМОСВОДИМОСТИ / PROPERTY OF CASUAL SELF-REDUCIBILITY / УСТОЙЧИВОСТЬ / STABILITY / ТЕСТЫ ЛИНЕЙНОЙ И ЕДИНИЧНОЙ СОСТОЯТЕЛЬНОСТИ / TESTS OF LINEAR AND INDIVIDUAL COMPETENCE

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Казарин Олег Викторович, Скиба Владимир Юрьевич

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

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

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Казарин Олег Викторович, Скиба Владимир Юрьевич

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

Harnessing of Self-Adjusted Environments for Proactive Security of Computer Systems

An approach is proposed to the problem of computer system proactive security. The approach is based on application of algorithmic instruments using methodology of self-testing and self-correcting programs. Along with development of self-corrected schemes, this approach is expected to become one of fundamental principle in proactive safe computer systems design.

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

Артем Вадимович Ростовцев — Институт точной механики и вычислительной техники РАН, Москва;

инженер-конструктор; E-mail: avrostovtsev@ipmce.ru Дмитрий Дмитриевич Николаев — студент; Московский физико-технический институт (государственный

университет), факультет радиотехники и кибернетики; E-mail: ddnikolaev@ipmce.ru

Куанг Киен Чинь — студент; Московский физико-технический институт (государственный

университет); факультет радиотехники и кибернетики; E-mail: kkchin@ipmce.ru

Рекомендована кафедрой Поступила в редакцию

ЭВМ МФТИ 03.10.08 г.

УДК 004.021

О. В. Казарин, В. Ю. Скиба

ПРИМЕНЕНИЕ САМОКОРРЕКТИРУЮЩИХСЯ СРЕД ДЛЯ ОБЕСПЕЧЕНИЯ ПРОАКТИВНОЙ БЕЗОПАСНОСТИ КОМПЬЮТЕРНЫХ СИСТЕМ

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

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

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

В настоящей работе предлагается применять для создания проактивно безопасных КС алгоритмический инструментарий, использующий методы самотестирования и самокоррекции программ [1—3], который наряду с самокорректирующимися схемами (см., например, определения из работ [4, 5]), может стать одним из базовых элементов для создания таких КС.

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

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

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

граммы Р должно лишь незначительно увеличивать время ее выполнения. Кроме того, желательно, чтобы длина кода программы Ту составляла константный мультипликативный фактор от длины кода программы [1].

Пусть п — некоторая вычислительная задача и(или) задача поиска решения. Для х, рассматриваемого в качестве входа задачи, пусть п(х) обозначает результат решения задачи п. Пусть Р — программа (предположительно предназначенная) для решения задачи п, которая останавливается (например, не имеет зацикливаний) на всех входах задачи п. Будем говорить, что Р имеет дефект, если для некоторого входа х задачи п имеет место Р(х)^п(х).

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

— если программа Р не имеет дефектов, т.е. Р(х)=п(х) для всех входов х, тогда СпР(1,к) выдаст ответ „норма" с вероятностью не менее 1-1/2к;

— если программа Р имеет дефекты, т.е. Р(х)^п(х) для всех входов х, тогда СпР(1,к) выдаст ответ „сбой" с вероятностью не менее 1-1/2к.

Самокорректирующаяся программа — это вероятностная программа Су, которая помогает программе Р скорректировать саму себя, если только последняя выдает корректный результат с низкой вероятностью ошибки, т.е. для любого х программа Cf вызывает программу Р для корректного вычисления У(х), в то время как собственно сама Р обладает низкой вероятностью ошибки.

Самотестирующейся / самокорректирующейся программной парой называется пара программ вида (Ту,Су). Предположим, что пользователь может взять любую программу Р, которая целенаправленно вычисляет f и тестирует саму себя при помощи программы Tf. Если Р проходит такие тесты, тогда по любому х пользователь может вызвать программу Су, которая, в свою очередь, вызывает Р для корректного вычисленияУ(х). Даже если программа Р некорректна для некоторых входных значений, ее в данном случае все равно можно уверенно использовать для корректного вычисления У(х) для любого значения х.

Кроме того, если удастся написать программу Р' для вычисления f, тогда некоторая пара (Ту,Су) может использоваться для самотестирования и самокоррекции Р' без какой-либо ее модификации.

Вероятностная программа М является вероятностной оракульной, если она может вызывать другую программу, которая является исполнимой во время выполнения М (М означает, что М может делать вызовы программы А).

Пусть программа Р предположительно вычисляет функцию У; I является объединением подмножеств 1п, где пеЫ, Вр={Пп\п&Щ есть множество распределений вероятности Бп над 1п. Далее, пусть вгг(Р^,Вп) — это вероятность того, что Р(х)Ух), где х выбрано случайным образом в соответствии с распределением Бп из подмножества 1п. Пусть в есть некоторый параметр безопасности. Тогда (в1,в2)-самотестирующейся программой для функции У в отношении ^ с параметрами 0<в1<82 <1 называется вероятностная оракульная программа Ту, которая для параметра безопасности в и любой программы Р на входе п имеет следующие свойства:

— если втт(Р,У,Вп)<г1, тогда программа Тр выдаст на выходе ответ „норма" с вероятностью не менее 1-в;

— если втт(Р,У,Вп)>г2, тогда программа Тр выдаст на выходе „сбой" с вероятностью не менее1-в.

Оракульная программа Су с параметром 0<в<1 называется в-самокорректирующейся программой для функции У в отношении множества распределений Вр, которая имеет

следующее свойство по входу п, хе1п и р. Если егг(Р ,^,Бп)<8, тогда С/=/(х) с вероятностью не менее 1-р.

(81,82,в)-самотестирующейся / самокорректирующейся программной парой для функции f называется пара вероятностных программ (Tf,Cf) такая, что существуют константы 0<81<82<8<1 и множество распределений Бр, при которых Tf есть (е1,82)-самотестирующаяся программа для функции f в отношении Бр, а Cf есть 8-самокорректирующаяся программа для функции f в отношении распределения Бр.

Свойство случайной самосводимости. Пусть хе1п и пусть с>1 есть целое число. Свойство случайной самосводимости заключается в том, что существует алгоритм А1, работающий в течение времени, пропорционального п0(1) [1], посредством которого функцияАу) может быть выражена через вычислимую функцию Г от х, а1, ..., ас и,/(а1), ..., Аас) и алгоритм А2, работающий в течение времени, пропорционального п0(1), посредством которого по данному значению х можно вычислить а1, ..., ас, где каждое аг является случайно распределенным над 1п в соответствии с Бр.

Пусть свойство I может быть выражено уравнением 1(х1, ..., х^)=0, где кортеж <х1, ..., хк) выбирается с распределением Е из пространства Бк. Пара (1,Е) характеризует семейство функций Г, где fеF тогда и только тогда, когда для всех (х1,...,хк) с ненулевой выборкой элементов кортежа из Е, I ^1,...,хк)=0. Основным способом самотестирования является идентификация свойства устойчивости для семейства функций Г. Неформально (Б,Б')-устойчивость пары (1,Е) для семейства функций О означает следующее: если для программы РеО свойство 1Р(х1, ..., хк)=0 удовлетворяется с высокой вероятностью, когда <х1, ..., хк) выбран с распределением Е из Бк, существует функция gеF<^О, которая согласуется с Р на большей части входов из Б'.

Рассмотрим некоторое свойство линейности (1,Е), где ,х2,х3) тождественно Дх^+Дх^Дхз) и свойство Е означает (х1еК1р,х2еК1р,х1+х2). Пара (1,Е) характеризует Г={/(х)=сх | cеZp} — множество всех линейных функций над Zp. В этом примере О — тривиальное множество всех функций и пара (1,Е) устойчива для О.

Было установлено, что программа Р удовлетворяет свойству устойчивости, далее можно переходить к тестированию программы на линейную и единичную состоятельность.

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

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

у

Пусть для функции У = f (X) существует пара функций Ис) таких, что:

У = ^ V(аО, ...,f (ас)), X = Ис (аь ..., ас).

Легко увидеть, что если значения аг выбраны из 1п в соответствии с распределением Бр,

у

тогда пара функций Ис) обеспечивает выполнение для функции У = V (X) свойства случайной самосводимости. Пару функций Ис)у будем называть 8Т-парой функций для функции У = V (X).

Предположим, что на £Т-пару функций можно наложить некоторую совокупность ограничений на сложность программной реализации и время выполнения. В этом случае пусть

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

Предлагаемый метод верификации расчетной программы Р на основе ^Т-пары функций

*

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

Л*(* *) V* 1 / * * \

1. Определить множество А = <а1,...,ас } такое, что X = пс I а1,...,ас I где

* *

а,1,..., ас выбраны случайным образом из входного подмножества 1п.

2. Вызвать программу Р для вычисления значения 70 = У(х ).

3. Вызвать с раз программу Р для вычисления множества значений {У (а* ),..., У (ас )}.

4. Определить значения 71 = gc (У (а* ),..., У (ас )).

* *

5. Если 7о = 71 , то принимается решение, что программа Р корректна на множестве

^ V* * *)

значений входных параметров \Х ,а^,...,ас >, в противном случае данная программа является некорректной.

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

Т = £ г, + гх + + ^ < Тр (X)(1 + с + Кф (X, с)), ,=1

*

где г, и гх — время выполнения программы Р при входных значениях а,, , = 1, ..., с и X соот-

*

ветственно;^ и г^ — время определения значения функции gc и множества А соответственно;

ТР (X) — временная (не асимптотическая) сложность выполнения программы Р; Кф (X, с) — ко*

эффициент временной сложности программной реализации функции gc и определения А по отношению ко временной сложности программы Р (предположительно, он составляет константный мультипликативный фактор от ТР (X), а его значение меньше единицы).

Для традиционного метода тестирования время выполнения и сравнения полученного результата с эталонным значением составляет:

с с

То = £ гг + гх + £ гХ + гвх > 2Тр (X) (1 + с), ,=1 ,=1

где г,х и г^ — время определения эталонных значений функции 7 = У (X) при значениях а, и X соответственно (в общем случае не может быть меньше времени выполнения программы).

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

с

£ ti + гх + га + г,

ДТ = — = ^ g < 1 + с + ^ = 1/ + Кп

То с сх X 2 (1 + с) /2 2 (1 + с)'

0 £г, + гх +£ гХ + гХ у ; у ;

,=1 ,=1

Так как Кф < 1, а с >2, то получаем относительный выигрыш в оперативности испытания расчетных программ указанного типа (обладающих свойством случайной самосводимости) более чем в 1,5 раза.

Исследования процесса верификации расчетных программ. В качестве примера работоспособности предложенного метода рассмотрим верификацию программы вычисления функции дискретного возведения в степень:

У = /am (x) = Ax mod M

Для экспериментальных исследований была выбрана программа EXP из библиотеки базовых криптографических функций CRYPTOOLS [10], реализующая функцию дискретного возведения в степень. Исследования состояли из определения временных характеристик процесса верификации на основе использования ^Г-пары функций и определения возможности обнаружения преднамеренно внесенных программных ошибок.

Для этого были определены следующие ^Г-пары функций:

g2 (аь а23) = [ fAM (ai )fAM I1)](modM) и ^2(ai, a2)= ai+1;

3

g1 ((a2,a3 ) = [fAM (a1 )fAM (a2 )fAM (a3 )] (modM) и h3 (a2,a3 ) = Zai ;

i=1

g2 (ab a2, a3 )= //AM (a )(a2 )fAM (a3 ) (modM) и h32 (a1> a2' a3 )=a1a2 +a3;

В процессе исследований изменялась используемая 5Т-пара функций и варьировалась размерность параметров A, Ми аргумента X. Результаты экспериментов полностью подтвердили приведенные выше временные зависимости.

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

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

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

Заключение. Таким образом, можно констатировать, что проактивно безопасные КС привлекательны для пользователей КС, которые, по большому счету, могут даже „не заботиться" о безопасности своих информационных и функциональных ресурсов. В настоящей работе предлагается лишь один из потенциально мощных инструментов для создания таких систем — самокорректирующиеся программно-аппаратные программы. К тому же, как видно из настоящей работы и работ [2, 3], самокорректирующиеся программы уже сегодня имеют самую широкую прикладную область применения.

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

1. Казарин О. В., Скиба В. Ю. Об одном методе верификации расчетных программ // Безопасность информационных технологий. 1997. № 3. С. 40—43.

2. Казарин О. В. Безопасность программного обеспечения компьютерных систем. М.: МГУЛ, 2003. 212 с.

3. Казарин О. В. Проактивная безопасность вычислительных систем // Математика и безопасность информационных технологий. Мат. конф. МаБИТ-04. М.: МЦНМО, 2005. С. 306—320.

4. Редькин Н. П. Асимптотически минимальные самокорректирующиеся схемы для одной последовательности булевых функций // Дискретный анализ операций. Сер. 1. 1996. Т. 3, № 2. С. 62—79.

5. Редькин Н. П. О самокорректирующихся схемах и о тестах для инверсных неисправностей элементов // Мат. VIII Междунар. симп. „Дискретная математика и ее приложения . ММ.: Изд-во мех.-мат. ф-та МГУ, 2004. С. 4—8.

6. Blum M., Kannan S. Designing programs that check their work // Proc. 21st ACM Symp. on Theory of Computing. STOC'89. 1989. P. 86—97.

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

7. Blum M., LubyM., RubinfieldR. Self-testing / correcting with applications to numerical problems // Proc. 22nd ACM Symp. on Theory of Computing. STOC'90. 1990. P. 73—83.

8. Gemmel P., Lipton R., RubinfieldR., Sudan M., Wigderson A. Self-testing / correcting for polynomials and for approximate functions // Proc. 23rd ACM Symp. on Theory of Computing. STOC'91. 1991. P. 32—42.

9. Kumar R. S., Sivakumar D. Efficient self-testing/self-correcting of linear recurrences // Proc. 37th IEEE Symp. on Foundations of Computer Sci. FOCS'96. 1996. P. 602—611.

10. Егоркин И. В., Казарин О. В., Скиба В. Ю., Терентьев О. В., Ухлинов Л. М. Библиотека базовых криптографических функций (Cryptools 1.0). Свидетельство об официальной регистрации программы для ЭВМ № 940518. РосАПО, 1994.

Сведения об авторах

Олег Викторович Казарин — канд. техн. наук; Институт проблем информационной безопасности

МГУ им. М. В. Ломоносова, Москва; вед. научный сотрудник; E-mail: okaz2005@yandex.ru, okazarin@iisi.msu.ru Владимир Юрьевич Скиба — канд. техн. наук; Федеральная таможенная служба, Москва; начальник

отдела информационной безопасности; E-mail: skiba@gnivc.customs.ru

Рекомендована институтом Поступила в редакцию

09.12.08 г.

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