Скачиваний:
169
Добавлен:
02.05.2014
Размер:
412.16 Кб
Скачать
  1. СамотестирующиЕся и самокорректирующиЕся программы

    1. Вводные замечания

www.kiev-security.org.ua

BEST rus DOC FOR FULL SECURITY

Основополагающей работой в области проверки программ, использующих некоторые присущие им внутренние свойства для контроля результатов своей работы, следует считать, написанную в 1989 г., работу [BK], в которой были формализованы основные идеи построенияпрограммных чекеров. Соответствующие определениясамотестирующихся и самокорректирующихся программв 1993 г. были введены в работах [BLR,L1]. В свою очередь, методология самотестирования явилась результатом объединения трех основных идей из криптографии, вероятностных алгоритмов и тестирования программ [BK]. К ним относятся интерактивные системы доказательств и интерактивные системы доказательств с нулевым разглашением [GMR]. Кроме этого, большое значение имели работы М.О. Рабина по вероятностным вычислениям (см., например, [Ра]) и работа латышского математика Р. Фрейвалдса [F], написанная им еще в 1979 году. Он предложил простой и элегантный чекер для задачи умножения матриц, который можно также эффективно применить и для целочисленного умножения и для умножения полиномов.

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

Пусть необходимо написать программу P для вычисления функцииfтак, чтобыP(x)=f(x) для всех значенийx. Традиционные методы верификационного анализа и тестирования программ не позволяют убедиться с вероятностью близкой к единице в корректности результата выполнения программы, хотя бы потому, что тестовый набор входных данных, как правило, не перекрывают весь их возможный спектр. Один из методов решения данной проблемы заключается в создании так называемых самокорректирующихся и самотестирующихся программ, которые позволяют оценить вероятность некорректности результата выполнения программы, то есть, чтоP(x)f(x) и корректно вычислитьf(x) для любыхx, в том случае, если сама программаPна большинстве наборах своих входных данных (но не всех) работает корректно.

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

Обязательным условием для программы Tf является ее принципиальноевременноеотличиеот любой корректной программы вычисления функцииf, в том смысле, что время выполнения программыTf, не учитывающее время вызовов программыP, должно быть значительно меньше, чем время выполнения любой корректной программы для вычисленияf. В этом случае, вычисления согласноTfнекоторым количественным образом должны отличаться от вычислений функцииfисамотестирующаяся программаможет рассматриваться как независимый шаг при верификации программыP, которая предположительно вычисляет функциюf. Кроме того, желательное свойство дляTfдолжно заключаться в том, чтобы ее код был насколько это возможно более простым, то естьTfдолжна бытьэффективнойв том смысле, что время выполненияTfдаже с учетом времени, затраченного на вызовыPдолжно составлять константный мультипликативный фактор от времени выполненияP. Таким образом, самотестирование должно лишь незначительно замедлять время выполнения программыP.

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

Определим (эффективный)программный чекерCдля задачиследующим образом. Чекер CP(I,k) – является произвольной вероятностной машиной Тьюринга, удовлетворяющей следующим условиям. Для любой программыP(предположительно решающей задачу), выполняемой на всех входах задачи, для любого элементаIзадачии для любого положительногоk(параметра безопасности) имеет место:

  • если программа Pне имеет дефектов, т.е.P(x)=(x) для всех входовxзадачи, тогдаCP(I,k) выдаст на выходе ответ «Норма» с вероятностью не менее 1-1/2k;

  • если программа Pимеет дефекты, т.е.P(x)(x) для всех входовxзадачи, тогдаCP(I,k) выдаст на выходе ответ «Сбой» с вероятностью не менее 1-1/2k.

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

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

Перед тем как перейти к более формальному описанию определений самотестирующихся и самокорректирующихся программ необходимо дать определение вероятностной оракульной программе (по аналогии с вероятностной оракульной машиной Тьюринга).

Вероятностная программа Mявляетсявероятностной оракульной программой, если она может вызывать другую программу, которая является исполнимой во время выполненияM. ОбозначениеMAозначает, чтоMможет делать вызовы программы A.

Пусть P- программа, которая предположительно вычисляет функциюf. ПустьIявляется объединением подмножествIn, гдеnпринадлежит множеству натуральных чиселNи пустьDp={DnnN} есть множество распределений вероятностейDnнадIn. Далее, пустьerr(P,f,Dn) – это вероятность того, чтоP(x)f(x), гдеxвыбрано случайно в соответствии с распределениемDnиз подмножестваIn. Пусть- есть некоторый параметр безопасности. Тогда (1,2)-самотестирующейся программойдля функцииfв отношенииDpс параметрами 01<2 1 - называется вероятностная оракульная программаTf, которая для параметра безопасностии любой программыPна входеnимеет следующие свойства:

  • если err(P,f,Dn)1, тогда программаTfP выдаст на выходе ответ «норма» с вероятностью не менее 1-.

  • если err(P,f,Dn)2, тогда программаTfPвыдаст на выходе «сбой» с вероятностью не менее 1-.

Оракульная программа Cfс параметром 0<1 называется-самокорректирующейся программойдля функцииfв отношении множества распределенийDp, которая имеет следующее свойство по входуn,xInи. Еслиerr(P,f,Dn), тогдаCfP=f(x) с вероятностью не менее 1-.

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

Свойство случайной самосводимости.ПустьxInи пустьc>1 - есть целое число. Свойство случайной самосводимости заключается в том, что существует алгоритмA1, работающий за время пропорциональноеnO(1), посредством которого функцияf(x) может быть выражена через вычислимую функциюFотx,a1,...,acиf(a1),...,f(ac) и алгоритмA2, работающий за время пропорциональноеnO(1), посредством которого по данномуxможно вычислитьa1,...,ac, где каждоеaiявляется случайно распределенным надIn в соответствии с Dp.

Соседние файлы в папке Казарин О.В. Теория и практика защиты программ