Теория и практика защиты программ

       

Построение самотестирующейся/самокорректирующейся


Сначала рассмотрим следующие 4 алгоритма (см. рис.4.2 - 4.5). Для доказательства полноты и безопасности указанной самотестирующейся/ самокорректирующейся программной пары доказывается следующая теорема.

Теорема 4.1. Пара программ S_K_exp(x,M,q,g,b) и S_T_exp(x,M,q,g,b) является (1/288,1/8,1/8)-самокорректирующейся/ самотестирующейся программной парой для функции gxmoduloM с входными значениями, выбранными случайно и равновероятно из множества In.

Для доказательства теоремы необходимо доказать две леммы.

Лемма4.1. Программа S_K_exp(M,q,g,b) является (1/8)-самокорректи-рующейся программой для вычисления функции gxmoduloM в отношении равномерного распределения Dn.

Доказательство.

Полнота программы S_K(?) означает, что если оракульная программа P(x), обозначаемая как Exp(?) выполняется корректно, то и самокорректирующаяся программа S_K(?) будет выполняться корректно. В данном случае полнота программы очевидна. Если P(x) корректно вычислима, то из [PM,g(x1)?PM.g(x2)](modM) следует, что fM,g(x)=fM,g(x1)°fM,g(x2)=

gx(mod M)ºRk.

Program S_K_exp(x,M,q,g, Rk); {вход n,x,M,q,g, выход Rk}

begin

for l=1 to 12ln(1/b)

begin

x1:=random(q); {random-  функция случайного равновероятного выбора из целочисленного отрезка

[1,...,q-1]}

x2:=(x-x1)modq;



Exp(g,x1,M,R1); {Exp-       процедура вычисления gxmoduloM=R}

Exp(g,x2,M,R2);

R0:=(R1×R2)modM;

end;

Rk=choice(R0(l)); {choice- функция выбора из массива, состоящего из 12ln(1/b) элементов, ответов, который повторяется наибольшее количество раз}

end.

Рис. 4.2. Псевдокод алгоритма S_K_exp

Program S_T_exp(x,M,q,g,b); {вход x,M,q,g, выход значение предиката output}

begin

t1:=0;t2:=0;

for l=1 to é576ln(4/b)ù

begin

L_T(g,M,q,Rl); {L_T -          процедура, реализующая тест линейной состоятельности, выход - Rl}


t1:=t1+Rl;

end;

if t1/é576ln(4/b)ù>1/72 then output:=«false»;

for l=1 to é32(4/b)ù

begin

N_T(g,M,q,Re); {N-T -         процедура, реализующая тест единичной состоятельности, выход - Re}

t2:=t2+R;

end;

if t2/é32ln(4/b)ù>1/4 then output:= «false»

else output:=«true»

end.

Рис. 4.3. Псевдокод алгоритма S_T_exp

Program L_T(n,R); {вход g,M,q, выход Rl}

begin

x1:=random(q);

x2:=random(q);

x:=(x1+x2)modq;

Exp(g,x1,M,R1);

Exp(g,x2,M,R2);

Exp(g,x,M,R);

if R1×R2=R then Rl:=1

else Rl:=0;

end.

Рис. 4.4. Псевдокод алгоритма теста линейной состоятельности L_T

Program N_T(n,R); {вход g,M,q, выход Re}

begin

x1:=random(q);

x2:=(x1+1)modq;

Exp(g,x1,M,R1);

Exp(g,x2,M,R2);

if R1×g=R2 then Re:=1

else Re:=0;

end.

Рис. 4.5. Псевдокод алгоритма теста единичной состоятельности N_T

Для доказательства безопасности сначала необходимо отметить, что так как x1ÎRZq, то и x2 имеет равномерное распределение вероятностей над Zq. Так как вероятность ошибки e£1/8, то в одном цикле вероятность Prob[Rk=fM,g(x)]³3/4. Чтобы вероятность корректного ответа была не менее чем 1-b, исходя из оценки Чернова [Be1,BLR], необходимо выполнить не менее 12ln(1/b) циклов n.

Лемма 4.2. Программа S_T_exp(n,M,q,g,b) является (1/288,1/8)-самотестирующейся программой, которая контролирует результат вычисления значения функции gxmoduloM с любым модулем M.

Доказательство.

Полнота программы S_T(?) доказывается аналогично доказательству полноты в лемме 4.1, где x1,x2ÎRZq. Полнота теста единичной состоятельности вытекает исходя из следующего очевидного факта. Корректное выполнение теста [PM,g(x1)?PM.g(1)](mod M) соответствует вычислению функции:



fM,g(x)=fM,g(x1)°fM,g(1)=
ºgx(modM)ºRe.

Для доказательства условия самотестируемости необходимо отметить, что так как и в лемме 4.1 для того, чтобы вероятность корректных ответов Rl и Re в обоих тестах была не более 1-b

достаточно выполнить тест линейной состоятельности é576ln(4/b)ù раз и тест единичной состоятельности é32ln(4/b)ù раз.

Можно показать, основываясь на теоретико-групповых рассуждениях, что возможно обобщение программы S_T(?) и для других групп (вышеописанные алгоритмы основываются на вычислениях в мультипликативной группе вычетов над конечным полем). То есть для всех yÎG, P(y)ÎG*, где G*

-представляет собой любую группу, кроме групп G**. К группам последнего вида относятся бесконечные группы, не имеющие конечных подгрупп за исключением {О¢}, где О¢ - тождество группы. Таким образом, можно показать (если параметры выбираются независимо, равновероятно и случайным образом), что программа вида S_T(?) является (e/36,e)-самотестирующейся программой. Из всего сказанного, следует доказательство утверждения леммы        n.

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

Замечания. Как видно из псевдокода алгоритма Axmodulo N в нем используется операция ABmodulo N. Используя ту же технику доказательств, как и для функции дискретного возведения в степень, можно построить (1/576,1/36,1/36)-самокорректирующуюся/ самотестирующуюся программную пару для вычисления функции модулярного умножения. Это справедливо, исходя из следующих соображений. Вычисление функции fM(ab)=fM((a1+a2)(b1+b2)) следует из корректного выполнения программы с 4-х кратным вызовом оракульной программы P(a,b), то есть:

[PM(a1,b1)+PM(a1,b2)+PM(a2,b1)+PM(a2,b2)](mod M).

Алгоритм вычисления Axmodulo N

выполняется для c=2. Однако, декомпозиция x, как следует из свойства самосводимости функции Axmodulo N, может осуществляться на большее число слагаемых. Хотя это приведет к гораздо большему количеству вызовов оракульной программы, но в то же время позволит значительно снизить вероятность ошибки.


Содержание раздела