Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовая булевы функции.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
179.71 Кб
Скачать
  1. Конструкция бент-функции

Итак, разберем преобразование Уолша-Адамара. Для начала определим экспоненту булевой функции f:

exp(f) = (-1)f(x)

Очевидно, что при 0 экспонента принимает значение 1, а при 1 – значение (-1).

Определение. Преобразованием Уолша—Адамара булевой функции f от n переменных называется целочисленная функция Wf, заданная на множестве Zn2 равенством

Wf(v) =  u Zn2 exp(<u,v>f(u))

В [5, глава 6, §6.5] и [6, глава 2, §2.3] описан алгоритм преобразования Уолша-Адамара 2-го рода:

  1. Посчитать экспоненту булевой функции f.

  2. Делим полученный вектор пополам.

  3. Первую половину складываем со второй и записываем результат в первую половину нового столбца.

  4. Из первой половины вычитаем вторую и записываем результат во вторую половину нового столбца.

  5. Каждые половинки делим еще на две половины.

  6. Повторяем шаги 3-5 до тех пор, пока каждый кусочек не будет состоять из одного элемента.

Таким образом, мы получили вектор после преобразования Уолша-Адамара 2-го рода. Теперь осталось только посчитать нелинейность.

Формула подсчета нелинейности имеет вид:

N(f) = 2n-1 – ½ * max( |Wf (v)| ) ,

где аVn , Wf (v) – значения элементов вектора, полученного после преобразования Уолша-Адамара 2-го рода. Она взята из [1, стр.10] и [2, глава 2, §2.2].

Докажем эту формулу. Вес Хэмминга функции f выглядит так:

wt(f)= x Zn2f(x)= x Zn2(1 - exp(f))/2

Очевидно, что  x Zn2 exp(f)=Wf(). Тогда получаем wt(f)=2n−1 − Wf()/2. Из этого следует:

wt(f(x)<a,x>)=2n−1 −Wf(x)<a,x>()/2=2n−1− Wf(a)/2.

Аффинная функция g может задаваться либо g(x)=<a,x>, либо g(x)=<a,x>1. Посчитаем расстояние между функциями f и g в обоих случаях. В первом случае:

dist(f,g)=wt(f(x)<a,x>)=2n−1− Wf(a)/2.

Во втором случае:

dist(f,g)= wt(f(x)<a,x>1)=2n - wt(f(x)<a,x>)=2n−1+ Wf(a)/2.

Таким образом, минимальное расстояние от f до множества аффинных функций равно 2n-1 – ½ * max( |Wf (v)| ). Формула доказана.

Разберем этот алгоритм на примере 1, у которого n=3. Для начала посчитаем экспоненту.

f(x)

exp(f)

0

1

0

1

1

-1

1

-1

0

1

1

-1

1

-1

0

1

А теперь выполним преобразование Уолша-Адамара над полученным вектором.

1

1

-1

-1

1

-1

-1

1

2

0

-2

0

0

0

0

0

4

0

4

4

0

2

0

-2

0

0

0

0

0

4

4

-4

Как видно, max( |Wf (a)| ) = 4. Значит, нелинейность N(f) равна 2.

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

Определение. Бент-функцией называется такая булева функция от n переменных (n четно), что модуль каждого коэффициента Уолша-Адамара этой функции равен 2n/2. Коэффициенты Уолша-Адамара – это значения вектора, полученного после преобразования Уолша-Адамара 2-го рода.

Теорема (Мэйоран—МакФарланд). Пусть T : Zn/22 → Zn/22 — любое взаимно однозначное отображение, h ∈ Fn/2 — произвольная функция. Тогда функция f ∈ Fn такая, что f(u’,u’’) = <u’,T(u’’)>  h(u’’) является бент-функцией. Здесь введены следующие обозначения: Zn/22 – множество из n/2 аргументов, принимающие значения 0 и 1, Fn – множество булевых функций, u’, u’’ Zn/22 .

Эту теорему осуществляет программа meyoran-mcfarland. Опишем, как она действует. Теорема взята из [3, глава 1, §1.2].

Сначала генерируется случайная перестановка. Этот процесс основан на алгоритме Фишера-Йетса. Он выглядит следующим образом:

  1. Число i идет по порядку от 1 до n, где n – число переменных (четное).

  2. Генерируется случайное число в интервале [1 ; i] (назовем его k).

  3. Меняем местами числа на местах i и k в массиве per, где per – это массив, перед выполнением цикла имеющий вид: <1, 2, 3, …, n>

  4. Повторяем шаги 2,3 до тех пор, пока i не будет больше n.

Алгоритм описан в [4].

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

Чтобы вывести все возможные аргументы функции f от n переменных, нужно перевести по порядку все числа от 0 до 2n-1 из десятичной системы счисления в двоичную. Этот процесс осуществляет процедура conversion.

А для создания значений функции h применяется обыкновенная генерация нулей и единиц, происходящая 2n/2 раз.

Далее действуем точно так же, как и сказано в условии теоремы. То есть сначала считаем скалярное произведение пары u’ и T(u’’), потом складываем полученное произведение и h(u’’) по модулю 2. Полученные значения являются значениями бент-функции f.

Разберем этот алгоритм на примере. Пусть n=4, тогда m=n/2=2. Допустим, что случайным образом сгенерировалась перестановка «2,4,3,1». С помощью этой перестановки меняем местами аргументы и записываем их в значения. То есть отображение Т получается следующим образом:

u’’

T(u’’)

00

01

01

11

10

10

11

00

Пусть также случайным образом сгенерировались значения функции h в таком виде:

u’’

h(u’’)

00

1

01

1

10

0

11

0

Далее действуем так, как сказано по условию теоремы. Возьмем, к примеру, аргумент функции f, равный 1011. Получается, что u’=10, u’’=11, T(u’’)=00, h(u’’)=0. Из этого следует, что

f(u’,u’’) = <u’,T(u’’)>  h(u’’) = 1*0  0*0  0 = 0.

Таким образом, бент-функция f выглядит следующим образом:

u’,u’’

f(u’,u’’)

0000

1

0001

1

0010

0

0011

0

0100

0

0101

0

0110

0

0111

0

1000

1

1001

0

1010

1

1011

0

1100

0

1101

1

1110

1

1111

0