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

       

Обозначения и определения для функции дискретного возведения в степень вида gxmoduloM


 Пусть In=Zq представляет собой множество {1,...,q}, где q=j(M) - значение функции Эйлера для модуля M, а Z*M

- множество вычетов по модулю M, где n=élog2Mù. Пусть распределение Dp есть равномерное распределение вероятностей. Оракульной программой, в данном случае, является программа вычисления функции gxmoduloM, по отношению к исследуемым самотестирующейся и самокорректирующейся программам.

Алгоритм Axmodulo N можно вычислить многими способами

[Кн и др.], один из наиболее общеизвестных и применяемых на практике, - это алгоритм, основанный на считывании индекса (значения степени) слева направо. Этот метод достаточно прост и нагляден, история его восходит еще к 200 г. до н.э. Он еще также известен как русский крестьянский метод.

Пусть x[1,...,n] - двоичное представление положительного числа x

и A, B и N - положительные целые числа в r-ичной системе счисления, тогда псевдокод алгоритма Axmodulo N, реализованного программой Exp(?) имеет следующий вид.

Program Exp(x,N,A,R); {вход x,N,A, выход R}

  begin

        B:=1;

        for i:=1 to n do

            begin

               B:=(B*B)modN;

               if [i]=1 then B:=(A*B)modN;

            end;

        R:=B;

  end.

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

Из описания алгоритма видно, что число обращений к операции вида (A*B)moduloN будет logx+b(x), где b(x) число единиц в двоичном представлении операнда x или вес Хэмминга x.



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